在for循环中定义变量的dict:hello = var(' hello')

时间:2017-09-19 14:34:16

标签: python variables for-loop

def func(key):
    return newfunc(var[key])

功能:

hello = func('hello') = newfunc('world')

我想得到这样的结果:varlist = list(var.keys()) for i, variab in enumerate(varlist): varname = variab variab = func(varname)

variab

但问题最后没有定义变量,因为在下一次迭代开始时会覆盖变量for。那么我还有其他方法来编写hello = func('hello')循环来定义dict中的所有变量吗?

我知道我可以继续每行写sudo ln -s /usr/lib/libGLEW.so /usr/lib/libGLEW.so.2.0 和其他变量,但我想知道是否有其他方法可以。

4 个答案:

答案 0 :(得分:2)

您可能会发现这篇文章值得一读:http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html/

问题的简短回答是:当你这样做时:

variab = func(varname)

您没有定义新变量,您只是定义存储在变量中的值。 Variab是静态的。这个名字没变。要定义静态变量,请使用语法

globlas()[variablename] = variablevalue

虽然这是可能的,但它引出了为什么这样的问题?几乎没有必要以这种方式动态创建变量,这就是为什么你通常不会在编程中看到这种模式的原因。解决方案?使用数据结构来正确解决问题。

本文建议使用词典,但根据您的数据结构,您也可以使用类。这取决于你想要完成的问题。

如果您必须使用动态创建的全局变量,我强烈建议您在此之前超过new to Python阶段。同样,当前的代码模式和数据结构存在是有原因的,我不鼓励自愿避免使用它们而采用变通方式解决方案。

答案 1 :(得分:0)

可以动态创建变量,但这并不明智。维护是一场噩梦。将函数存储在字典中会更好,其中键值是动态创建的变量。这应该让你知道如何做到这一点:

#!/usr/bin/python

h = {'hello': 'world', 'good': 'day', 'see': 'you' }
def func(v):
    def newfunc():
        return v
    return newfunc

for k,v in h.items():
    h[k] = func(v)

a = h['hello']()
b = h['good']()
c = h['see']()

print("a = {}".format(a))
print("b = {}".format(b))
print("c = {}".format(c))

答案 2 :(得分:0)

首先,这些值是可调用函数还是字符串值?

如果它们是一些可调用函数,例如:

a = {'hello': hello, 'world': world}

简单直接:

A = {'hello': hello, 'world': world}

def foo(var):
    callback = A.get(var, None)

    # You cancheck and raise when the value
    # is not a method.
    if not callable(callback):
        raise

    return callback

foo('hello')

答案 3 :(得分:0)

你可以将变量fn对放在dict中。 还有一些评论:

  • 你没有在for循环中使用索引i,所以使用枚举是没有意义的。
  • 没有必要将variab重命名为varname。如果您想使用此名称,请从头开始使用它。
  • 您可以迭代dict_keys,因此不需要varlist = list(var.keys())行,您只需使用for variab in var.keys() ...
  • ......实际上你甚至不需要var.keys()for key in dictionary遍历字典的键,因此您只需使用for variab in var

这样的事情会起作用: fn_dict = {} for varname in var: fn_dict[varname] = func(varname)

在循环结束时,您将使用所需的键,函数对填充fn_dict。