Python--7、函数作用域和匿名函数

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源代码', '')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值