学习日记17

今日内容

函数的基本使用
1.函数的使用原则:先定义,后调用

使用函数:不需要重复代码,可以重复调用,代码清晰好管理

函数后加''''''可以编写注释    (注意缩进)
定义函数
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.默认形参的值推荐指向不可变类型

  1. 默认形参的值只在函数定义阶段被赋值一次

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():可以把字符串里的代码运行

forzenset():不可变集合

posted @ 2021-06-29 21:35  小白白柏柏  阅读(35)  评论(0)    收藏  举报