所以我又开始学习Python了,我遇到了一个问题。显然你不能调用“下面(在编辑器中)”调用它的代码的方法。例如:
for check in lines:
if is_number(check):
print ("number: " + check)
else:
print ("String!" + check)
def is_number(s):
try:
float(s)
return True
except ValueError:
return False;
这会导致错误(名称未定义),这是有道理的。在C ++中,我知道你可以在使用之前为函数创建一个指针,这样编译器就知道要查找什么,但是如何在python中这样做?
方法is_number是一个模块吗?我听到很多奇怪的术语被抛出。
答案 0 :(得分:4)
您只需将函数移动到调用它的位置上方,或将循环放在自己的函数中。以下工作正常,因为is_number
内的名称check_lines
在调用函数之前无法解析。
def check_lines(lines):
for check in lines:
if is_number(check):
print ("number: " + check)
else:
print ("String!" + check)
def is_number(s):
try:
float(s)
return True
except ValueError:
return False;
check_lines(lines)
在我的Python脚本中,我总是在顶部定义函数,然后在底部放几行代码调用它们。这个约定可以很容易地遵循控制流程,因为它没有穿插定义,并且还使以后更容易将脚本重用为模块,类似于Java 包:只需查看底部附近的“脚本”代码,然后将其删除即可获得可导入的模块。 (或者用if __name__ == '__main__'
警卫来保护它。)
答案 1 :(得分:0)
实际上,Python确实像C一样。区别在于,在C中,在执行模块中的任何内容之前,整个文件都会被编译。在Python中,它运行。
因此,以下内容将起作用,就像在C:
中一样def f(x):
return f2(x) + 1
def f2(x):
return x*2
函数定义只是加载代码 - 它们不检查存在的任何内容。因此,即使f2
在第一次看到f
时尚不存在,但当您实际调用 f
时,模块中确实存在f2
范围,它工作正常。
这不起作用:
print f2(x) + 1
def f2(x):
return x*2
在这种情况下,当加载模块时,它正在被解释。因此,如果它打印,它将立即执行。这可以用于您的利益,但它确实会导致问题,因为我们将立即查找f2
并尝试取消引用它,它将不存在。
答案 2 :(得分:0)
你不能。您无法访问尚未声明/定义的内容。每种编程语言都会发生这种情况。
答案 3 :(得分:0)
将代码写入main()
函数并在代码末尾添加以下行将确保在开始编写脚本之前加载所有声明的函数。
if __name__=="__main__":
main()