如何在python中动态定义变量?
Posted
技术标签:
【中文标题】如何在python中动态定义变量?【英文标题】:How to define variables dynamically in python? 【发布时间】:2021-10-01 02:13:22 【问题描述】:我需要根据来自我的 UI 的数据动态创建变量。
示例 JSON: 我将从 UI 获取的一些示例 JSON 用于访问 python 代码。
data_json = 'key1':'value1','key2':'value2','key3':['abc','def']
data_json = 'key1':'value2','key2':'value8','key3':['abc','def','ghi','jklmn']
data_json = 'key1':'value3','key2':'value9','key3':['abc']
data_json = 'key1':'value4','key2':'value2','key3':['abc','def','xyz']
data_json = 'key1':'value6','key2':'value2','key3':['abc','def']
我有 JSON 格式的数据,其中“key3”值的长度每次都会不断变化。 我必须在单独的变量中捕获这些值,并且稍后必须在其他函数中使用它们。
如果我通过第一个 data_json 的 if 条件的第一个块将起作用并将其分配给变量。如果我通过第二个 data_json 第二个块将定义变量。
Python:
secret = data_json['key1']
if secret in ['value1','value6']:
first_value = data_json['key3'][0]
second_value = data_json['key3'][1]
if secret in ['value2']:
first_value = data_json['key3'][0]
second_value = data_json['key3'][1]
third_value = data_json['key3'][2]
fourth_value = data_json]'key3'][3]
if secret in ['value3']:
first_value = data_json['key3'][0]
if secret in ['value4']:
first_value = data_json['key3'][0]
second_value = data_json['key3'][1]
third_value = data_json['key3'][2]
print("Value in first:%s",first_value)
print("Value in second :%s",second_value)
print("Value in third:%s",third_value)
我正在使用条件来捕获这些变量。上面的代码工作正常。但我必须避免使用 if 条件。有什么方法可以动态定义变量,以便我以后可以在相同的函数中使用它?
【问题讨论】:
您能否展示稍后将使用这些变量的“其他函数”之一?那么答案可能更好地提供它所需要的功能。 decrypt_list = "cred1":first_value,"cred2":second_value function_call = decrypt(decrypt_list) 我必须将它分配给一个变量并需要将它作为参数传递给函数 我仍然没有真正看到您要做什么,但看起来您想将值放入将传递给函数的 dict 中。字典(@kndofded 建议)让您为每个不同的值命名,而在列表中(@Moosa Saadat 建议)中的项目只有位置,而不是列表中的名称。很可能您的问题可以通过 dict 和 list 变量的某种组合来解决,但如果不了解它的去向,就很难更具体。 【参考方案1】:我认为您的处理方式不正确。对于这种情况——我们有未知数量的变量——我们使用列表! python中的列表是动态大小的。因此,您无需在创建列表之前知道确切的大小。
因此,您可以将数字存储在列表中,然后使用如下索引访问它们:
all_values = data_json['key3']
print("Value in first:%s", all_-values[0])
print("Value in second :%s", all_values[1])
print("Value in third:%s", all_values[2])
请注意,这里不需要条件语句来确保从 JSON 中读取的值的确切数量(不多或少)。
不需要你打电话给dynamic variables
!无论您在哪里需要first_value
,都可以使用all_values[0]
。对于,second_value
,你可以使用all_values[1]
等等...
【讨论】:
【参考方案2】:解决问题的最佳方法是将值保存在数组中,然后通过索引进行访问,而不是为数组中的每个元素创建单独的变量。
data_json = 'key1':'value2','key2':'value8','key3':['abc','def','ghi','jklmn']
key3_vars = data_json['key3']
for var in key3_vars:
print(var)
但如果你必须创建单独的变量,那么你可以使用内置函数exec
。
data_json = 'key1':'value2','key2':'value8','key3':['abc','def','ghi','jklmn']
key3_vars = data_json['key3']
for i, var in enumerate(key3_vars):
exec(f"key3_vari = 'var'")
print(key3_var0)
print(key3_var1)
print(key3_var2)
print(key3_var3)
【讨论】:
以上是关于如何在python中动态定义变量?的主要内容,如果未能解决你的问题,请参考以下文章