''' module模块和包的介绍 模块的概念:一个。py文件就称之为一个模块 使用模块有什么好处:最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库,第三方模块,应用程序自定义模块 ''' # 文件夹和包的区别:如果是一个包,那么包下面必定会有__init__.py文件 # import day21_1 # *****import会把后面py文件执行一遍,执行完后再把文件名当成变量拿给当前文件去用***** # # print(day21_1.add(4, 5)) # print(day21_1.sub(5, 4)) # from day21_1 import add, sub # 就算是单独引用变量,文件也会全部执行 # from day21_1 import * # 不推荐 # # print(add(4, 4)) # print(sub(4, 4)) # from day21_1 import * # # def add(x, y): # return x + y +100 # print(add(1, 1)) # 结果是102,先导入day21_1模块并引入所有的变量名,接下来的函数同名了,同名变量又指向了此文件的函数,所以运行的是此文件的函数 # def add(x, y): # return x + y + 100 # # from day21_1 import * # print(add(1, 1)) # 结果是2,先定义了add函数,接下来导入day21_1模块并引入所有的变量名,那么此时所导入的模块的add变量覆盖了当前文件的变量,指向了导入模块的add()函数 # import sys # print(sys.path) # import会首先根据当前执行文件的系统路径加入到path中,在系统path中寻找需要导入的文件 # from my_module import cal # 所导入文件在同级目录的另一个目录下面 # print(cal.add(3, 3)) # from my_module import main # main模块调用cal模块,day21模块调用main模块;main模块和cal模块在同一级,所以一开始只需要import cal即可,但当day21模块也调用了main模块时,此时会报错 # 因为在执行day21模块时,系统变量path只有路径s1这个包,并没有路径my_module这个包,所以在导入main模块并执行时,会报错 # 解决方法就是,在main模块导入cal模块时,也加上from # 如果不使用from的方法,那么通过sys模块把文件路劲加入path即可(sys.path得到结果是一个列表,可以进行修改--->sys.path.append(r'路径')--->在pycharm右键点击文件出现copy选择copy path即可得到文件路径) # 上面方法得到的路径是绝对的,如果在其它系统上路径不一样可能就运行不了了;所以可以依靠os模块的功能,sys.path.append(os.path.dirname(os.path.dirname(__file__)),__file__代表的是文件名(pycharm中打印的是绝对路径),os.path.dirname(__file__)代表的是当前文件上一层的路径,在加一层代表往上一层目录 # 在终端执行文件依旧不能执行,因为__file__本质就是文件名,那么需要文件的真正绝对路径,使用os.path.abspath(__file__)就行了,最终代码为:sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # main.test() # 调取多层包下面的模块 # from my_module.web.web1.web2 import cal # print(cal.add(1, 2)) # from my_module.web.web1.web2.cal import add # print(add(1, 3)) # from my_module.web.web1 import web2 # 会报错,唯一不支持的调用方式;这个导入其实是执行web2的__init__.py文件, # print(web2.cal.add(1, 4)) # from my_module.web.web1.web2 import cal # print(__name__) # cal模块为被调用文件,所以cal模块里的print(__name__)打印结果为模块的路径;而当前文件是执行文件,所以print(__name__)打印结果为'__main__' # if __name__=='__main__': # 1.用于被调用文件的测试 2.在执行文件当中,让执行文件不被其它文件调用时还进行执行的操作,可以调用函数等其它可调用的变量,但执行的操作不需要在被调用时执行 # pass
module模块和包的介绍,模块的执行以及name
while True:
print('studying...')