【Python】笔记12(偏函数、模块)
偏函数(partial func'),基于functools这一模块,对模块中已有函数的默认参数进行改变,形成新的函数,新形成的函数就是偏函数。
如,int()的默认结构是,int(str,base=10)。这里的base是指所传入返回值的进制,最终返回值以十进制显示。如果改变base的默认数值,如int('12345',base=8)或int('12345',8),base可以省略。
创造偏函数可以免去定义的多步骤,如创建base为2的int类函数int2,int2=functools.partial(int, base=2) functools.partial()的第一个参数是基本函数,第二个参数是对基本函数中默认参数的重新设定。即使改变了默认参数,int2这还保持了int可以改变默认参数的特性。
*args,**kw在创建偏函数时可以被接受称为可变参数和命名关键字参数。
int2(str)相当于,kw={'base':2},int(str,**kw)
基于max2=functools.partial(max,10),max2(5,6,7)相当于args=(10,5,6,7)
max(*args),结果始终为10
模块(Module),为了减少代码量,和每次定义的麻烦,可以将已经成套的代码保存为.py方便以后的再次使用,这个所保存的代码就可以称为模块。相同函数名的定义函数可以存在不同的模块当中,这个可以省去函数名冲突所带来的麻烦,(不过内置函数是尽量要避免产生相同的)
多个模块,也存在模块名冲突的情况,Python通过目录组织模块来避免这样的冲突,目录涵盖下的所有模块,称为包(Package)。
在导入模块的时候,就要一起将包名也输入,如,原来是import abc,加入mycompany顶层目录之后是import mycompany.abc,这个包当中的所有模块以此类推。
另外,每一个包/目录下都会有一个__init__.py文件,这个文件是保证该目录成为特别目录,必须存在的文件,这个文件可以是空的,但它本身是一个模块名为目录名的模块。
目录结构还可以有多级目录,导入时同样以目录名+目录名+模块名的形式导入。
模块命名要避免与Python自带的模块名称冲突,否则这会导致自带模块失效,无法导入。