制作模块

一、制作模块

  在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

  1.1 定义模块

  新建一个python文件,命名为my_module1,并定义testA函数。

# 需求:一个函数 完成任意两个数字的加法运算
def testA (a, b):
    print(a + b)

  1.2 测事模块

  当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,开发人员在文件中添加一些测试信息。

  列如:

# 需求:一个函数 完成任意两个数字的加法运算
def testA (a, b):
    print(a + b)

# 测试信息
testA(1, 1)  # 这种测试信息如果不注释会在调用此模块的文件中运行。

  此时,无论是当前文件,还是其他已经导入该模块的文件,在运行的时候都会自动执行testA函数的调用。

  解决方法:

# 需求:一个函数 完成任意两个数字的加法运算
def testA (a, b):
    print(a + b)

# 测试信息
# testA(1, 1)  # 这种测试信息如果不注释会在调用此模块的文件中运行。

# print(__name__)  # __main__
# __name__ 是系统变量,是模块的标识符,值是:如果是自身模块值是__main__,否则是当前模块的名字。
# __main__等于是当前文件中才被运行,其他调用此模块的文件中不被运行。
if __name__ == '__main__':
    testA(1, 1)

  后续测试信息要if __name__ == '__main__' 中添加。

  1.4 注意事项

  如果使用from .. import .. 或 from .. import *  导入多个模块的时候,且模块内有同名功能。当调用这个同名功能的时候,调用到的是后面导入的模块的功能。

"""
模块2代码
def my_test(a, b):
    print(a + b)
模块3代码
def my_test(a, b):
    print(a - b)
"""
# 导入模块并调用相同名字的功能
from my_module2 import my_test
from my_module3 import my_test

# my_test调用到的是my_module3的功能
my_test(10, 9)

二、模块定位顺序

  当导入一个模块,python解释器对模块位置的搜索顺序是:

  1. 当前目录

  2. 如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录

  3. 如果找不到,python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

  模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

  注意:

    1. 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用。

    2. 使用  from  模块名  import  功能  的时候,如果功能名字重复,调用到的是最后定义或者导入的功能。

三、拓展

  名字重复:

# 问题:import 模块名  是否担心 功能名字重复的问题? -- 不需要,每次调用功能都是:  模块名 . 功能名

import time
print(time)  # <module 'time' (built-in)>

time = 1
print(time)  # 1

# 问题: 为什么变量也能覆盖模块? -- 在python语言中,数据是通过 引用 传递的。大概意思后者覆盖前者

 

posted @ 2022-12-22 01:03  㞢卄BYZ  阅读(92)  评论(0编辑  收藏  举报