如何在dict中设置python函数

时间:2011-03-16 03:35:05

标签: python dictionary

这是我的代码:

a= {'u':exec("def u(str):return Unicode(str,'utf-8')"),}
print a

但显示错误:

SyntaxError: invalid syntax
(mysite)zjm1126@zjm1126-G41MT-S2:~/桌面/test$ python a.py
  File "a.py", line 5
    a= {'u':exec("def u(str):return Unicode(str,'utf-8')"),}
               ^
SyntaxError: invalid syntax

我将它存储到我公司的数据库中,它必须是一个字典,

我能做什么,

感谢

3 个答案:

答案 0 :(得分:1)

替代方案是存储函数,或代码存储为文本:

a= {'u': lambda x: Unicode(x,'utf-8')}

a= {'u':"def u(str):return Unicode(str,'utf-8')",}

然后将其作为

执行
exec(a['u'])

答案 1 :(得分:0)

exec不会返回值;相反,它会评估当前上下文中的某些代码(默认情况下)或用户指定的上下文。通过“上下文”,我的意思是本地人和全球的决定。

看起来你想要以下内容:

a = {  }
exec "def u(string): return unicode(string, 'utf-8')" in { }, a
# a now contains method by name 'u', just like your original example
a['u']('cheese')    # -> u'cheese'

这可以通过执行带有临时字典({ })的代码字符串来存储生成的全局变量,并使用a来存储本地变量。有关详细信息,请参阅docs

如果您需要评估代码块的,则可以使用eval()(尽管您不能eval()方法声明)。

另请注意,unicode应具有小写U.

答案 2 :(得分:0)

我不知道这是多少答案但是如果你首先将exec拉到函数参数中它似乎 ...

>>> exec("def t(x): return x**x")
>>> t(5)
3125
>>> a={'t': t}
>>> a['t'](5)
3125

现在我已经有机会考虑这个问题了。 Exec将评估一段代码,但它不会返回任何内容。我上面的代码片段声明了一个函数 t ,可以将其分配给一个字典。