模块与包

所谓模块和包,表现出来的就是python文件在文件夹中的目录结构 模块:一个python文件 包:包含python文件的文件夹 (包中必须含有一个init.py文件) (包中可以嵌套其他包) *(包、模块的名称不能冲突,不能用关键字)

QQ截图20210124225921.png QQ截图20210124225633.png

导入


L- 模块 - 图3

导入模块

L— import

导入模块

  1. import sys
  2. L = sys.path #使用模块导入的方法需要使用成员运算符
  3. #sys.path该属性储存了PYTHONPATH列表
  4. for i in L:
  5. print(i)

L— import… as…

导入模块并重新命名模块

  1. import sys as rename # 将sys重新命名为rename
  2. L = rename.path
  3. for i in L:
  4. print(i)

导入包

L— from… import…

导入包,并从包中导入模块

文件目录


QQ截图20210125015313.png
Amod.py
(hibari包中的模块)
def func():
print(“this is Amod”)
Bmod.py
(hibari包中的模块)
def func():
print(“this is Bmod”)
play.py
(当前操作的文件,或者控制台)


from hibari import Amod
from hibari import Bmod
Amod.func()
Bmod.func()

#====================
#output
this is Amod
this is Bmod

L— from… import *

导入包,并导入所有模块

注意: import*时,只会导入init.py文件中 all属性列表中包含的模块名, 不在all属性中的模块是不会导入的

文件目录


QQ截图20210125015313.png
init.py
(hibari包中的初始模块)


all = [“Amod”, “Bmod”]
Amod.py
(hibari包中的模块)
def func():
print(“this is Amod”)
Bmod.py
(hibari包中的模块)
def func():
print(“this is Bmod”)
play.py
(当前操作的文件,或者控制台)


from hibari import *

Amod.func()
Bmod.func()

#====================
#output
this is Amod
this is Bmod |

导入子包

L— form A.B import…

按照目录结构,用成员运算符“.”隔开即可 QQ截图20210125024334.png

  1. from hibari.inside_page import Amod

模块

模块名属性:name

一个py文件的属性,主要是用来区分模块和主程序的 注意: 0、无论是导入还是作为主程序,整个文件都是会被运行的

1、当*.py文件直接作为程序运行时: (name属性储存的是字符串”main“) name =”main

2、当*.py文件作为模块导入时: (name属性储存的是文件名)

name =”*

  1. __name__”的用途
  2. #=============================
  3. if __name__ =="__main__": #当文件作为主程序时,运行这里
  4. print("该文件是模块,请导入主程序") #相当于C++的 void main()部分
  5. else: #当文件作为模块时,运行这里
  6. print("模块成功导入")
  7. print("模块名为:",__name__)
文件名 文件内容(代码) 直接运行文件输出结果(Ouput)
Amod.py
(hibari包中的模块)
def func():
print(“文件Amod的name属性:”, name)
func()
文件Amod的name属性:mian
play.py
(当前操作的文件,或者控制台)
import Amod

Amod.func() | 文件Amod的name属性:Amod
文件Amod的name属性:Amod | | QQ截图20210125153513.png | | 提示:
在VS中:右键可以直接运行文件
在控制台中:输入命令 运行文件 |


文件位置属性:file

这个属性可以返回,当前模块的文件位置

  1. import pymel.core
  2. pymel.core.__file__

QQ截图20210126000118.png


模块查询:dir( )

这个方法可以查询模块内的所有内容

  1. import sys
  2. L = dir(sys)
  3. for i in L:
  4. print(i)

QQ截图20210126002302.png


作用域

特殊属性:xxx

头尾各有两个下划线的是特殊属性 能直接被引用,但有特殊用途

例如:name 这个属性会根据当前文件是如何运行的产生不同的值

私有属性:__xxx

头部有1到2个下划线的是私有属性(private) 只能被当前文件使用,不应该被直接引用


路径

模块存放的路径

查询路径:sys.path

这个属性储存一下文件路径,python会从这些路径中去寻找包和模块 (一般默认主程序的位置就是其中一个路径)

  1. import sys
  2. for i in sys.path:
  3. print(i)

下面分别是VS2017、Blender、Maya的path
QQ截图20210125222148.png


添加路径:sys.path.append( )

这个方法可以添加搜索路径

注意**:**程序关闭后重启会失效

L- 模块 - 图11

  1. import sys
  2. for i in sys.path:
  3. print(i)
  4. sys.path.append("E:\Hibari\Scripts")
  5. print("\n")
  6. for i in sys.path:
  7. print(i)

QQ截图20210125224305.png


环境变量:PYTHONPATH

*(也可以称为系统变量)

如果希望一次修改,每次都可以调用到这个模块,可以修改环境变量PYTHONPATH *(原理:在打开解释器时,环境变量PYTHONPATH内的路径会被自动添加到sys.path中)

注意: 1、在Python打开后,再修改PYTHONPATH是不起作用的 2、PYTHONPATH只能在Python启动前修改