功能:哪些可以/必须声明?

时间:2013-11-20 13:03:39

标签: python function python-2.7

我有两个基本问题,我在参考文件中找不到。

def()是否可以位于脚本中的任何位置,即使是在其他一些语句的中间?

定义的物理位置必须在调用函数的任何语句或表达式之前吗?

1 个答案:

答案 0 :(得分:4)

您可以将函数定义放在任何位置。重要的是名称的可见性。

def functionname():复合语句包含隐式functionname = functionobject(function code)赋值;名称functionname绑定到新的函数对象。

每当您想使用 functionname(调用它或以其他方式引用它)时,名称必须可见。这意味着您可以按任何顺序定义函数,只要它们在调用时可以访问

例如:

def spam():
    baz()

def foo():
    def bar():
        print "Hello world!"
    return bar

baz = foo()
spam()

有效,因为spam()直到最后才被调用。它使用名称baz,这是一个全局名称,baz绑定到foo()的结果,在spam()定义之后但在调用spam()之前

foo中,我们定义了一个函数bar(),并且返回了它。 barfoo内部的局部变量,在该函数外部不可见,但由于我们返回了函数对象,因此我们可以将其分配给全局名称。

换句话说,函数遵循与Python中常规变量相同的规则;大多数情况下,您将它们定义为全局变量,但您也可以在函数内创建它们。