函数 function:
函数:可以重复执行的语句块,可以重复调用。
作用:
1.用于封装可重复执行的语句,提高语句的可持续使用性
2.定义 用户级别 的函数(相对于系统级别,即系统已经定义好的函数)
函数定义语句def语句的语法:
def 函数名(参数列表):
语句块
函数的语法说明:
1. 函数的名字就是作为语句块的名称
2.函数名的命名规则与变量名命名规则相同(必须为标识符)
3.****函数名是一个变量(不要轻易对其赋值)****
4.****函数的自己的命名空间,在函数内部可以访问外部变量,但外部的语句不能访问函数内部的变量****
5.函数如果不需要传入参数,则参数列表可以为空,但‘()’必须有
6.语句不分不能为空,如果为空需要填充pass语句
示例1:
>>>def a():
print('hello')
>>>a()
>>>hello
函数调用:
函数名(实际调用传递参数'如果没有则不写')
调用说明:
1.函数调用是一个表达式
2.如果没有return语句,函数执行完毕后返回None对象
3.如果函数需要返回其他的对象,需要用到return语句
带有参数的函数的定义:
def mymax(a,b):
if a > b:
print('最大数是',a)
else:
print('最大数是',b)
mymax(1,2) #调用带有参数的函数,实参给形参赋值,然后函数运行。
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
return语句:(即为函数的结果)
语法:
return [表达式]
注:[]代表其中的内容可以省略
(函数执行过程中,return前边的都是函数运行过程,运行过程会根据需要展示出来,最后会执行return,即为函数结果)
作用:
用于函数中,结束当前函数的执行,返回到调用函数的地方,【【【同时返回一个对象的引用关系】】】
说明:
1.return语句后跟的表达式可以省略,省略后相当于return None
2.如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句)
3.函数调用能够返回一个对象的引用
示例:416test.py
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
python函数的参数传递
传递方式:
位置传参
序列传参
关键字传参
字典关键字传参
① 位置传参:实际调用参数(实参)的对应关系与形式参数(形参)的对应关系是按照位置来依次对应的
示意:
def fx(a,b,c):
pass
fx(1,2,3)
② 序列传参:
序列传参是批在函数调用过程中,用*将序列拆解后按位置进行传递和匹配
示例:
def fx(a,b,c):
…
s1 = [11,22,33]
fx(*s1) #将s1序列拆解后按位置传入fx中
fx(*'abc')= a,b,c fx(*(111,222,333))=111,222,333
即括号里应该填写可迭代对象。
【【【【【正常情况下,print(*'abc')=a,b,c】】】】】
③ 关键字传参:
是指传参时,按着形参的名称给形参赋值
实参和形参按名称进行匹配
示例:
def fx(a,b,c)
pass
fx(b=22,c=33,a=11) 【【【【注:实参和形参按照形参名称进行匹配,可以不按照位置进行匹配】】】】
③ 字典关键字传参:
实参为字典。用**拆解字典后再进行关键字传参
示例:
def fx(a,b,c):
pass
d = {'c':33,'b':22,'a':11}
fx(**d)
说明:字典的键名和形参名必须一致,字典的键名必须为字符串,字典的键名要在形参中存在(名称相同且数量相同)
④ 综合传参:
函数的传参方式在能确定形参能唯一匹配到相应实参的情况下可以任意组合
注:
通常位置传参和序列传参先传递,其次是关键字传参和字典关键字传参
示例:
def fx(a,b,c,d,e,f)
pass
fx(10,*[20,30],e=50,**{'d':40,'f':60})
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数的形参:
函数的缺省参数:
语法:
def 函数名(形参名1=默认参数1,形参名2=默认参数2,...):
语句
示例:
def info(name,age=1,address='不详')
print('我叫',name,'我今年:',age,'岁”,'家庭住址:',address)
info('张飞',30,'中原')
info('tarena',10)
info('赵云')
缺省参数必须从右至左依次存在;
缺省参数可以有0个,1个,多个,全部,但必须从最右开始依次;
缺省参数的绑定对象存在于函数内,同函数生命周期一致。
示例: def fn(a,lst=[]):
lst.append(a)
print(lst)
L=[1,2,3,4]
fn(5,L)
fn(1.1)
fn(2.2)
>>>[1,2,3,4,5]
>>>[1,2,3,4,5,6]
>>>[1.1]
>>>[1.1,2.2]
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数的形参定义方式:
1.位置形参
2.星号元组形参
3.命名关键字形参
4.双星号字典形参
位置形参:
def 函数名(形参名1,形参名2,.....)
语句块
星号元组形参:
def:函数名(*元组形参名):
语句块
作用:收集多余的位置传参,即不需要一一对应)
def fun(*args):
......
args 返回结果为元组。
命名关键字形参:
语法:
def 函数名(*,命名关键字形参)
语句块
或 def 函数名(*args,命名关键字形参)
语句块
作用:所有命名关键字形参都强制调用者采用关键字传参或字典关键字传参的方式调用。
示例:def fun(a,*,k): ...... ‘*’的意义和*args一样,*不可少,args只是习惯写法。
print('a=',a)
print('a=',k)
fun(100,200) .......错误,星号右边必须是关键字传参
fun(100,k=200) 正确,k强制的使用了关键字传参
fun(10,**{'k':20}) 正确,字典关键字参数
示例:
def fun(b,*args,c,d):
print('b=',b)
print('c=',c)
print('args=',args)
pring('d=',d)
fun(1,2,3,4) ......错误,此时args是2,3,4的打包形式,args右边未给出值。
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
双星号字典传参:
语法:
def 函数名(**字典形参名)
语句块
作用:收集多余的关键字传参
注:字典形参名通常叫 kwards(keywords arguments)
函数参数说明:
位置形参,缺省参数,星号元组形参,命名关键字形参,双星号字典形参 可以混合使用
函数自左至右的顺序为:
1.位置形参
2.星号元组形参
3.命名关键字形参
4.双星号字典形参
示例:
def fx(a,b,*args,c,**kwards) :
pass
fn(1,2,3,4,*'ab',**{'d':'D'},c=100)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
**{},代表拆分字典为关键字传参
*(),代表拆分元组为位置传参
**kwards作为形参,调用函数传参应写成**{。。。}或者a=1,b=2,c=3类型的关键字传参
*args作为形参,调用函数传参应写成*{。。。)或者1,2,3类型的位置传参