#1、一个py文件有几种用途?
#有两种用途:一种是被当程序运行,2、被当做模块导入
#区别:
#执行py文件与导入文件的区别是什么?
#foo模块没有被引用的时候被回收
#2、from...import...
#优点:肯定不会与当前名称空间中的名字冲突,指名道姓的要名字
#缺点:必需加前缀“模块.”加前缀显得麻烦
#from...import...导入也发生了三件事
#1、产生一个模块名称空间
#2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间
#3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址
# from foo import x
# from foo import get
# from foo import change
# get()
# change()
#
# print(x)
#from...import
#优点:可以不用加前缀,代码更精简
#缺点:容易与当前名称空间混淆
#from foo import x #x=模块foo中值1的内存地址
#x = 111
#3、循环导入问题
#1、当foo.py被运行时,__name__的值为“__main__"
#当foo.py被当做模块导入时,__name__的值为”foo"
# if __name__ == "__main__":
# print("文件被执行")
# getattr()
# change()
# else:
# #被当做模块导入时运行
#一行导入多个名字(不推荐)
#from foo import x,get,change
#导入模块中的所有名字(一般不用)
#from foo import *
# print(x)
# print(get)
# print(change)
#了解:__all__=["x","get","change"]控制*代表的名字有哪些
# from foo import *
# print(x)
#起别名
# from foo import get as g
# print(g)
#循环导入
# import foo
# foo.say()
#
# import time
# time.sleep(10)
#
# import foo
# foo.say()
#了解:sys.modules查看已经加载到内存中的模块
# import sys
# import foo #foo=模块的内存空间地址
#
#
# print("foo" in sys.modules)
# print(sys.modules)
#import sys
#打foo.py就把foo.py的文件夹添加到环境变量中
#sys.path.append(r"D:\py_exercise\day19")
#import foo
#foo.say()
"""
补充函数的知识点:
类型提示type hinting(最低python3.5以上才支持)
"""
# str int ("play","music")
#def register(name:str,age:int,hobbies:tuple)->int:
#def register(name: str = "Anna", age: int = 18, hobbies: tuple(1, 2)) -> int:
"""
def register(name:必须传入名字,age:111,hobbies:必须传入爱好元组)
"""
# print(name)
# print(age)
# print(hobbies)
# return 111
# register("Anna",20,("music","play"))
# res = register()
#print(register.__annotations__)
"""
什么是包?
1、包就是一个包含有__init__.py文件的文件夹
2、包的本质是模块的一种形式,包是用来被当做模块导入
"""
#1、产生一个名称空间
#2、运行py文件,将运行过程中产生的名字都丢到1的名称空间中
#3、在当前执行文件的名称空间中拿到一个名字user,user指向1的名称空间
# import user
# print(user.x)
# user.say()
#模块的使用者:egon老师
#环境变量是以执行文件为准的,所有的被导入的模块或者说 后续的其他文件
#的sys.path都是参照执行文件的sys.path
#import sys
# sys.path.append("绝对路径地址")
# print(sys.path)
# import foo
# foo.f1()
# foo.f2()
# foo.f3()
from foo import f1,f2,f3
f1()
f2()
f3()
"""
强调
1、关于包相关的导入语名也分为import和from...import...无论是哪种,
凡是在导入时带点的,点左侧的必需都是包
例如:
from a.b.c.d.e.f import xxx
import (a.b.c.d.e.f) 都是包
"""
from foo import f4
"""
软件开发的目录规范
大项目,一个总文件夹
第一个子文件夹bin,调核心代码文件
第二个子文件夹cont配置文件
第三个子文件夹db放数据库相关文件
第四个子文件夹lib模块文件,包
第五个子文件夹core核心代码逻辑
requirements.txt存放软件依赖的外部python包列表
readme 解释说明,软件,代码,官方文档,参考资料
"""
#绝对导入,以包的文件夹作为起始来进行导入#import sys#print("这是在被导入的__init__.py中查到的sys.path")from foo.m1 import f2from foo.m2 import f3from foo.foo import f1from foo.bbb.m4 import f4#import foo.bbb.m4.f4 语法错误#相对导入:仅限于包内使用,不能跨出包(包内模块之间的导入,推荐使用相对导入)#.:代表当前文件夹#..:代表上一层文件夹from .foo import f1from .m1 import f2from .m2 import f3#from .bbb.m4.import f4#强调:相对导入不能跨出所,所以相对导入仅限于包内模块彼此这间闹着玩#而绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式
来源:https://www.cnblogs.com/acnjanna2019/p/12585585.html