繁体   English   中英

python 中的函数和辅助函数的处理方式是否不同?

[英]Are functions and helper functions treated differently in python?

![在此处输入图像描述

在这里,主 function 是 g(x),辅助 function 是 h()。 我注意到我可以得到 g(3) 的 output,只需绑定 x=3 然后执行三个中的任何一个

  1. 打印(g(x))
  2. g(x)
  3. z=g(x)

但另一方面,我注意到只有当我键入“print(h())”时才会输出 h()。 我的观察是正确的还是我犯了错误? 这种奇怪的歧视背后的逻辑是什么?

我喜欢这样想。 通常,如果你有像“5”或“x=5”这样的行,python 不会给出 5 的 output。但是函数被赋予了一个特殊的功能,它们可以通过 3 种方式中的任何一种来调用。 只是在辅助函数的情况下,这个特殊功能被“撤回”

您编写的代码相当于:

def g(x):
    def h():
        any_name_you_want = 'abc'
        return any_name_you_want
    x += 1
    print("in g(x)", x)
    print(h())
    return x

您不能分配给 function 内的非局部变量。 当 Python 为h创建命名空间时, xh是本地的,因为分配需要 python 在运行时为 x 添加命名空间。

因此,您的代码也相当于:

def g(x):
    def h():
        return 'abc'
    x += 1
    print("in g(x)", x)
    print(h())
    return x

要了解正在发生的事情,请运行以下命令,然后阅读UnboundLocalError

def g(x):
    def h():
        x = x
        return x
    x += 1
    print("in g(x)", x)
    print(h())
    return x
   

暂无
暂无

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

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