如何在Python中定义全局函数?

发布于 2021-01-29 17:35:14

有没有一种方法可以将一个函数定义为在一个类中是全局的(或者,实际上是在另一个函数中)?类似于定义全局变量。

关注者
0
被浏览
148
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    将函数添加到当前名称空间,就像将添加任何其他名称一样。这意味着您可以global在函数或方法中使用关键字:

    def create_global_function():
        global foo
        def foo(): return 'bar'
    

    同样适用于类主体或方法:

    class ClassWithGlobalFunction:
        global spam
        def spam(): return 'eggs'
    
        def method(self):
            global monty
            def monty(): return 'python'
    

    区别spam将在导入时执行顶级类主体时立即定义。

    像您的所有用途一样,global您可能想重新思考问题并找到另一种解决方法。例如,您可以 返回 如此创建的函数。

    演示:

    >>> def create_global_function():
    ...     global foo
    ...     def foo(): return 'bar'
    ... 
    >>> foo
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'foo' is not defined
    >>> create_global_function()
    >>> foo
    <function foo at 0x102a0c7d0>
    >>> foo()
    'bar'
    >>> class ClassWithGlobalFunction:
    ...     global spam
    ...     def spam(): return 'eggs'
    ...     def method(self):
    ...         global monty
    ...         def monty(): return 'python'
    ... 
    >>> spam
    <function spam at 0x102a0cb18>
    >>> spam()
    'eggs'
    >>> monty
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'monty' is not defined
    >>> ClassWithGlobalFunction().method()
    >>> monty()
    'python'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看