函数初识
一、什么是函数?
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性:
1、代码重用;
2、保持一致性;
3、可扩展性;
4、可读性强。
二、函数的创建
2.1 格式:
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表):
函数体
1 def hello(): 2 print('hello') 3 4 hello()#函数调用
2.2 函数名的命名规则:
- 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;
- 函数名是区分大小写的。
- 函数名不能是保留字。
三、函数的返回值
1、要想获取函数的执行结果,就可以用return语句把结果返回。
2、return关键字的作用
return 是一个关键字,在pycharm里,你会看到它变成蓝色了。这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”。要研究返回值,返回值有3种情况:分别是没有返回值、返回一个值、返回多个值。
(1)没有返回值
- 不写return,会默认返回一个None。
- 只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数。
1 def func(): 2 l=['菜菜','灵灵'] 3 for i in l: 4 print(i) 5 if i=='菜菜': 6 # return None #return结束了整个函数的执行,不会在执行print('****') 7 break #break只是结束了本次循环,还是会执行print('****') 8 print('****') 9 ret=func() 10 print(ret)
- return None(不常用)
(2)返回一个值
- 可以返回任何数据类型
- 只要返回就可以接收到
- 如果在一个程序中有多个return,那么只执行第一个。
1 def func(): 2 return {'k':'v'} 3 return '你好' 4 print(func()) 5 6 #结果:{'k': 'v'}
(3)返回多个值
- 用多个变量接收:有多少返回值就用多少变量接收
- 用一个变量接收: 得到的是一个元组
1 def func2(): 2 return 1,2,3 3 4 r1,r2,r3=func2() 5 ret=func2() 6 7 print(r1,r2,r3) #结果:1 2 3 8 print(ret) #结果:(1,2,3) 元组
3、return作用总结
(1)结束函数;
(2)返回值。
四、函数的参数
1 def mylen(s1): 2 """计算s1的长度""" 3 length = 0 4 for i in s1: 5 length = length+1 6 return length 7 8 #函数调用 9 str_len = mylen("hello world") 10 print('str_len : %s'%str_len)
1、实参与形参
我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。
定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。
2、参数的个数
- 没有参数;
- 有一个参数;
- 有多个参数。
3、站在实参的角度
- 按位置传参
- 按关键字传参
- 位置、关键字形式混着用
1 def my_sum(a,b): 2 print(a,b) 3 ret=a+b 4 return ret 5 6 print(my_sum(1,2)) #按位置传参 7 print(my_sum(b=4,a=1)) #按关键字传参 8 print(my_sum(4,b=9)) #混用
注意事项:(1)位置传参和关键字传参可以混合使用,必须先按照位置传参,再按照关键字传参;
(2)不能给同一个变量传多个值。
4、站在形参的角度
位置参数:必须传,且有几个参数就传几个值
(1)代码
1 def classmate(name,sex): 2 print('%s:%s'%(name,sex)) 3 4 classmate('菜菜','女') #按位置传参 5 classmate(sex='男',name='灵灵') #按关键字传参
(2)默认参数的陷阱
默认参数:可以不传,如果不传就是用默认的参数,如果传了就用传了的。
1 def classmate(name,sex='女'): 2 print('%s:%s'%(name,sex)) 3 4 classmate('菜菜')
结果: 菜菜:女
*args:接收的是按照位置传参的值,组织成一个元组
(1)代码:
1 def sum(*args): 2 n=0 3 for i in args: 4 n+=i 5 return n 6 7 ret=sum(1,2,3) 8 print(ret) #6 9 ret=sum(1,2,3,4,5) 10 print(ret) #15
**kwargs:接受的是按照关键字传参的值,组织成一个字典
(1)代码:
1 def func(**kwargs): 2 print(kwargs) 3 4 func(a=1,b=2,c=3) #结果:{'a': 1, 'c': 3, 'b': 2} 5 func(菜菜=18,灵灵=19) #中文不用加引号,真是奇怪啊!! 结果:{'菜菜': 18, '灵灵': 19}
优先级:位置参数>*args>默认参数>**kwargs
5、动态参数的另一种传参方式
(1)代码
(2)代码
6、默认参数的陷阱
1、代码
posted on 2018-09-18 16:50 cherish-LL 阅读(204) 评论(0) 收藏 举报
浙公网安备 33010602011771号