Crossin的编程教室
标题: 【Python 第68课】函数的参数传递(2) [打印本页]
作者: crossin先生 时间: 2014-5-19 17:40
标题: 【Python 第68课】函数的参数传递(2)
接着上一次的内容,来介绍一种更加灵活的参数传递方式:
def func(*args)
这种方式的厉害之处在于,它可以接受任意数量的参数。来看具体例子:
def calcSum(*args):
sum = 0
for i in args:
sum += i
print sum
调用:
calcSum(1,2,3)
calcSum(123,456)
calcSum()
输出:
6
579
0
在变量前加上星号前缀(*),调用时的参数会存储在一个 tuple(元组)对象中,赋值给形参。在函数内部,需要对参数进行处理时,只要对这个 tuple 类型的形参(这里是 args)进行操作就可以了。因此,函数在定义时并不需要指明参数个数,就可以处理任意参数个数的情况。
不过有一点需要注意,tuple 是有序的,所以 args 中元素的顺序受到赋值时的影响。如:
def printAll(*args):
for i in args:
print i,
print
调用:
printAll(1,2,3)
printAll(3,2,1)
输出:
1 2 3
3 2 1
虽然3个参数在总体上是相同的,但由于调用的顺序不一样,结果也是不同的。
还有一种参数传递方式,既可以按参数名传递参数,不受位置的限制,又可以像 tuple 传递一样不受数量限制。这个我将在下次课中做介绍。
作者: liu-pengfei 时间: 2014-9-29 23:32
看来必须找本书慢慢品味了。
作者: hanxuejiao 时间: 2015-12-9 16:45
请问先生,在calcsum(1,2,3)的栗子中,为什么不是按照实参分别为1,2,3的顺序依次执行三个for循环然后执行三个print sum呢?
ps:请问先生知道data scientist方面有什么值得推荐的书么?
作者: crossin先生 时间: 2015-12-9 21:21
hanxuejiao 发表于 2015-12-9 16:45
请问先生,在calcsum(1,2,3)的栗子中,为什么不是按照实参分别为1,2,3的顺序依次执行三个for循环然后执行 ...
函数只调用了一遍,参数是3个
data scientist我不太清楚这方面的书
作者: 草办 时间: 2015-12-15 14:15
get
作者: 王asura 时间: 2017-8-17 12:26
谢谢先生
作者: 小妖机 时间: 2018-4-7 20:13
断断续续的看到这里了,要坚持。
作者: zhaolehua 时间: 2018-4-9 13:57
厉害!
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |