编写main.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"Is My Test Model"
__author__ = 'yhgh'
# 引入sys模块
import sys
print('命令行参数为',sys.argv)
print('python路径为',sys.path)
#命令行执行
python .\main.py lucy tom lily
>>>>
#命令行参数为 ['.\\main.py', 'lucy', 'tom', 'lily']
#python路径为 ['E:\\pythonproject\\demo', 'E:\\python\\python36\\python36.zip', 'E:\\python\\python36\\DLLs', 'E:\\python\\python36\\lib', 'E:\\python\\python36', 'E:\\python\\python36\\lib\\site-packages']
import sys
引入 python 标准库中的 sys.py
模块;这是引入某一模块的方法。sys.argv
是一个包含命令行参数的列表,第一个永远为python文件名。sys.path
包含了一个 Python 解释器自动查找所需模块的路径的列表。语法:import [model_name1],[model_name2]
,import [model_name] as 别名
model.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"Is My Test Model"
__author__ = 'yhgh'
def add(num1,num2):
return num1 + num2
def subtract(num1,num2):
return num1 - num2
main.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"Is My Test Model For Import"
__author__ = 'yhgh'
#引入模块
import model
#使用模块中的函数
print(model.add(1,2))
print(model.subtract(1,2))
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表,一般为当前项目路径
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中
语法:from [model_name] import [name1],[name2]
main.js
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"Is My Test Model For Import"
__author__ = 'yhgh'
#引入模块
from model import add,subtract
#使用模块中的函数
print(add(1,2))
print(subtract(1,2))
一个模块直接执行的时候,其主程序将运行,此时__name__
的值为__main__
。如果被作为一个模块引入时,那么此时这个模块的__name__
值为模块名。
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试方法,但是在被引用后,则不希望这些方法再执行,我们就可以通过__name__
去判断。
model.js
if __name__ == '__main__':
print('程序本身运行')
else:
print('我作为一个模块')
main.js
import model
>>>>>
我作为一个模块
如果一个模块文件中有__all__
变量,当使用from xxx import *
导入时,只能导入这个列表中的元素
__all__ = ['test1']
def test1():
print('test1')
def test2():
print('test2')
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用
在Python中,是通过_
前缀来实现的私有的函数和变量,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py
文件,该文件夹可用于包含多个模块文件从逻辑上看,包的本质依然是模块
包的作用:当我们的模块文件越来越多时,包可以帮助我们管理这些模块, 包的作用就是包含多个模块,但包的本质依然是模块
① 新建包my_package
② 新建包内模块:my_module1
和 my_module2
③ 模块内代码如下
在 Pycharm 中,通过 New 下面的 Python Package 新建的包内部会自动创建__init__.py
文件,这个文件控制着包的导入行为
# 导入方式
import 包名.模块名
# 使用包内的函数
包名.模块名.函数
注意:必须在__init__.py
文件中添加__all__ = []
,控制允许导入的模块列表
# 导入方式
from 包名 import *
# 使用包内的函数
模块名.函数