当工程量比较大时,我们可以采取“函数封装”的方法实现函数的重复使用,避免“重复造轮子”。
步骤
手动创建一个包,只需进行以下 2 步操作:
- 新建一个文件夹,文件夹的名称就是新建包的包名;
- 在该文件夹中,创建一个 init.py 文件(前后各有 2 个下划线‘_’),该文件中可以不编写任何代码。当然,也可以编写一些python初始化代码,则当有其它程序文件导入包时,会自动执行该文件中的代码。
实例:创建包my_package:(步骤如下)
-
在工作区下新建文件夹my_package
不限制文件夹的存储路径,但直接在工作区下新建比较方便。 -
在该文件夹中添加一个init.py文件
初始化,该文件中可以什么也不写,但是如果写了后续导入包时会自动运行该文件。
至此,包的创建完成,之后只需添加包或者模块即可。
实例:添加模块module_1
在my_package文件夹中新建文件module_1.py即可。
运行结果:
包的导入
import 包名[.模块名 [as 别名]]
from 包名 import 模块名 [as 别名]
from 包名.模块名 import 成员名 [as 别名]
【注】
- 用 [] 括起来的部分,是可选部分,即可以使用,也可以直接忽略。
- 注意,导入包的同时,会在包目录下生成一个含有 init.cpython-36.pyc 文件的 pycache 文件夹。
- 如果函数名相同,我们又想不改变函数名。可以通过as关键字可以更改模块名和函数名。目的是防止命名相同,产生冲突。
from module import count_letter_number as sum # 这里的sum是将封装好的函数名count_letter_number在调用时临时更改为sum
【注】 函数如果同名,后面的函数会覆盖前面的函数;模块下的函数名与被导入模块中的函数名相同时,则会执行模块下的函数,不会执行模块中的函数。
不导入执行语句,只导入函数
if __name__ == 'main'
把它看成一把闭加锁,使用它就相当于一把锁,把执行语句放在它下面可以阻止其它模块去执行这些内容。要想不被模块调用函数中的执行语句,就把函数名放在它下面,保护起来。
def location(x,y,xm,ym,alpha):
rotation=np.array([[math.cos(alpha),math.sin(alpha)],
[-math.sin(alpha),math.cos(alpha)]])
move=np.array([[x],[y]])
xy_b=np.matmul(rotation,move)
xy=np.array([[xm],[ym]])
xy_A=xy_b+xy
return xy_A
# 比如我们只想导入以上这一部分函数,不需要导入以下的main()函数,那么我们就把main()函数执行的返回值放在if里面.
# main()函数只能在本文件名中执行,不会被其他模块调用.
def main():
axy_location=location(3,5,5,10,pi/8)
print(axy_location)
if __name__ == '__main__':
main()
【注】两个函数不能互相导入,否则会陷入死循环!
参考资料
[1] Python创建包,导入包(入门必读)
[2] python函数 – 14 函数的封装(模块)
文章出处登录后可见!
已经登录?立即刷新