Python基础语法(十二)模块、包

模块分类

1.系统模块
例如 os sys time
2.第三方模块
例如 pygame
3.自定义模块
例如 sendmsg

简单理解,模块就相当于"文件名.py"

模块的导入

main.py

#第一种导入方式
import sendmsg
import recvmsg

sendmsg.test1()
sendmsg.test2()
recvmsg.test1()

#第二种导入方式
#from sendmsg import test1,test2
#from sendmsg import test2

#第三种导入方式
#from sendmsg import *
#from recvmsg import *
#第二种、第三种导入方式的调用
#test1() #第三种导入方式相同的方法,最后一个导入的会覆盖前一个
#test2()

sendmsg.py

def test1():
    print("-----test1----")

def test2():
    print("-----test2----")

if __name__ == "__main__":
    test1()
    test2()

recvmsg.py

def test1():
    print("----recvmsg---test1-----")

模块导入会产生缓存recvmsg.cpython-35.pyc文件,这个是python解释后的文件,再次执行可直接取缓存,这个里面有解释后的字节码,因为是c语言解释的,所以是cpython,35表示python版本号为3.5

模块中__all__属性

test.py

__all__ = ["test1",num,"Test"]
def test1():
    print("-----test1----")

def test2():
    print("-----test2----")

num = 100

class Test(object):
    pass

模块外程序导入模块,使用 from test import *时,只能调用all中的函数、全局变量、类,没有包含的不能调用

只有存在__init__.py文件的文件夹才称作包

将sendmsg.py、recvmsg.py文件放入Test文件夹下,在Test文件夹同级调用该Test包

包(文件夹)在python2中不能直接导入,需要添加__init__.py空文件才能导入,导入后不能直接使用,python3能导入,但不能直接用

sendmsg.py

def test2():
    print("-----test2----")

recvmsg.py

def test1():
    print("----recvmsg---test1-----")

python2调用包内容:在__init__.py文件中

__all__ = ["sendmsg"] #此句只影响from Test import *的导入方式

import sendmsg #此句只影响import Test的导入方式

1.写上import sendmsg,在导入包后,可以通过Test.sendmsg.test2()来调用函数
2.写上__all__ = ["sendmsg"],可以通过调用sendmsg.test2()来调用函数

python3不支持import sendmsg的方式,但可以修改__init__.py内容import sendmsgfrom . import sendmsg,python3就可以导入

自定义包

包的导入顺序:
1.当前路径下寻找
2.系统默认路径下寻找

第一步:
创建包,并在包的同级添加setup.py文件

第二步:
在setup.py文件中添加如下代码:

from distutils.core import setup

setup(name="dongGe", version="1.0", description="dongGe's module", author="dongGe", py_modules=['TestMsg.sendmsg', 'TestMsg.recvmsg']) #TestMsg是包,sendmsg是模块
Python基础语法(十二)模块、包_第1张图片
setup的key

第三步:
构建模块
python3 setup.py build

Python基础语法(十二)模块、包_第2张图片
执行后生成

python3 setup.py sdist

执行后生成

最后一步:
安装到系统目录
sudo python3 setup.py install

给模块传参

test.py

import sys #模块中一定要导入sys模块

print(sys.argv) #使用sys.argv参数就可以得到给程序传的参数,类型为字符串列表

name = sys.argv[1] #argv[0]为第一个参数,内容为该文件的文件名,第二个参数为传参的第一个值

print("热烈欢迎 %s的到来"%name)

调用

python test.py 老王

你可能感兴趣的:(Python基础语法(十二)模块、包)