函数也是⼀个对象,函数⽤来保存⼀些可执⾏的代码,并且可以在需要时,对这些语句进⾏多次调⽤。
在Python中,函数有五大要点,分别是def、函数名、函数体、参数、返回值,以及两个英文版符号,分别是括号和冒号。
#函数语法 def 函数名([形参1,形参2,形参3....]):#代码块 123
定义函数时可以在函数括号里定义逗号隔开的数量不等的形参
形参和实参形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值。
实参(实际参数)指定了形参,那么在调⽤函数时必须传递实参,实参将会赋值给对应的形参,简单来说有⼏个形参就要有⼏个实参。
定义形参时,可以为形参指定默认值。
位置传参:将对应位置的实参赋值给对应位置的形参
def fun(a,b,c=8): print(f'a={a},b={b},c={c}') #如果⽤户传递了参数则默认值不会⽣效。 fun(1,6,9) #a=1,b=6,c=9 #如果⽤户没有传递,则默认值就会⽣效。 fun(1,6) #a=1,b=6,c=8 123456' 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,⽽根据参数名进⾏传递。
def fun1(a=2,b=3,c=6): print(f'a={a},b={b},c={c}') fun1(c=1,b=6) #a=2,b=6,c=1 fun1(a=2,b=6,c=9) #a=2,b=6,c=9 fun1(b=8,a=6) #a=6,b=8,c=6 123456' 混合使⽤位置参数和关键字参数的时候必须将位置参数写到关键字参数前⾯去
def fun2(a=2,b=3,c=6): print(f'a={a},b={b},c={c}') fun2(6,c=9) #a=6,b=3,c=9 #fun2(b=8,6) #SyntaxError: positional argument follows keyword argument #fun2(b=8,c=6,2) #SyntaxError: positional argument follows keyword argument fun2(6,c=9,b=80) #a=6,b=80,c=9 1234567'
def sum_fun(a,b): print(a+b) #定义一个函数求任意几个数的和 def anyDataSumFun(*a): print('a=',a,type(a)) #函数的装包 # sum_fun(2,6) anyDataSumFun() # a= () <class 'tuple'> anyDataSumFun(1,2,3,4,5,6,7,8,9,10) #a= (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) <class 'tuple'> def mySUM(*a): print(a) return sum(a) print(mySUM(1,2,3,4,5,6,7,8,9,10)) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 55
1234567891011121314151617181920'函数参数星不可乱加,如下会出现报错
#函数两个以上的单星,会报错 # def mysum1(a,*b,*c): #SyntaxError: invalid syntax # print(a) # print(b) # print(c) # def mysum11(*a,b,*c): #SyntaxError: invalid syntax # print(a) # print(b) # print(c) # 12345678910'
如果星号在中间或者在最前面,函数定义合法,但调用传参需注意要有效的结合指定参数传参,否则会报错。
#星在中间的情况,传参注意 def mysum2(a,*b,c): print(a) print(b) print(c) #错误的传参示范:报错def mysum1(a,*b,*c): #SyntaxError: invalid syntax #mysum2(1,2,3,4,5,6,7,8) #TypeError: mysum2() missing 1 required keyword-only argument: 'c' mysum2(1,2,3,4,5,6,7,8,9,c=10) #正确调用示范结果: # 1 # (2, 3, 4, 5, 6, 7, 8, 9) # 10
12345678910111213141516'#星在最开始的情况 def mysum3(*a,b,c): print(a) print(b) print(c) #mysum3(1,2,3,4,5,6,7,8,9,c=10) #TypeError: mysum3() missing 1 required keyword-only argument: 'b' mysum3(1,2,3,4,5,6,7,8,b=9,c=10) #正确的传参的输出结果: # (1, 2, 3, 4, 5, 6, 7, 8) # 9 # 10 123456789101112'
函数参数为**的形参可以接受其他关键参数,它会将这些参数统一保存到字典当中,字典的key就是参数的名字,字典的value就是参数的值,而且这个也只能有且只有一个,并且必须写在所有的参数后面,
不能写中间也不能写开头。
def mysum5(**a): print(a) #mysum5(3,4) #TypeError: mysum5() takes 0 positional arguments but 2 were given mysum5(h=3,d=4) #{'h': 3, 'd': 4} mysum5(c=3,b=4,a=10) #{'c': 3, 'b': 4, 'a': 10} 12345678'
def mysum6(b,c,**a): print(b) print(c) print(a) mysum6(c=3,b=4,a=10,h=89,w=28) # 4 # 3 # {'a': 10, 'h': 89, 'w': 28} 123456789'
结论:
*a处理的是位置参数
**a处理的是关键字参数
def fun(a,b,c): print('a=',a,end=' ') print('b=',b,end=' ') print('c=',c) t = (100,20,30) #fun(t) TypeError: fun() missing 2 required positional arguments: 'b' and 'c' fun(t[0],t[1],t[2]) #a= 100 b= 20 c= 30 #问题:如果元组有多个元素,则上面的方法就显得臃肿 #用函数调用传实参时,采用有序类型前面加*,这样他就会自动的序列的元素,逐一的解析赋值给函数对应的形参 #元组作为实参函数解包的情况 a = (50,60,70) fun(*a) #a= 50 b= 60 c= 70 #列表作为实参函数解包的情况 list_a = [1,2,3] fun(*list_a) #a= 1 b= 2 c= 3 #但是要注意,序列实参和形参个数应该尽量保持一致,否则在不加组包(形参加星号的方式)就会报错 #list_b = [2,4,7,8] #fun(*list_b)#TypeError: fun() takes 3 positional arguments but 4 were given # 字典作为实参前面加**函数做自动解包 dict_c = {'c':1200,'a':5900,'b':2890} fun(**dict_c) #a= 5900 b= 2890 c= 1200
1234567891011121314151617181920212223242526272829303132'总结:
1.函数组包是函数定义的形参加*号。
2.函数的解包函数掉用传参时,有序实参,前面加*号
小结:
1.函数也是一个对象
2.形参和实参:形参和实参的数量要匹配;
3.函数的传递方式: 位置传参和关键字传参;
4.不定长参数: *只能接收位置传参,**只能接收关键字传参;
5.参数的解包:必须遵守的原则是 序列中的元素的个数必须和形参保持一致。
相关知识
Python中函数加括号和不加括号的区别
python内置函数可以返回列表、元组
【Python】基础
SKYNE/python
Python编写玫瑰花
python玫瑰花代码简单
python玫瑰花代码讲解
Python机器学习基础教程
【Python实用工具】(情人节献礼)turtle函数绘制动态玫瑰花
python 字符串方法isalpha()对中文无效
网址: Python函数知识集锦(一) https://m.huajiangbk.com/newsview423811.html
上一篇: 青少年参加艺术赛事获奖证书有用吗 |
下一篇: 全市教师教学技能大赛证书评职称时 |