Python–7、函数作用域和匿名函数
匿名函数
lambda 参数:表达式
def f(x):
if x>=2:
return x
a=filter(f,[1,2,3])
b=filter(lambda x:x>2,[2,6,3,1,5,8,7,8])
print(list(a),list(b))
函数作用域
1、外部不能访问内部的变量
2、函数内部能够访问函数外部变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FIUwJLG-1578213163180)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230205654348.png)]
3、函数里面不能修改函数外部变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCgpgT6h-1578213163181)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230205738882.png)]
4、函数里面和函数外部变量名相同使,内外部的变量是不同的,内部新建了一个变量,不会对外部的变量造成影响。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohwCxQ7W-1578213163181)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230212833850.png)]
5、在内函数里面改变全局变量的值,可以使用global 函数。在内函数中的内涵数要使其在整个外部的函数体里面使用,则要使用nonlocal函数(对函数里面的全局变量的定义)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cL4l2E0d-1578213163181)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230213149202.png)]
下图中,num为函数内部的局部变量,global不能改变其值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9zlADRH-1578213163181)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230212655491.png)]
下面图片函数中,nonlocal的作用域为outer整个函数,即嵌套函数可修改外函数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AiZ2bFgJ-1578213163181)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230212435325.png)]
闭包
嵌套函数的调用:
对于函数里面的嵌套函数,调用需要在函数内部调用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-erUfbSvY-1578213163182)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230214957093.png)]
闭包:
定义的外函数返回一个内函数的函数体(函数名,不加括号,加了括号就变成调用了)。
闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包。闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁
如下图详解,先调用外部函数,会返回一个函数体,之后在调用内涵数即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TbEDlRjX-1578213163182)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230221252133.png)]
递归和回调函数
递归函数就是函数自己用自己,但是使用时类似于条件循环一样,要有递归的终止条件。
递归的三要素:
明确递归终止的条件;
给出递归终止时的处理办法;
提取重复的逻辑,缩小问题规模。
以下是递归案例阶乘的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCILP65C-1578213163182)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230223014742.png)]
回调函数:
下面图中,函数体在一号里面调用的情况就叫做回调函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xN51ONx-1578213163182)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191230224111188.png)]
os库(Python总结)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PtQrGfgS-1578213163183)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200101132842266.png)]
1、os.getcwd() 返回当前工作目录里
>>> import os
>>> import os.path
>>> os.getcwd()
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python38'
2、os.chdir(path) 改变工作目录
>>> os.chdir('D:\\Python源代码')
>>> os.getcwd()
'D:\\Python源代码'
3、os.listdir() 返回一个列表,里面是当前文件夹的所有目录。
>>> os.listdir()
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python38.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']
3、os.path.splitext(“文件路径”) 分库文件名和扩展名;默认返回(fname,fextension)元组,可做分片操作。
>>> os.path.splitext('D:\\Python源代码')
('D:\\Python源代码', '')
itext(“文件路径”) 分库文件名和扩展名;默认返回(fname,fextension)元组,可做分片操作。
>>> os.path.splitext('D:\\Python源代码')
('D:\\Python源代码', '')