简体   繁体   English

在函数内部运行 exec

[英]Running exec inside function

如何在函数中使用 python exec 关键字?

It's going to damage your function's performance, as well as its maintainability, but if you really want to make your own code so much worse, Python2 (this will not work in Python3, there you need to use the second alternative) gives you "enough rope to shoot yourself in the foot" (;-):它会损害你的函数的性能,以及它的可维护性,但是如果你真的想让你自己的代码变得更糟,Python2(这在 Python3 中不起作用,你需要使用第二种选择)给你“足够了用绳子射自己的脚”(;-):

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

A tad less horrible, of course, would be to exec in a specific dict:一点点不太可怕,当然,将是exec特定字典:

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

This at least avoids the namespace-pollution of the first approach.这至少避免了第一种方法的命名空间污染。

Alex's answer works slightly differently in Python 3. Alex 的答案在 Python 3 中的工作方式略有不同。

Since exec() is a function in Python 3, use the following pattern-由于 exec() 是 Python 3 中的函数,因此请使用以下模式-

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

print better()
23

See this question for more details- Behavior of exec function in Python 2 and Python 3有关更多详细信息,请参阅此问题 - Python 2 和 Python 3 中 exec 函数的行为

Yes.是的。

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"

Hope this helps希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM