python函数-函数初识
python函数-函数初识
1.函数的定义
语法
def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值
2.函数的使用原则---先定义后调用
#定义阶段 def foo(): print('from foo') bar() def bar(): print('from bar') #调用阶段 foo()
3.函数的返回值
3.1返回值的种类
(1)没有返回值,返回None
·只有return:结束一个函数的继续
·没有return
·有return None:不常用
#只有一个return def func(): s = '人生苦短我用python' count = 0 for i in s: count += 1 return res = func() # 函数名加括号进行调用:func() print(res)
# 没有return def func(): s = '人生苦短我用python' count = 0 for i in s: count += 1 res = func() # 函数名加括号进行调用:func() print(res)
# 有return None:不常用 def func(): s = '人生苦短我用python' count = 0 for i in s: count += 1 return None res = func() # 函数名加括号进行调用:func() print(res)
(2)有一个返回值
·可以返回任何数据类型
·只要返回就可以接收到
·如果在一个函数中有多个return,只返回第一个
def func(): s = '人生苦短我用python' count = 0 for i in s: count += 1 return count return #'这是第二个return 不返回' res = func() print(res) >>>12
(3)返回多个值
- 用多个变量接收:有多少返回值就要有多少变量接收
- 用一个变量接收:接收到的是一个元组
def func(): s = '人生苦短我用python' count = 0 for i in s: count += 1 return s, count res = func() # 函数名加括号进行调用:func() print(res) >> > ('人生苦短我用python', 12) res1, res2 = func() print(res1, res2) >>> 人生苦短我用python 12
4.函数的参数
1、参数的概念
1.没有参数:定义函数和调用函数时括号里都不写内容
2.有一个参数:传什么就是什么
3.有多个参数:位置参数
==顺序:位置参数,*args,默认参数,**kwargs==
2.参数的种类
1.形参的角度:
- 位置参数:必须传,且有几个就必须传几个
- * args:接收的是按照位置传参的值,组织成一个元组
- 默认参数:可传可不传,不传就按默认值
- ** kwargs:接收的是按照关键字传参的值,组织成一个字典
# 位置参数 def name_sex(name, sex): print('姓名是:' + name + '\n性别是:' + sex) name_sex('乔','男') >>>姓名是:乔 >>>性别是:男 # 默认参数 def name_sex(name, sex='男'): print('姓名是:' + name + '\n性别是:' + sex) name_sex('乔') >>>姓名是:乔 >>>性别是:男 # *args---元组 def name_sex(*args): print(args) name_sex('乔','男') >>>('乔', '男') # **kwargs---字典 def name_sex(**kwargs): print(kwargs) name_sex(姓名='乔',性别='男') >>> {'姓名': '乔', '性别': '男'}
2.实参的角度
- 按位置传参:
- 按关键字传参:
- 按位置、按关键字混合传参:必须按照位置参数,再按照关键字传参,不能将参数赋予多个值
# 按位置传参 def name_sex(name, sex): print('姓名是:' + name + '\n性别是:' + sex) name_sex('乔', '男') >>>姓名是:乔 >>>性别是:男 # *按关键字传参 def name_sex(name, sex): print('姓名是:' + name + '\n性别是:' + sex) name_sex(sex='男',name='乔') >>>姓名是:乔 >>>性别是:男 # *按位置、按关键字混合传参 必须按照位置参数,再按照关键字传参,不能将参数赋予多个值 def name_sex(name, sex): print('姓名是:' + name + '\n性别是:' + sex) name_sex('乔',sex='男') >>>姓名是:乔 >>>性别是:男
5、动态参数的另一个传参方式
1、站在形参的角度上,给变量加上*,就是组合所有传来的
def func(*args): print(args)
2、站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
unc(1,2,3,4,5) l = [1,2,3,4,5] func(*l)
6、默认参数的陷阱:默认参数是一个可变数据类型
一、 def qqxing(l = []): l.append(1) print(l) qqxing() qqxing([]) qqxing() qqxing() 二、 def qqxing(k,l = {}): l[k] = 'v' print(l) qqxing(1) qqxing(2) qqxing(3)