简介
函数是一个对象,存储着执行一些特定功能的代码块,需要的时候可以多次调用
python内置函数
https://docs.python.org/3/library/functions.html
安装好python自带,直接利用就可以
创建
格式如下,用def关键字定义,多个形参用逗号隔开,可以不带参数,也可以没有return结果,代码块统一缩进。
有调用函数,才会执行。
def 函数名称(形参1,形参2...):
代码块
return 结果 #一般都有return结果,也可以不用return
函数名称(实参1,实参2...)#调用函数
参数传递
位置传参
调用的时候按照参数的位置,依次对应
def move(n,a,b,c):
if n == 1:
print(a, '-->', c)
else:
move(n-1,a,c,b)
print(a, '-->', c)
move(n-1,b,a,c)
move(3, 'A', 'B', 'C')
关键词参数
利用关键词赋值的方式传递参数
如上述代码变为
move(n=3,a=‘A’,b=‘B’,c=‘C’)
默认参数值
默认参数为可选,指定了默认值之后:
- 如果用户传递了实参,则默认值不会发挥任何作用;
- 如果用户没有传递,则默认值会发挥作用
>>> def fn(a,b='Jim'):
return(print('hello',a,b))
>>> fn('Dim')#没有填写第二个参数,默认参数发挥作用
hello Dim Jim
>>> fn('Dim','Marry')#填写了第二个参数,默认参数没发挥作用
hello Dim Marry
>>>
混合传参
位置参数和关键字参数可以混合使用
混合使用的时候关键字和位置参数时,必须将位置参数写到关键字参数前面
def s(a,b,c):
print(a+b+c)
s(1,2,3)
s(c=1,a=2,b=3)
s(1,2,c=3)
s(c=1,2,3)错误
不定长参数
- *形参
形参以元组的形式接受实参传递的值
只能有一个,一般写在最后
def qiu_he(*a): #a为不定长参数
s = 0
for i in a:
s += i
return s
print(qiu_he(1,2,3,4))
#如果有序列l=[1,2,3,4],可以用*l表示传入其中的值,结果与上述一致
l = [1,2,3,4]
print(qiu_he(*l))
配合其他参数使用时,调用时其他参数要以关键词的形式传入
如果在形参的开头直接写一个*,则要求我们但是所有的参数要以关键字的形式来传递
def fn(*a,b,c):
代码块
fn(1,2,3,b=4,c=5) #调用时
def fn2(*,a,b,c):
代码块
fn2(a=3,b=4,c=5) #调用时
- **形参
可以接受其他的关键字参数,它会将这些参数统一保存到一个字典当中
只能有一个,必须写在所有形参后面
def fn3(b,c,**a): #**a写在后面
print('a =', a)
print('b =', b)
print('c =', c)
fn3(b=1,d=2,c=3,e=5,f=20)
#结果
'''
a = {'d': 2, 'e': 5, 'f': 20}
b = 1
c = 3
'''
- 概括
*a处理位置参数,以元组接受实参
**a处理的是关键字参数,以字典接受实参
def print(self, *args, sep=' ', end='\n', file=None):
print函数
def get(url, params=None, **kwargs):
requests库get方法
参数的解包
传递实参的时候,
用*传递序列类型,可以是列表,元组,字符串
用**传递字典类型,key对应的形参,value对应的实参
def fn4(a,b,c):
print('a =', a)
print('b =', b)
print('c =', c)
# 这里面要求序列中的元素的个数必须和形参的个数一致
t = (5,6,7,8)
d = {'a':100,'b':200,'c':300}
fn4(**d)