Python在函数中定义函数
我想在函数中定义一个函数,并从函数外调用它。以下是我的代码的简化版本:Python在函数中定义函数,python,function,Python,Function,我想在函数中定义一个函数,并从函数外调用它。以下是我的代码的简化版本: def make_func(): exec('def test(text):\n\tprint(text)') make_func() test("Hello") 运行此代码时,会出现以下错误: Traceback (most recent call last): line 6, in <module> test("Hello") NameError: name 'test' is not
def make_func():
exec('def test(text):\n\tprint(text)')
make_func()
test("Hello")
运行此代码时,会出现以下错误:
Traceback (most recent call last):
line 6, in <module>
test("Hello")
NameError: name 'test' is not defined
回溯(最近一次呼叫最后一次):
第6行,在
测试(“你好”)
NameError:未定义名称“test”
提前感谢您的帮助。修订版: 您需要将测试添加到全局命名空间中。以下是解决方案:
def make_func():
exec('def test(text):\n\tprint(text)', globals())
make_func()
test("Hello")
注意:
这是一个很好的例子
上一篇: 看。无法调用text(“Hello”),因为text()已超出范围,不再定义。它仅在exec()的范围内定义 但是,您可以这样做:
def make_func():
exec('def test(text):\n\tprint(text)\ntest("Hello")')
make_func()
或:
希望对您有所帮助。
test
函数是在make_func
函数中定义的,因此是它的本地函数,以使其全局(可从代码中的任何位置访问)使用(对于Python 2.7):
对于Python 3.x:
def make_func():
exec('def test(text):\n\tprint(text)', globals())
make_func()
test("Hello") # ==> Hello
你为什么要这样做?我认为测试只是在exec的范围内定义的。你对我可以使用的另一个函数有什么建议吗?重点是什么?你想达到什么目的,而你不能通过正常的方式定义函数来实现?(为什么你要把
exec
纳入其中?)这是我实际代码的简化版本,其中我必须从函数内部动态创建函数。我不需要使用exec()
,但我想不出其他方法来实现这一点。我希望从exec()外部调用函数
语句,但感谢您的建议我的意思是,这是不可能的。在exec()中定义的函数仅在exec()的范围内可用。请参阅链接。是否有其他函数可以代替exec()使用
?我无法想象会有,但我不知道。我认为这不太可能。这是不对的。在exec内部定义的名称可以在exec外部使用。我刚刚得到一个错误:第3行,在make_func globals()['test']=测试名称错误:未定义名称“test”
@Pokechu48它适用于Python 2.7,我将看到Python 3.x的解决方案。@Pokechu48检查编辑以获得Python 3.x的解决方案。
def make_func():
exec('def test(text):\n\tprint(text)')
globals()['test'] = test
make_func()
test("Hello") # ==> Hello
def make_func():
exec('def test(text):\n\tprint(text)', globals())
make_func()
test("Hello") # ==> Hello