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