module模块和包的介绍,模块的执行以及name

'''
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
while True: print('studying...')
原文地址:https://www.cnblogs.com/xuewei95/p/14502972.html