python3函数
2022-02-20 21:57:10 1 举报
AI智能生成
登录查看完整内容
python3函数
作者其他创作
大纲/内容
内层函数对外层函数(非全局)的变量的引用. 叫闭包
闭包定义
闭包的作用就是让⼀个变量能够常驻内存. 供后面的程序使用def outer(): name = \"alex\" # 内部函数 def inner(): print(name) #闭包 return innerfunc = outer() font color=\"#99ff99\
闭包作用
func.__closure__检测函数是否是闭包
__closure__
函数闭包
子主题
装饰器
迭代器指的是迭代取值的工具
什么是迭代器
__iter__()和__next__()
关键字
迭代对象:内部包含__iter__()函数
Iterable
迭代器:内部包含__iter__() 同时包含__next__()
Iterator
font color=\"#55beed\
isinstence():用来查看⼀个对象是什么类型
可迭代对象
节省内存
惰性机制
迭代器特点
模拟for循环
迭代器
⽣成器实质就是迭代器
什么是生成器
yield
函数有yield. 那么这个函数就是⼀个⽣成器函数,通过__next__()方法执行生成器函数。
调用__next__()方法时,遇到yield,则函数的一段执行结束,返回yield后面表达式。
最后⼀个yield执⾏完毕. 再次调用__next__()方法程序报错:StopIteration。
__next__()方法
函数有yield. 那么这个函数就是⼀个⽣成器函数,通过send()方法执行生成器函数。
调用send()方法时,先将send()中的参数传递给yield,向下执行遇到yield,则函数的一段执行结束,返回yield后面表达式。
在第⼀次执⾏⽣成器代码的时候不能使⽤send(),需使用__next__()方法。
send()不能给最后⼀个yield传值。
send()方法
send()和next()都是让⽣成器向下走⼀次。
第一次执行⽣成器代码的时,可使用__next__()方法,不能使用send()。
两个方法比较
yield是分段来执⾏⼀个函数
直接停⽌执⾏函数
return
def eat(): print(\"我吃什么啊:\") a = yield \"馒头\" print(\"a=\
通过⽣成器函数获取
语法:(结果 for 变量 in 可迭代对象 if 条件 )
语法
# 生成器的惰性机制:深坑 ==> 生成器要值得时候才拿值.def func(): print(111) yield 222g = func() #⽣成器gg1 = (i for i in g) #⽣成器g1. 但是g1的数据来源于gg2 = (i for i in g1) #⽣成器g2. 来源g1print(list(g)) #获取g中的数据. 这时func()才会被执⾏. 打印111.获取到222. g完毕. # 111 [222]print(list(g1)) #获取g1中的数据. g1的数据来源是g. 但是g已经取完了. g1 也就没有数据print(list(g2)) # 和g1同理
⽣成器的惰性机制
语法:[ 结果 for 变量 in 可迭代对象 if 条件 ]
列表推导式
字典推导式
集合推导式
1. 列表推导式比较耗内存. ⼀次性加载. ⽣成器表达式⼏乎不占⽤内存. 使⽤的时候才分配和使⽤内存。
2. 得到的值不⼀样. 列表推导式得到的是⼀个列表. ⽣成器表达式获取的是⼀个⽣成器。
⽣成器推导式和列表推导式区别
通过推导式来实现⽣成器
通过数据的转换也可以获取⽣成器
获取⽣成器
生成器
函数三大器
lamda匿名函数
sorted()
filter()
map()
递归函数
内置函数
常见问题
def 函数名(): 函数体
函数是对代码块和功能的封装和定义。
函数定义
def
函数名的命名规则和使⽤和变量基本⼀样。
函数名
声明函数时声明的多个参数,默认情况下,参数值和参数名称是按函数声明时的顺序匹配起来的。
参数列表
函数体是函数被执⾏之后要执⾏的代码。以冒号起始,并且缩进。第一行语句一般为注释,描述函数功能。
函数体
函数调用
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return返回 None。
返回值
形参:写在函数声明的位置的变量. 形式上的⼀个完整. 表⽰这个函数需要xxx。
形参
实参
传参:给函数传递信息的时候将实际参数交给形式参数的过程。
传参
关于函数参数
位置参数:在传参过程中,系统会默认按照位置把实参赋值到形参,实参中按位置传递的参数就是位置参数。
位置参数
优点1:清晰地指出了参数值,提高程序的可读性
优点2:关键字参数不用考虑顺序,对于包含大量参数的函数很有帮助
关键字参数:实参中以 param = value 的方式传递的参数
关键字参数
注意:位置参数必须在关键字参数前⾯
def yue(font color=\"#99ff99\
yue(age=\"18\
SyntaxError: positional argument follows keyword argument
混合参数:实参中位置参数和关键字参数混合的参数
混合参数
在实参⾓度看
位置参数:声明函数时按位置声明的参数。(在传参过程中,系统会默认按照位置把实参赋值到形参)
def stu_info(font color=\"#99ff99\
stu_info(\"微信\
默认值参数
形参中用*args来表示动态接收位置参数
位置参数 > 默认值参数 > *args :默认值不生效,默认值参数只有当实参等于默认值的时候默认值参数才生效,发挥不了默认效果。
位置参数 > *args > 默认值参数:默认值生效,想要改默认参数值就通过关键字传参,不想改就用默认值。
def chi(font color=\"#99ff99\
chi(\"⾹蕉\
当声明多个参数时,必须要有:位置参数 > *args > 默认值参数
动态接收位置参数
形参中用**kwargs来表示动态接收关键字参数
位置参数 > *args > 默认值参数 > **kwargs:最终顺序
def chi(afont color=\"#ffffff\
#⾹蕉 菠萝 font color=\"#ff99cc\
当声明多个参数时,必须要有:位置参数 > *args > 默认值参数 > **kwargs
动态接收关键字参数
func(*list)或func(*str):把列表或字符串等可迭代对象按顺序打散传参。
def font color=\"#ffff99\
func(**dict):把字典按顺序打散传参。
动态参数的另⼀种传参方式
动态传参
在形参⾓度看
函数参数
全局命名空间
在函数中声明的变量会放在局部命名空间
局部命名空间
内置命名空间
命名空间分类
内置命名空间 >> 全局命名空间 >>局部命名空间(函数被执⾏的时候)
命名空间加载顺序
局部命名空间 >> 全局命名空间 >> 内置命名空间
命名空间取值顺序
全局命名空间 + 内置命名空间
全局作⽤域
局部作⽤域
作用域
globals()函数来查看全局作⽤域中的内容
locals()函数来查看局部作⽤域中的变量和函数信息
globals()和locals()
命名空间
遇到了()就是函数的调⽤,如果没有()就不是函数的调⽤
嵌套函数的调用
依次往下执行,遇到函数调用,执行调用函数
函数的执⾏顺序
函数的嵌套
global:表示不再使⽤局部作⽤域中的内容了. ⽽改⽤全局作⽤域中的变量
global
font color=\"#ffff99\
nonlocal
关键字global和nonlocal
return [表达式]
如果 return 什么都不写或者⼲脆不写return ,那么返回的就是None。
如果 return 后⾯写了⼀个值,则调⽤者可以接收⼀个结果。
return作用
函数的返回
# 1. 函数名的内存地址def func(): print(\"呵呵\")print(func) #<function func at 0x00000000004D1EA0>
函数名的内存地址
# 2. 函数名可以赋值给其他变量def func(): print(\"呵呵\")a = func # 把函数名当成⼀个变量赋值给另⼀个变量a() #呵呵 (函数调用 func())
赋值给其他变量
# 3. 函数名可以类的当做容器元素def func1(): print(\"呵呵\")def func2(): print(\"呵呵\")def func3(): print(\"呵呵\")def func4(): print(\"呵呵\")font color=\"#ffff99\
当做容器类的元素
# 4. 函数名可以当做函数的参数def func11(): print(\"吃了么\")def func22(func): print(\"我是func22\") func() # 执⾏传递过来的 func print(\"我是func22\")func22(func11) # 把函数 func11当成参数传递给 func22 的参数 func#我是func22 吃了么 我是func22
当做函数的参数
# 5. 函数名可以作为函数的返回值def func_1(): print(\"这⾥是函数 1\") def func_2(): print(\"这⾥是函数 2\") print(\"这⾥是函数 1\") font color=\"#ffff99\
当做函数的返回值
函数名使用
python3函数
0 条评论
回复 删除
下一页