您的位置:首页 > 编程语言 > Python开发

Python之偏函数,变量的作用域,回调、返回、递归函数与闭包,os模块。

2019-06-14 20:45 591 查看

偏函数

python中的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
将函数的某些值给固定住(也就是设置默认值),给你返回一个新的函数,调用这个新的函数会更简单,这个函数就是偏函数的功能。
格式:

newfunc = functool.partial(func,参数)

变量的作用域:变量起作用的范围。

在python程序中,创建,改变,查找变量名的时候,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域,
简单来说,变量的作用域就是指变量可以使用的范围,
程序中变量并不是在任意的地方都能访问,访问范围取决于它在赋值的位置【定义的位置】

局部作用域:在函数中定义的变量,每当函数被调用的时候它都会产生一个新的作用域,
这个新的作用域我们称之为局部作用域,在局部作用域中定义的变量,我们称之为局部变量
局部变量起作用的范围就是当前所在的这个函数。

嵌套作用域又称函数作用域
在闭包函数外的函数中

全局作用域 L(local):在模块中定义的变量,并且定义在函数体之外的变量,
他们产生的作用域叫做全局作用域,这个变量我们称之为全局变量。
全局变量作用的范围整个.py文件。

注意:在局部作用域中,不能直接更改全局变量的值,若有需要在局部作用域中更改
全局变量,则需要在更改之前对此变量进行声明,使用关键字global进行声明,
声明之后变可更改。

注意:在python中,只有模块,类以及函数【def,lambda】这些才会引入新的作用域,而其他的语句块比如:if/else,while/for,try/except这些语句块不会引入新的作用域
也就是说在这些语句中定义的变量,在外部仍然可以使用。

内置作用域
系统内部定义的变量产生的作用域,叫做内置作用域。
比如预定义在builtin模块内部
起作用的范围,所有的.py文件。

搜索变量的优先级
局部作用域>嵌套作用域>全局作用域>内置作用域,
当这几个作用域中都不存在的时候则报错。

回调函数:

将函数作为参数传递到另外一个函数中,
这个被传递进去,后来又被调用的函数,我们称之为回调函数。
简单来说:回调函数就是把函数当成一个参数传递到函数中.

返回函数:

在python中除了可以接受函数作为参数外,还可以把函数作为结果值返回。
把函数作为返回值返回的时候,我们可以称这个函数为返回函数。

闭包:

在外函数的内部定义了一个内函数,内函数使用了外函数的临时变量,
外函数的返回值是内函数的引用【内函数的函数名】,这时候就构成了一个闭包

一般情况下当函数执行完毕,函数中所有的东西都会被释放掉还给内存,这时候局部变量也会消失,
但是当外函数结束的时候,发现自己还有临时变量在内函数中还会使用,此时外函数会将自己的临时变量绑定内函数,自己再结束。

函数中的变量在函数被调用的时候创建,在函数执行结束的时候被销毁。

装饰器一定是闭包,但是闭包不一定是装饰器。

在函数外访问函数内的东西.闭包也具有提高代码可复用性的作用。闭包有效的减少了函数所需定义的参数数目

递归函数:

在函数的内部,可以调用其他的函数,如果一个函数在内部调用自身本身,这个函数就是递归函数.
使用递归函数的时候,一定要注意栈溢出的情况。
一般情况下不建议使用递归函数。

递归调用:一个函数调用自身,成为递归函数

例1:

需求:计算n! = 1x2x3x4x…x(n-1)xn

使用递归解决问题的思路

方法:

1.写出临界条件

2.找这一次和上一次的关系

3.假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果

关系: n!= (n-1)!xn
def fact(n):
#临界条件
if n==1:
return 1
#返回本次的调用结果
return n*fact(n-1)

例2:
求斐波那契数列:1,1,2,3,5,8,13,21,34,55,89…

需求:报一个数,直接获取这个位置上的数值

#关系 第n个位置上的数值=(n-1)+(n-2)
#临界值 第一个位置和第二个位置的值为1
def func1(n):
if n==1 or n==2:
#临界值
return 1
else:
#返回本次调用的结果
return func1(n-1) + func1(n-2)

递归函数的优点是定义简单,逻辑清晰,理论上所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰.

os模块

绝对路径:

在windows中以盘符开头的或者是\开头的我们统称为绝对路径
在linux或者mac中以"/"开头的称之为绝对路径
相对路径:
在window中以.或者… 或者直接以文件开头,我们称之为相对路径
在linux与mac中与window表示的相对路径是相同的

. 表示当前目录

… 表示上一级目录

os.getcwd()

功能:获取当前文件所在目录绝对路径

os.listdir(path)

功能:获取指定目录下所有文件的文件名,若不指定path则获取当前目录下的。

os.path.abspath(path)

功能:获取path的绝对路径【将path与当前文件所在目录的路径进行拼接处理】

os.path.split(path)

功能:将路径分解为目录与文件的部分,以元组的方式返回。
【实际上使用"/"对路径进行切分,从右往左切,切一次,左边获取到的就是目录部分,右边就是文件部分】

os.path.join(path,paths)

功能:对path进行路径拼接,若在paths中出现绝对路径,则前面的路径不保留,返回的后面的绝对路径。

os.path.dirname(path)

功能:返回path中目录的部分。

os.path.basename(path)

功能:返回path中文件的部分

os.path.getsize(path4)

功能:获取指定路径文件的大小,目录的大小获取不到。

os.path.exists(path)

功能:判断指定的路径是否存在,若存在则返回True,否则返回False

os.path.isdir(path)

功能:判断指定的路径是否为目录,若是则返回True,否则返回False

os.path.isfile(path)

功能:判断指定的路径是否为文件,若是则返回True,否则返回False

os.remove(path)

功能:删除指定的文件

os.mkdir(path)

功能:创建指定的目录

os.rmdir(path)

功能:删除指定的空目录【只能删除一层】

os.removedirs(path)

功能:递归删除多层空目录【不存在文件】

os.makedirs(path)

功能:递归创建多层空目录

os.chdir(path)

功能:切换到指定的目录

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: