我正在尝试学习如何从其他文件中的模块调用函数。 为什么尝试使用返回的值在主体中给我一个“ Int object is notererable”错误?
import totalages
firstage = int(input('enter age: '))
secondage = int(input('enter age: '))
result = sum(firstage, secondage)
print('together you are', result, 'years old')
#######################这在一个名为totalages.py的单独文件中。
def sum(a, b):
return a + b
当求和函数包含在主体中时,该代码按预期工作以添加两个输入。但是,如果我将函数移到一个单独的文件并尝试导入结果并调用它,则会收到“ int object is notererable”错误。为什么?
答案 0 :(得分:0)
首先,sum是python内置函数,因此您应该将函数重命名为my_sum
还有两种导入函数的方法
from totalages import my_sum
,它告诉解释器进入totalages.py
并导入函数my_sum
,然后您可以直接使用my_sum(a, b)
import totalages
,您需要为此totalages.my_sum(a,b)
现在发生了什么事情,您的import语句确实起作用了,但是您引用了我之前引用的python sum
内置函数,它接受像列表一样的可迭代对象,但是由于您将其传递为整数,因此得到了您看到的int object is not iterable
错误如下
In [2]: sum(1+2)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-6576b93b138f> in <module>
----> 1 sum(1+2)
TypeError: 'int' object is not iterable
因此请记住,您的原始代码将更改为
#Corrected import statement
from totalages import my_sum
firstage = int(input('enter age: '))
secondage = int(input('enter age: '))
result = my_sum(firstage, secondage)
print('together you are', result, 'years old')
您的totalages.py将更改为
def my_sum(a, b):
return a + b
或者,如果您使用import totalages
,则另一个选项是
import totalages
firstage = int(input('enter age: '))
secondage = int(input('enter age: '))
result = totalages.my_sum(firstage, secondage)
print('together you are', result, 'years old')
输出将如下所示:
enter age: 20
enter age: 30
together you are 50 years old
答案 1 :(得分:0)
您的导入不正确。通过此导入,sum
不能调用sum()
方法,而只能由totalages.sum()
调用。您收到此错误消息是因为python使用内置方法sum
而不是您的方法,该方法接收list
作为参数。
下面是一些可以使用的正确方法:
from totalages import sum
...
sum(a, b)
import totalages
...
totalages.sum(a, b)
顺便说一句,尝试避免在内置方法中使用相同的名称。稍后,它将导致您更加困惑。