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