在函数内部运行exec

10 投票
3 回答
13478 浏览
提问于 2025-04-15 21:31

你怎么能在函数里面使用Python的exec关键字呢?

3 个回答

0

是的。

class A:
    def __init__(self):
        self.a1 = ''
        self.a2 = ''

def populate():
    att1 = raw_input("enter a1: ")
    att2 = raw_input("enter a2: ")
    my_object = A()
    eval("my_obj.a1 = att1")
    eval("my_obj.a2 = att2")
    if eval("my_obj.a2") == 2:
    print "Hooray! the value of a2 in my_obj is 2"

希望这对你有帮助。

8

亚历克斯的回答在Python 3中稍微有些不同。

因为在Python 3中,exec()是一个函数,所以要使用以下的写法-

def better():
    d = {}
    exec("x=23", d)
    return d['x']

print better()
23

想了解更多细节,可以查看这个问题- Python 2和Python 3中exec函数的行为

19

这样做会影响你函数的性能和可维护性,但如果你真的想让自己的代码变得更糟,Python2(在Python3中这样做是行不通的,你需要用第二种方法)给了你“足够的绳子让自己绊倒”的机会(;-):

>>> def horror():
...   exec "x=23"
...   return x
... 
>>> print horror()
23

当然,稍微好一点的方法是把exec放在一个特定的字典里:

>>> def better():
...   d = {}
...   exec "x=23" in d
...   return d['x']
... 
>>> print better()
23

这样至少可以避免第一种方法带来的命名空间污染。

撰写回答