代码之家  ›  专栏  ›  技术社区  ›  Charles R

在Python[duplicate]中通过名称作为字符串访问变量

  •  -1
  • Charles R  · 技术社区  · 6 年前

    我想用列表参数运行函数:

    param = ['a', 'b', 'c']
    myFunction(param)
    

    但是a,b和c必须是动态的,所以我想去掉引号来得到这个:

    param = [a, b, c]
    myFunction(param)
    

    我该怎么做?

    附言:我试过解决这个问题,但没有成功 Removing quotation marks from list items

    2 回复  |  直到 6 年前
        1
  •  3
  •   norok2    6 年前

    如果我理解正确的话,你真的想打电话给我吗 myFunction 带参数 a , b c (假设这些实际上是在前面定义的)。

    一种方法是:

    a, b, c = 1, 2, 3
    param = ['a', 'b', 'c']
    
    def myFunction(x, y, z):
        return x + y + z
    
    myFunction(*[globals()[s] for s in param])
    # returns: 6
    

    编辑:

    globals() (或 locals() 使用稍微不同的构造)。否则,你可以 eval() 这是更强大的,但也可能不太安全。

        2
  •  1
  •   vash_the_stampede    6 年前

    'str' 的不能转换为变量名,但是如果您有th个变量,并且您的目标是将每个变量传递给函数,则这是可能的

    def addition(x):
        return x + 1
    
    a = 1 b = 2 c = 3
    
    param = [a, b, c] 
    print([addition(i) for i in param])
    # [2, 3, 4]
    

    整个名单也可以这样通过

    def addition(x):
        return sum(x)
    
    a = 1
    b = 2
    c = 3
    
    param = [a, b, c]
    print(addition(param))
    # 6