ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 默认参数 Python中的函数定义以及参数的使用:  定义函数要使用def+函数名 ~~~ def enroll(name,gender,age = 6,city = 'Beijing'): print(name) print(gender) print(age) print(city) enroll('Billy','Six') ~~~ 这里使用了默认参数,降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现。无论是简单调用还是复杂调用,函数只需要定义一个。 默认参数的坑:先定义一个函数,传入一个list,添加一个END再返回: ~~~ def add_end(L=[]): L.append('END') return L add_end([1,2,3]) ~~~ 正常调用的时候没有错误,但是如果使用默认参数多次调用的话: ~~~ print(add_end()) print(add_end()) print(add_end()) print(add_end()) ~~~ 结果会是:  [‘END’]  [‘END’, ‘END’]  [‘END’, ‘END’, ‘END’]  [‘END’, ‘END’, ‘END’, ‘END’]  Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。 所以,定义默认参数要牢记一点:默认参数必须指向不变对象!  要修改上面的例子,可以使用None这个不变对象来实现: ~~~ def add_end(L=None): if L is None: L = [] L.append('END') return L ~~~ #### 可变参数 在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。 要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下: ~~~ def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum ~~~ 但是调用的时候,需要先组装出一个list或tuple: calc([1, 2, 3])  14  calc((1, 3, 5, 7))  84 如果利用可变参数,调用函数的方式可以简化成这样:  calc(1, 2, 3)  14  calc(1, 3, 5, 7)  84  所以,我们把函数的参数改为可变参数: ~~~ def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum ~~~ 定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数: calc(1, 2)  5  calc()  0  如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做: nums = [1, 2, 3]  calc(nums[0], nums[1], nums[2])  14  这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去: nums = [1, 2, 3]  calc(*nums)  14  *nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。 转载自 :[廖雪峰的官方网站:函数的参数](http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000)