我有一个返回数字的函数。我想分配一个变量来获得这个值,但是当我说temp = foo(i, j)
时,python会给出运行时错误:NameError:name' foo'没有定义。请注意,我已经改变了bar和foo的函数体,显然有一个只返回1的函数是没用的,但它并没有改变我的错误。
sum = 0
for i in range(2, 100):
for j in range(2, i):
temp = foo(i, j)
if (temp > 100):
sum = sum + 1
print sum
def bar (n, a):
r = 1
return r
def foo (n, a):
s = bar(n, a)/factorial(5);
return s
def factorial (n):
r = 1
for i in range (2, n + 1):
r *= i;
return r
答案 0 :(得分:3)
foo的定义是在文件中使用它之后。将函数定义放在for循环之上。
答案 1 :(得分:3)
Python中的名称在绑定之前不存在。将def foo(...):
块移到使用foo()
的代码上方。
答案 2 :(得分:2)
根据其他答案,您的问题是您运行代码的顺序:首次调用时尚未定义foo
。只是想在这里添加关于最佳实践的评论。
我总是尝试将所有内容放入函数中,然后调用底部的任何脚本。你以前可能遇到过这种模式,这是一个很好的习惯:
CONSTANT = 5
def run():
for i in xrange(CONSTANT):
print foo(i) # whatever code you want
def foo(n):
# some method here...
pass
if __name__ == "__main__":
run()
如果您使用python script.py
运行此功能,或者在空闲时点击f5,则会在定义所有内容后执行run()
。
通过遵循此模式,您不必担心定义函数的顺序,并且您可以获得额外的好处,即能够导入foo
与其他函数,而无需在导入期间执行脚本,这可能不是一种理想的行为。