Python 为什么我的函数返回'None'?

Python 为什么我的函数返回'None'?,python,function,Python,Function,我做了一个计算,结果是: num = input("How many numbers would you like to add? ") list = [] for x in range(num): list.append(input('Number: ')) a = 0 for x in list: a=a+x print a 但是,当我试图在这上面做一个函数时,根本不起作用。你能告诉我怎么走吗 list = [] def adding(): num

我做了一个计算,结果是:

num = input("How many numbers would you like to add? ") 

list = []
for x in range(num):
    list.append(input('Number: '))

a = 0
for x in list:

    a=a+x
    print a
但是,当我试图在这上面做一个函数时,根本不起作用。你能告诉我怎么走吗

list = []

def adding():
    num = input("How many numbers would you like to add? ") 

    for x in range(num):

        list.append(input('Number: '))

        a = 0
        for x in list:
            a=a+x

print adding()

没有显式
return
s或空
return
s的函数将返回
None

>>> def foo():
...     print("Hello")
...
>>> f = foo()
Hello
>>> f is None
True
如果您不想这样做,请在函数末尾使用
return
返回一些值


还有其他一些建议

让您的功能只做一件事: 目前,您的函数正在获取输入、创建列表并对所有内容求和。这是很多。你会发现,如果你把你的函数变小,你会得到一些好处。你可能会考虑这样的事情:

def prompt_for_number_of_inputs():
    return int(input("How many elements are there in the list? ")

def prompt_for_elements(num_elements):
    return [int(input("Enter a number: ")) for _ in range(num_elements)]

def sum_elements_in_list(li):
    return sum(li)
num_elements = prompt_for_number_of_inputs()
my_list = prompt_for_elements(num_elements)
print("The sum of all the elements is {0}".format(sum_elements_in_list(my_list))
所以你可以这样使用它:

def prompt_for_number_of_inputs():
    return int(input("How many elements are there in the list? ")

def prompt_for_elements(num_elements):
    return [int(input("Enter a number: ")) for _ in range(num_elements)]

def sum_elements_in_list(li):
    return sum(li)
num_elements = prompt_for_number_of_inputs()
my_list = prompt_for_elements(num_elements)
print("The sum of all the elements is {0}".format(sum_elements_in_list(my_list))
不要对Python内置进行阴影处理: 如果将变量调用为Python内置变量,您会发现自己遇到麻烦。请看这里:

>>> a = list()
>>> a
[]
>>> list = [1,2,3]
>>> a = list()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>a=list()
>>>a
[]
>>>列表=[1,2,3]
>>>a=列表()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“列表”对象不可调用

通常
list()
会创建一个空列表(如上所示),但这是不可能的,因为您已经将对象绑定到名称
list
。看看其他可能被隐藏的内置名称。

我更改了列表的变量名,因为它隐藏了内置名称并添加了return语句。按您的预期工作

sumlist = []

def adding():
    num = input("How many numbers would you like to add? ") 

    for x in range(int(num)):

        sumlist.append(int(input('Number: ')))

        a = 0
        for x in sumlist:
            a=a+x

    return a

print(adding())

您不会退回任何东西。
您的缩进不正确。
您不应该将python内置项用作变量名(
list
)。
(注意:
\u
通常用作一次性变量)

您实际上不需要第二个循环,因为
返回和(lst)
会做同样的事情。
或者,您根本不需要
lst

def adding():
    num = int(raw_input("How many numbers would you like to add? ")) 

    a = 0
    for _ in range(num):
        x = int(raw_input('Number: '))
        a += x
    return a

1) 您需要从函数中使用
return
(2)请不要调用列表
list
,因为您重写了同名函数。如果您希望函数返回某些内容,它需要有一个return语句。“不起作用”不是很有帮助。什么不起作用?怎么不起作用?你说“不起作用”是什么意思?你不返回任何东西,为什么它不返回一个呢?在Py2中,输入()通常被认为是不安全的,因为它计算输入,使用int(原始输入(…)。你应该把sumlist放入函数中,否则你在玩一个全局变量,这在这里是完全可以避免的。