Python 连接字符串文字以生成变量名 问题:

Python 连接字符串文字以生成变量名 问题:,python,python-2.7,variables,variable-names,Python,Python 2.7,Variables,Variable Names,在python中,创建函数的最短/最简单方法是什么?该函数允许我通过连接两个字符串文本来生成变量名来访问变量 背景 在C中,我可以这样做: #define CONCAT(x,y) x ## _ ## y 之后,在我的代码中,我可以做如下操作: int i = CONCAT(PRODUCT,BANANA). 假设存在名为PRODUCT_BANANA的宏,则其值现在分配给i。我可以通过间接寻址在shell脚本中实现类似的功能 问题-重复 如何在python中实现相同的功能?我这样做是因为我有

python
中,创建函数的最短/最简单方法是什么?该函数允许我通过连接两个字符串文本来生成变量名来访问变量


背景 在
C
中,我可以这样做:

#define CONCAT(x,y) x ## _ ## y
之后,在我的代码中,我可以做如下操作:

int i = CONCAT(PRODUCT,BANANA).
假设存在名为PRODUCT_BANANA的宏,则其值现在分配给
i
。我可以通过间接寻址在shell脚本中实现类似的功能


问题-重复 如何在
python
中实现相同的功能?我这样做是因为我有一个
python
类,它包含了几十种不同产品的数千个变量,例如

class A(object):
    BANANA_ADDRESS0 = 0xABCD;
    PINEAPPLE_ADDRESS0 = 0x1234;
    BANANA_ADDRESS1 = 0x4567;
    PINEAPPLE_ADDRESS1 = 0x1000;
我希望能够有一个函数,例如,可以通过
someFunc(“BANANA”,“ADDRESS0”)
执行,将值解析为
a.BANANA\u ADDRESS0
,并返回相关值(
0xABCD
,在本例中)


额外的
假设上述情况是可能的,那么函数是否可以始终将提供的函数参数解释为字符串文字,这样函数调用就不需要将参数包装在单引号/双引号中?i、 因此可以通过
someFunc(BANANA,ADDRESS0)
调用它,而不是
someFunc(“BANANA”,“ADDRESS0”)

如果您只想对类/实例属性执行此操作,您需要。它接受一个字符串参数,您可以按照自己喜欢的方式构造该参数:

getattr(A, "BANANA" + "_" + "ADDRESS0")
当然,如果您愿意,您可以编写一个简单的包装器,但在我看来,这将是毫无益处的模糊

构建传递给
getattr
的字符串的任何方式都包括使用其他构造,如
for
循环(如果适用)。例如,假设您拥有属性名元素的可重用性,并希望获得所有这些元素:

for first_part in first_parts:
   for second_part in second_parts:
       print(getattr(A, first_part + "_" + second_part))

对于您的“额外”块,
BANANA
表示名为
BANANA
的变量,而不是文本字符串。如果你真的想,你可以定义这样一个字符串常量,但我不会。没有什么好方法可以告诉Python总是假定一个未解析的变量名实际上意味着一个字符串文字,如果可以的话,我认为这样做是个坏主意。

第一部分很简单:

class A(object):
    BANANA_ADDRESS0 = 0xABCD;
    PINEAPPLE_ADDRESS0 = 0x1234;
    BANANA_ADDRESS1 = 0x4567;
    PINEAPPLE_ADDRESS1 = 0x1000;

    @classmethod
    def some_func(cls, name_a, name_b):
        name = '{}_{}'.format(name_a, name_b)
        return getattr(cls, name)

value = A.some_func('BANANA', 'ADDRESS1')
但是第二部分是不可能的,除非你有一组有限的名字,在这种情况下,你也必须有

BANANA = 'BANANA'
PINEAPPLE = 'PINEAPPLE'
etc

只需使用。i、 e

然后你可以这样做:

var1 = "BANANA" # or any other value
var2 = "ADDRESS0" # or any other value
myValue = A[var1 + "_"  + var2]

构建一个字符串然后使用内置函数是很常见的:
getattr(a_obj,var_name)
为什么不为此使用字典
A={“BANANA\u ADDRESS0
:0xABCD}`并使用
A[“BANANA”+“\u”+“ADDRESS0”]
访问它(可能用一个变量替换“BANANA”和“ADDRESS0”?如果需要全局,请使用允许设置和获取全局的函数variables@MEE代码是动态生成的,脚本要求名称为“交错”(即,为所有产品的
ADDRESS0
创建定义,为所有产品的
ADDRESS1
创建定义,等等)。我需要能够在不更改定义的情况下提取值。如果要访问(设置/写入)变量
var1
中的值,只需执行以下操作:
A[var1+“\u1”+(获取第二部分的某种方法)]
var1 = "BANANA" # or any other value
var2 = "ADDRESS0" # or any other value
myValue = A[var1 + "_"  + var2]