如何在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中动态定义变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中的mysql查询中使用动态变量

如何动态共享包范围的配置变量?

如何在python中动态调用方法?

java如何动态定义变量

IDL中如何定义 动态数组?

在R中如何建立动态的变量名,或者动态的文件名