导入包
Python的组织结构:包可以理解为文件夹,模块可以理解为文件夹下面的文件,文件里面写有一些不同的类(一般只有一个类),类下面有函数和变量来说明这个类的特征和功能。
刚刚说了包可以把它当成文件夹,但区别他是一个文件夹还是包,看文件夹底下有没有 init.py 这个文件,这个文件和包的导入有关。
导入包有两种方法,import是其中一种方法,import后面要对应一个包名和模块名,和lua的require很相似。
import导入的包名和模块名后面可以跟如一个 as 变量名 用这个变量名来代替 t.c7 这个命名空间,简化了代码的复杂度
import的第二个用法,from 包名和模块名 inport 变量名,这样也不用把包名和模块名也打印出来,同样起到了简化代码的作用
from inport的用法还可以引用模块名
from inport后面带一个* 号可以导入所有该模块下定义的所有变量,但并不推荐这样使用,第一编译会提示报错,因为这些变量没有识别出来,第二个就是这个代码就变得不易阅读
在C7模块里面定义 _ _ all _ _ * 号的作用就只会导入 有在 _ _ all _ _ 里面定义的变量
在vscode的设置里面,在files.exclude里面添加 **/ _ pycache _ 设置为ture 将会隐藏 _ pycache _ 文件夹
from inport还可以使用逗号来一行引用多个变量
如果这个模块有特别多的变量需要导入,想要换行可以在最后加个反斜杠,但很难看
想换行,可以用括号这样美观很多
_ init _ 的作用
_ init _.py会在导入包的时候先被执行,这里只是导入了 t模块 ,却打印了“This is _ init _.py file”
导入包下面的某个模块的某个变量,一样会调用 _ _ init __.py 文件
在 _ _ init _ _. py 中定义 _ _ all _ _变量,变量里面没有导入C8,所以打印c8的时候会报错
在 _ _ init _ _. py 中导入 sys 这些python内置的一些库的时候,在c12调用中,要加上t的名字
这是导入包常见的几个错误
dir()函数会打印出Python里面内置的变量名,和我们自己定义的变量名
常用的内置变量的作用
__name__会打印出完整的命名空间名字
__packag__会打印出包名
__file__会打印物理路径
__doc__会打印该文件的注释
C15是被Python当成入口文件来处理,所以一些内置变量和普通的模块内容不一样,由上图可以看出区别
如果dir函数给他填入参数,还可以打印出参数的一些内置变量有哪些
__name __的一些经典应用
当c17被当做入口文件执行的时候回打印出This is a module ,当c17被当成普通文件导入的时候,不会执行这句代码。
相对导入和绝对导入
一个点表示同级目录,两个点表示上级目录,三个点表示上上级目录,以此类推