
1 1. 函数 2 函数是对功能的封装 3 语法: 4 def 函数名(形参列表): 5 函数体(代码块, return) 6 调用: 7 函数名(实参列表) 8 2. 返回值 9 return : 在函数执行的时候. 如果遇到return. 直接返回 10 1.如果函数什么都不写, 不写return, 没有返回值. 得到的是None 11 2.在函数中间或者末尾写return, 返回的是None 12 3.在函数中写return 值. 返回一个值. 13 4.在函数中可以返回多个返回值, return 值1, 值2, 值3...., 接收的是元组 14 3. 参数 15 函数执行的时候给函数传递信息. 16 *形参:函数声明的位置的变量 17 *实参:函数调用的时候给的具体的值 18 传参:把实参交给形参的过程 19 20 1. 实参: 21 1. 位置参数, 按照形参的参数位置, 给形参传值 22 2. 关键字参数, 按照形参的名字给形参传值 23 3. 混合参数. 即用位置参数, 也用关键参数 24 2. 形参: 25 1. 位置参数 26 2. 默认值参数 先位置后默认值 27 3. 动态参数(预习预习)
1. 函数
函数是对功能的封装, 结构体如下:
声明:
def 函数名 (形参)
函数体 (代码块 return)
调用:
函数名 (实参列表)
2. 返回值
return : 函数在执行过程中遇到 return 会直接返回,类似于循环中的 break
1) 如果函数什么都不写,不写return,没有返回值,得到的是None
2) 中间或末尾写return,没有值,返回的是None, 中间出现类似break,不再执行后面的语句
3) 在函数中写 return 值. 返回的是值
4)在函数中可以返回多个值,return 值1,值2,值3... 返回的形式是元组

1 #无返回值的 2 def yue(): 3 print('打开手机') 4 print('打开陌陌') 5 print('搜索心仪的对象') 6 print('出去玩吧') 7 print('出发') 8 yue() 9 print('挣钱!') 10 11 #有返回值的 12 def yue(): 13 print('打开手机') 14 print('打开陌陌') 15 print('搜索心仪的对象') 16 print('出去玩吧') 17 print('出发') 18 return(10086) 19 ret=yue() 20 print(ret) #10086 21 22 #有返回值的 23 def yue(): 24 print('打开手机') 25 print('打开陌陌') 26 return #可以终止函数的运行 None 27 print('搜索心仪的对象') #之后的语句不再运行 28 print('出去玩吧') 29 print('出发') 30 ret=yue() 31 print(ret) 32 33 # 小练习 34 def jisuan(): 35 content1=int(input('请输入数字:')) 36 content2=int(input('请输入数字:')) 37 return(content1+content2) 38 print(jisuan())
3. 参数
函数执行的时候给函数传递信息.
*形参: 函数声明时位置的变量
*实参: 函数调用时给的具体的值
传参: 把实参传递给形参的过程
1 def yu(tools): #形参 2 .... 3 yu('cars') #实参
实参形式:
1) 位置参数, 按照形参的参数位置,给形参传值
2) 关键字参数, 按照形参的名字给形参传值
3) 混合参数, 即有位置参数又有关键字参数, 且关键字参数在后
1 def chi(good_food,no_good_food,dreak,ice_cream): #形参位置参数 2 print(good_food,no_good_food,dreak,ice_cream) 3 4 chi('蜗牛','辣条','果汁','哈根达斯') #位置参数 5 chi(dreak='神仙水',ice_cream='老冰棍',good_food='盖浇饭',no_good_food='锅包肉') #关键字参数 6 chi('盖浇饭','汉堡',ice_cream='巧乐兹',dreak='营养快线') #混合参数 必须(先位置后关键字)
形参形式:
1) 位置参数
2) 默认值参数, 先位置后默认值
3) 动态参数
1 def regist(name,phone,gender='男'): #形参默认值参数 默认值参数必须在参数列表的后面 2 print(name,phone,gender) 3 4 regist('阿凡达','10086') 5 regist('阿凡提','10010') 6 regist('阿凡','10011') #不赋值则为男 7 regist('女神','10088','女') #可以重新赋值为女
默认值参数中要注意:
1 def extendList(val,list=[]): #默认值 是可变的时候,多次调用,它的内存地址是一样的 2 list.append(val) 3 return list 4 list1 = extendList(10) 5 list2 = extendList(123,[]) 6 list3 = extendList('a') 7 8 print('list1=%s'%list1) 9 print('list2=%s'%list2) 10 print('list3=%s'%list3)
结果为:[10,'a'] [123] [10,'a']
函数的动态参数: 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 形参动态传参顺序:
位置参数 >> *args >> 默认值 >> **kwargs
以上参数可以任意搭配使用
其中:默认值参数要改变默认值得话,需要用关键词来改变 def func(*args, **kwargs): pass
形参的位置*,**: 聚合 实参的位置*,**: 打散
声明时: 聚合
1) *args 位置参数的动态传参 (可以同时接收多个位置参数,) 声明时位于位置参数变量后.
1 def chi(*food): #参数名是food *表示动态传参 2 print(food) 3 chi('盖浇饭','火锅','锅包肉') #以元组的形式输出 4 #('盖浇饭', '火锅', '锅包肉') 5 6 def chi(name,*food): #参数名是food *表示动态传参 7 print(name+'要吃',food) 8 chi('陈','盖浇饭','火锅','锅包肉') 9 # 陈要吃 ('盖浇饭', '火锅', '锅包肉') 10 11 #要将位置参数放在前面, 最好不要放后面(如下),需要用关键词参数传参 12 def chi(*food,name): #参数名是food *表示动态传参 13 print(name+'要吃',food) 14 chi('盖浇饭','火锅','锅包肉',name='陈') #返回的是元组 15 #陈要吃 ('盖浇饭', '火锅', '锅包肉')
2) **kwargs 关键词参数的动态传参(可以同时接收多个关键词参数), 声明时位于默认值参数变量后.
1 def chi(**food): 2 print(food) 3 chi(good='狗不理',nogood='馒头',drink='大白梨',) #返回的是字典 4 # 输出:{'good': '狗不理', 'nogood': '馒头', 'drink': '大白梨'}
1 # 可接收所有参数 2 def func(*args, **kwargs):# 无敌 *args相当于一个聚合的作用 3 print(args, kwargs) 4 func(1,2,3,4,5,a=6,b=7,c=9)
调用时: 打散
1) list, str, tuple, set 用 * 来打散 传参后为tuple类型
1 def func(*food): # 形参:聚合, 位置参数 2 print(food) 3 lst = ["鸡蛋","煎饼果子","猪蹄","滋滋冒油"] 4 func(*lst) # 打散. 把list, tuple, set, str 进行迭代打散
2) dict, 用 ** 来打散 传参后为dict类型
1 def func(**kwargs): 2 print(kwargs) 3 dic = {"name":'alex', 'age':'18'} 4 func(**dic) # 打散成关键字参数
4. 函数的注释
func.__doc__ 查看注释
1 def func(a, b): 2 """ 3 这个函数是用来计算a和b的和 4 :param a: 第一个数据 5 :param b: 第二个数据 6 :return: 返回的是两个数的和 7 """ 8 return a + b 9 10 print(func.__doc__) # 查看注释文档,ocument文档