【发布时间】:2017-12-22 19:45:39
【问题描述】:
问题
在python 中,创建允许我通过连接两个字符串文字来访问变量以生成变量名称的函数的最短/最简单方法是什么?
背景
在C,我可以这样做:
#define CONCAT(x,y) x ## _ ## y
然后,稍后在我的代码中,我可以执行以下操作:
int i = CONCAT(PRODUCT,BANANA).
假设存在名为 PRODUCT_BANANA 的宏,现在将其值分配给 i。我可以通过间接在 shell 脚本中完成类似的事情。
问题 - Redux
如何在python 中实现相同的功能?我这样做是因为我有一个 python 类,其中包含数十种不同产品的数千个变量,即
class A(object):
BANANA_ADDRESS0 = 0xABCD;
PINEAPPLE_ADDRESS0 = 0x1234;
BANANA_ADDRESS1 = 0x4567;
PINEAPPLE_ADDRESS1 = 0x1000;
我希望能够有一个函数,例如,可以通过someFunc("BANANA", "ADDRESS0") 执行,将值解析为A.BANANA_ADDRESS0,并返回相关值(在本例中为0xABCD)。
额外
假设上述是可能的,是否可以让函数始终将提供的函数参数解释为字符串文字,因此函数调用不需要用单引号/双引号括起来的参数?也就是说,它可以通过someFunc(BANANA, ADDRESS0)而不是someFunc("BANANA", "ADDRESS0")调用?
【问题讨论】:
-
常见的是先构建一个字符串,然后使用getattr内置:
getattr(A_obj, var_name) -
你为什么不用字典呢?
A={"BANANA_ADDRESS0:0xABCD}` 并使用A["BANANA"+"_"+"ADDRESS0"]访问它(并且可能用变量替换“BANANA”和“ADDRESS0”? -
如果您需要将其设为全局变量,请使用
vars()函数,该函数允许您设置和获取全局变量 -
@MEE 代码是动态生成的,脚本要求名称是“交错的”(即为所有产品创建
ADDRESS0的定义,为所有产品创建ADDRESS1的定义等)。我需要能够在不更改定义的情况下提取值。 -
如果你想访问(设置/写入)变量
var1的值,只需这样做:A[var1 + "_" + (some way to get the second part)]
标签: python python-2.7 variables variable-names