我有两个基本问题,我在参考文件中找不到。
def()是否可以位于脚本中的任何位置,即使是在其他一些语句的中间?
定义的物理位置必须在调用函数的任何语句或表达式之前吗?
答案 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()
,并且返回了它。 bar
是foo
内部的局部变量,在该函数外部不可见,但由于我们返回了函数对象,因此我们可以将其分配给全局名称。
换句话说,函数遵循与Python中常规变量相同的规则;大多数情况下,您将它们定义为全局变量,但您也可以在函数内创建它们。