Python - 解释函数参数

时间:2014-03-27 02:51:11

标签: python

所以我理解这个简单的for循环:

sum = 0
for number in {1,2,3,4}:
    sum = sum + number
    print sum

>>> 
1
3
6
10
>>> 

然后这是一个整洁的小代码,它结合了for循环和我在互联网上找到的函数:

def sum_list(l):
    sum = 0
    for number in l:
        sum = sum + number
    return sum

print sum_list([1, 7, 4])

>>> 
12

我不明白的是python如何解释这段代码(而不是Python如何知道将3个参数1,7,4加在一起)。

如果你可以为我分解,我真的很有帮助!


要解决另一个问题让你们回顾一下:

sum = 0
for number in {1,2,3,4}:
    sum = sum + number
    return sum

吐出错误。 print sum会将结果列为1,3,6,10

错误说: 语法错误:'返回'功能之外


[编辑] @ sshashank124

例如:此代码吐出3个答案。打印出来:

sum = 0
for number in {1,7,4}:
    sum = sum + number
    print sum

>>> 
1
8
12 
>>> 

但是这个:

def sum_list(l):
    sum= 0
    for number in l:
        sum = sum + number
    print sum
print sum_list([1, 7, 4])

>>> 
12
none

只吐出一个答案12。我的问题是为什么会这样。

4 个答案:

答案 0 :(得分:2)

for number in l:

这会迭代l,而number将在每次迭代时拥有l的每个元素。您可以像这样检查

for number in l:
    print number
# 1
# 7
# 4

您正在将这些数字添加到sum变量中。您可以像这样检查

sum = 0
for number in l:
    sum = sum + number
    print sum
# 1
# 8
# 12

我相信你这样做是出于教育目的。如果你真的想找到一个可迭代的总和,那么你可以使用内置sum函数,就像这样

sum([1, 7, 4])

答案 1 :(得分:1)

for number in l:行获取[1,7,4]中的每个元素,并将它们添加到sum变量中,该变量表示列表中元素的总和。

这就是它的样子:

l的第一个元素:1 添加到sum - > sum现在是1

获取l的第二个元素:7 添加到sum - > sum现在是8

l的第三个元素:4 添加到sum - > sum现在是12

返回sum - > sum12

我可能会建议sum([1,7,4]),内置的python方法也可以。

答案 2 :(得分:1)

在Python中,您将意识到,当您初始化变量时,您不需要为其指定类型,您只需初始化其中的任何内容即可。 在这种情况下,l作为对象进行互操作,或者作为特定的数组进行互操作。

至于循环。

for number in l:

就像是每个语句的一个,它遍历每个元素。并将其存储在数字中,然后在块执行后迭代,继续执行下一个l。

希望有帮助吗? (如果我理解你的问题。

答案 3 :(得分:1)

它知道将它们添加到一起,因为你告诉它这样做。

让我重新编写代码以显示正在发生的事情。重写一个,增加1,7,4然后增加2,8,5,但添加更多数字需要更多行:

sum = 0
sum = sum + 1
sum = sum + 7
sum = sum + 4
print sum

sum = 0
sum = sum + 2
sum = sum + 8
sum = sum + 5
print sum

重写两个 - 使用循环。两条线更短,但它现在可以处理更多项目的列表 - 添加四个,五个,甚至十个数字,而无需添加更多行代码,只需使列表更长:

sum = 0
for number in [1,7,4]:
    sum = sum + number
print sum

sum = 0
for number in [2,8,5]:
    sum = sum + number
print sum

重写三 - 将列表移出循环。代码再次变长了,但发生了一些有趣的事情 - 看看循环代码现在是如何相同

myList = [1,7,4]
sum = 0
for number in myList:
    sum = sum + number
print sum

myList = [2,8,5]
sum = 0
for number in myList:
    sum = sum + number
print sum

重写四 - 现在它是相同的,为什么它必须在那里两次?我们不能......写一次,然后用两次?这样,如果我们需要改变它,我们只需要在一个地方改变它。是 - 将其设为功能并调用函数:

def sum_list():
    sum = 0
    for number in myList:
        sum = sum + number
    print sum

myList = [1,7,4]
sum_list()

myList = [2,8,5]
sum_list()
重写五 - 上面发生的事情很好,因为你把一切都叫做'myList'就可以了。但是,如果你编写更大的程序,它会变得很快 - 一个myList可能是几页代码远离另一个,我们往往会忘记页面和页面可能会影响事物。因此,我们人类可以跟踪正在发生的事情,我们需要清楚明确地为函数提供一些工作,而不是让它远远地远离其他代码。

def sum_list(working_list):       # working_list is whatever the function gets
    sum = 0                       # by a different name
    for number in working_list:
        sum = sum + number
    print sum

myList1 = [1,7,4]
sum_list(myList1)

myList2 = [2,8,5]
sum_list(myList2)

参见上面的代码,我称之为myList1和myList2 - 但无论你给函数什么,函数都会看到它叫做'working_list'。名称不必匹配。

但是因为sum_list有你自己给它的名字,所以你不必为你给它的名字命名。你可以直接给它一个没有名字的列表:

def sum_list(working_list):
    sum = 0                
    for number in working_list:
        sum = sum + number
    print sum

sum_list([1,7,4])

sum_list([2,8,5])

接下来的举动是,一旦你把东西送到sum_list,sum_list就会移开并写入屏幕。我们不能那样做。为了人类跟踪正在发生的事情,这是一个坏主意 - 你想给函数做一些工作要做,让他们给你一个答案。这样你知道你可以随时使用它们,而不必担心它们会意外地打印到屏幕上。这就是“回归”的来源:

def sum_list(working_list):
    sum = 0                
    for number in working_list:
        sum = sum + number
    return sum

result = sum_list([1,7,4])
print result

result = sum_list([2,8,5])
print result

现在sum_list是一个自包含的加法器,它什么也没做。你可以相信它。它不是从你的代码中读取名字,它只是明确地读取你给它的内容。它不是在惊喜时或其他任何东西写入屏幕。你给它一个列表,你得到一个结果,它是孤立的,有限的,可控的,可预测的,易于使用,易于重用。和列表名称一样,如果你所做的只是得到结果并打印出来,你就不会需要给它一个名字:

def sum_list(working_list):
    sum = 0                
    for number in working_list:
        sum = sum + number
    return sum

print sum_list([1,7,4])
print sum_list([2,8,5])

编辑:我希望这可以解释你的几个问题。

  1. 该代码正在做什么
  2. 为什么打印一个答案而不是三个答案 - 因为你给它一件事(列表)。
  3. 为什么单独使用return是没有意义的 - 因为你必须调用一个函数然后从函数返回,你可以带回一些东西,或者你可以去某个地方然后什么都不回来(功能没有回报)。但如果你不先去任何地方,你就不能带回来。