[英]If python run the file "line after line" how can it use a function before it's been defined?
我现在正在学习python,在学习了Java之后,现在我知道java首先编译整个文件然后运行它,从我理解的python中它运行程序,同时它“逐行”编译它。
所以我不明白的是如何在定义函数之前调用它。 我在 Java 中习惯于在需要它们的方法之后编写我所有的“帮助方法”,我认为这样更容易阅读。 所以我尝试在 python 中做同样的事情,它奏效了。 为什么?
这里的一个重要说明是,创建函数的顺序并不重要,重要的是何时调用函数。
以下面的代码为例:
def add_one(new):
return my_add(new, 1)
def my_add(x, y):
return x + y
my_var = 2
print("The value of my_var is: {}".format(my_var))
my_var = add_one(my_var)
print("The value of my_var is: {}".format(my_var))
它产生
my_var 的值为:2
my_var 的值为:3
发生这种情况是因为在调用add_one
函数时,这两个函数都已经存在。 但是,如果尝试和呼叫add_one
之前定义my_add
...
def add_one(new):
return my_add(new, 1)
my_var = 2
print("The value of my_var is: {}".format(my_var))
my_var = add_one(my_var)
print("The value of my_var is: {}".format(my_var))
def my_add(x, y):
return x + y
我们得到:
The value of my_var is: 2
Traceback (most recent call last):
File "c:\Users\wundermahn\Desktop\Stack.py", line 6, in <module>
my_var = add_one(my_var)
File "c:\Users\J39304\Desktop\Stack.py", line 2, in add_one
return my_add(new, 1)
NameError: name 'my_add' is not defined
请参阅Python 脚本中的函数顺序是否重要? 更多
您不能在定义之前调用函数。 这个程序会抛出一个异常:
foo()
def foo():
print("Hello from foo")
如果这不是您的意思,请更新您的问题以使其更具体。
简短的回答是:你不能
大多数较长的python程序都包含这样的语句:
if __name__ == "__main__":
# do something which is usually call a 'main()' function
在他们的主脚本的最后,这意味着 if 语句的内容只有当这个文件被执行时才会执行,而不是被导入。
所有的函数都必须在被调用之前定义,当它到达文件底部的 if 语句时,它们都已经定义好了。
为了补充其他答案,我只想提一下,虽然运行时的代码执行是顺序的,但当解释器遇到函数定义时,只会执行定义行。 这是引用文档:
函数定义不执行函数体; this 仅在调用函数时执行。 ...
这也导致可变类型作为默认参数值的值得注意的行为。 很高兴知道这一点,否则事情会变得非常令人惊讶:
执行函数定义时从左到右计算默认参数值。 这意味着表达式会在定义函数时计算一次,并且每次调用都使用相同的“预计算”值。 这对于理解何时默认参数是可变对象(例如列表或字典)尤其重要:如果函数修改了对象(例如,通过将项目附加到列表),则默认值实际上被修改了。 这通常不是预期的。 解决这个问题的一种方法是使用
None
作为默认值,并在函数体中明确测试它,例如:
def whats_on_the_telly(penguin=None):
if penguin is None: # this conditional ensures the expected behavior
penguin = []
penguin.append("property of the zoo")
return penguin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.