学习日记17
函数的基本使用
使用函数:不需要重复代码,可以重复调用,代码清晰好管理
函数后加''''''可以编写注释 (注意缩进)
定义函数
def foo(x,y) 参数后可以加类型提示(Type hinting)
'''
注释
'''
函数体代码
return 返回值
定义时发送的事
只检测语法不执行代码并把代码存到内存空间中
函数使用(只有函数后面才能加())
foo()
2.定义函数的三种格式
无参函数:不需要外界传值
有参函数:需要外界传值
空函数:先占位使用
3.函数的返回值
三种(没有return,return一个值,return多个值返回小元组)
无论多少次循环,运行到ruturn直接返回
4.调用函数的三种格式
语句形式(单纯运行一条命令)
foo()
表达式形式(加入运算符就是表达式)
res = foo()
参数形式(是另一个函数的参数)
函数参数
形参和实参
形参:函数定义阶段,括号内指定的参数(变量名)
实参:函数调用阶段,括号内传入的值(变量值)
二者的关系:在函数调用时,会将实参值绑定形参名
函数调用完毕后会接触绑定
1.位置形参
在函数定义阶段,按照从左到右的顺序依次定义的参数,称之为位置形参
特点:必须要传值,多一个少一个都不行
2.位置实参
在函数调用阶段,按照从左到右的顺序依次传入的值,称之为位置实参
特点:按照顺序依次为形参赋值
3.关键字实参
在函数定义阶段,按照key=value的格式来传值,称之为关键字实参
特点:可以打乱顺序,但仍能为指定参数赋值
注意:可以混用位置参数和关键字实参,但是位置实参必要跟在关键字实参前面而且不能为用一个形参赋值
4.默认形参
在函数定义阶段,就已经为形参赋值,称之为默认形参
特点:定义阶段就已经有值了,意味着在调用阶段可以不用为其传值(传也可以)
注意:1.可以混用位置形参与关键字形参,但是位置形参必须跟在默认形参的前面
2.默认形参的值推荐指向不可变类型
-
默认形参的值只在函数定义阶段被赋值一次
5.可变长参数:*与**
在形参中带*:会将溢出的位置实参值汇总成元组,然后赋值给紧跟其后的形参名
在形参中带**:会将溢出的位置实参值汇总成字典 ,然后赋值给紧跟其后的形参名
在实参中带*:打散,会把列表中的值赋值给对应的形参名
在实参中带**:会把字典中的值赋值给对应的形参名,如果使用的是 *的话会将key值赋值给对应的形参名
def index(a, b, c):
print(a, b, c)
def wrapper(*args,**kwargs): # args=(1,2,3) kwargs={"x":111,"y":222,"z":333}
index(*args,**kwargs) # index(*(1,2,3),**{"x":111,"y":222,"z":333})
# index(1,2,3,x=111,y=222,z=333)
wrapper(1, 2, 3, x=111, y=222, z=333)
##wrapper(1,c=3,b=2)
传给wrapper的数据一模一样的传给index
关键字参数
排序:
形参---->有默认值的形参---->带*号的形参---->命名关键字形参---->带有**的形参
命名关键字形参如果有值不赋值也行
内置函数
abs():绝对值
all():所有遍历出来的结果为真才为真
any():只要遍历出来的结果一个真就为真
bin():十进制转换
oct():八进制转换
hex():十六进制转换
callable():判断输入的值能否被调用
dir():列表能使用的方法
divmod(10,3): 10 % 3 取余存进元组
pow(10,2,3): 10 ** 2 % 3
enumerate():提取出索引(可以单独解压)
eval():可以把字符串里的代码运行