函数的参数
一般情况下,我们在定义函数或是调用函数时,都会遇到(),这个()里的就是参数,不同的是,定义函数时,()里是形参,调用函数时,()里是实参。
一般函数的参数可以分为以下几类:
1.默认参数
在一些时候,我们调用某些函数是,某种参数的值一直不变,但每次调用都要重新填写,非常浪费精力,故,我们可以使用默认参数,在参数定义时给予一个默认值就行。
def get_circle_area(r, PI=3.14):
return PI * r * r
r = float(input("请输入圆的半径:"))
area = get_circle_area(r)
print("半径为{}的圆,它的面积是{}".format(r, area))
其中PI=3.14,就是默认参数
2.可变参数
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:
案例如下:
>>> def he(*num):
... sum = 0
... for n in num:
... sum = sum + n * n
... return sum
...
>>> he(1,2,3)
14
>>> he(1,2,3,76)
5790
如果有时,把可变参数放在了,固定参数前,调用时需通过变量名来指定
数据了
>>> def printa(*a,b):
... print(b)
... print(a)
...
>>> printa("liu","xin","xiao")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: printa() missing 1 required keyword-only argument: 'b'
>>> printa("liu","xin",b="xiao")
xiao
('liu', 'xin')
3.关键字参数
将传递给函数的参数解析成字典的样式,即key:value的形式
定义关键字参数,用两个*来声明
案例如下:
>>> def printb(**a):
... print(a)
...
>>> printb(name="liu",age=18)
{'name': 'liu', 'age': 18}
关键字参数还可以指定只能传递什么样为名的参数,即命名关键字参数,一般以*分隔,*后面的就是命名关键字函数
>>> def printb(name,*,age):
... print(name,age)
...
>>> printb("liuxin",18)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: printb() takes 1 positional argument but 2 were given
>>> printb("liuxin",age=18)
liuxin 18