Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行exec内部函数_Python_Function_Exec - Fatal编程技术网

Python 运行exec内部函数

Python 运行exec内部函数,python,function,exec,Python,Function,Exec,如何在函数内部使用python exec关键字?这会损害函数的性能和可维护性,但如果您真的想让自己的代码变得更糟,Python2(这在Python3中不起作用,您需要使用第二种替代方法)会给您“足够的绳子,让您可以自食其果”(;-): 当然,稍微不那么可怕的是在特定的指令中执行exec: >>> def better(): ... d = {} ... exec "x=23" in d ... return d['x'] ... >>> prin

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

这会损害函数的性能和可维护性,但如果您真的想让自己的代码变得更糟,Python2(这在Python3中不起作用,您需要使用第二种替代方法)会给您“足够的绳子,让您可以自食其果”(;-):

当然,稍微不那么可怕的是在特定的指令中执行
exec

>>> def better():
...   d = {}
...   exec "x=23" in d
...   return d['x']
... 
>>> print better()
23
这至少避免了第一种方法的名称空间污染。

是的

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"

希望这有帮助

Alex的答案在Python3中的工作方式略有不同

因为exec()是Python3中的一个函数,所以使用以下模式-

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

print better()
23
有关更多详细信息,请参见此问题-

到底是什么给你带来了麻烦?到目前为止你尝试了什么?你想做什么?eval和exec,Python中的两个不同的东西。eval(“my_obj.a1=att1”)会给你一个语法错误(由eval引发)(改为try exec)。
eval()
在Python中只接受表达式,赋值是语句,而不是表达式。对不起,我显然发了一篇不好的帖子。我现在看到了错误,意识到我做了一个愚蠢的举动。我想我一定是被考试的压力困扰了。抱歉。有时我需要在进行符号计算时动态地生成变量。你还有什么建议要做到这一点,最好不要使用exec?@imranal我的代码中需要用到这一点,而我找到的唯一方法就是使用“exec”。从最糟糕的exec()使用示例开始,你有没有找到其他选项?我见过python3有没有一个不涉及创建字典的解决方案?使用
exec('x=23',globals())
但请注意,这会将exec内部生成的所有变量添加到全局范围中。它还会覆盖所有同名变量。
def better():
    d = {}
    exec("x=23", d)
    return d['x']

print better()
23