Python之偏函数,变量的作用域,回调、返回、递归函数与闭包,os模块。
偏函数
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)
功能:切换到指定的目录
- python 函数的参数、(匿名、zip、偏、回调、返回、递归)函数、修饰器、变量的作用域的操作说明
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
- Python模块中的变量和函数的作用域
- python入门到秃顶(7):函数作用域和匿名函数,闭包递归回调
- python 中模块(model)概念的引入 以及 函数变量的作用域
- Python之包、模块、函数与变量作用域(四)
- Python(五) 包、模块、函数与变量作用域
- Python os模块中的isfile()和isdir()函数均返回false问题解决方法
- python[变量作用域-函数-闭包-装饰器-生成器]
- Python os 模块中一些重要函数和变量
- Python学习(21):Python函数(5):变量作用域与闭包
- Python os模块中的isfile()和isdir()函数均返回false问题解决方法
- python入门与进阶篇(四)之包、模块、函数与变量作用域
- Python函数参数传递以及变量作用域
- python里使用vars()返回当前局部作用域的所有成员函数和成员变量
- Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
- Python os模块常用函数详解
- Python 返回函数 闭包
- Python函数作用域和闭包
- Python——作用域、Global、nonlocal、闭包、变量名解析原则、之字形打印矩阵元素