Python模块和包

一、模块部分

1、 import (引入)

导入一次,终身受益,不会重复导入。

语法:import + 模块|包

1)导入任意路径下的模块
自定义模块时,不能使用中文,也不能使用已使用的文件名,会被覆盖

把路径添加到系统环境变量path当中,
执行命令时,系统会自动按照路径找到模块,从而引入
如果找不到当前模块所在的路径,直接报错

将自定义绝对路径添加至sys.path中:

模块内容:

leader = "Lsir"
staff = "Zsir"
def task1():
	taskone="{} asked {} to type a document".format(leader,staff)
	print(taskone)
def task2():
	tasktwo="{} asked {} to implement a functional module".format(leader,staff)
	print(tasktwo)
class MyClass():
	name = "yuemo"

添加环境变量:

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
print(sys.path)
from Ctmmodule import task1
task1()

运行结果:
运行结果

2)模块.变量

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
import Ctmmodule
print(Ctmmodule.leader)

运行结果:
运行结果

3)模块.函数

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
import Ctmmodule
Ctmmodule.task1()

运行结果:
运行结果

4)模块.类

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
import Ctmmodule
print(Ctmmodule.MyClass().name)

运行结果:
运行结果

2、from … import … (… 从…导入…)

1)导入单个

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
from Ctmmodule import leader
print(leader)

运行结果:
运行结果

2)导入多个

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
from Ctmmodule import leader,task1
print(leader)
task1()

运行结果:
运行结果

3)导入所有
“*” 通配符,代表所有

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
from Ctmmodule import *
print(leader)
print(staff)
task1()
task2()
print(MyClass().name)

运行结果:
运行结果

4)as 导入的同时,起别名

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
from Ctmmodule import leader as ad
print(ad)

运行结果:
运行结果

5)__all__可以设置*导入的范围

模块内容:

__all__ = ["leader","staff"]
leader = "Lsir"
staff = "Zsir"
def task1():
	taskone="{} asked {} to type a document".format(leader,staff)
	print(taskone)
def task2():
	tasktwo="{} asked {} to implement a functional module".format(leader,staff)
	print(tasktwo)
class MyClass():
	name = "yuemo"

执行:

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
from Ctmmodule import *
print(leader)
task1()

运行结果:
运行结果

如图,报错task1未定义。

3、魔术属性的使用

返回模块名字的魔术属性 __name__

  • 如果当前文件是直接运行的,返回__main__
  • 如果当前文件是间接导入的,返回当前文件名(模块名)

文件直接被执行的时候返回__main__

  • 当成模块被导入的时候,返回模块名本身;

模块内容:

leader = "Lsir"
staff = "Zsir"
def task1():
	taskone="{} asked {} to type a document".format(leader,staff)
	print(taskone)
def task2():
	tasktwo="{} asked {} to implement a functional module".format(leader,staff)
	print(tasktwo)
class MyClass():
	name = "yuemo"
if __name__ == "__main__":
	a = 1111
	print(a)

从调用文件中获取__name__的值

import sys
sys.path.append("/Users/atsukokoshi/Desktop")
import Ctmmodule
print(Ctmmodule.__name__)

运行结果:
运行结果

从模块中验证__name__的值:
模块内容:

leader = "Lsir"
staff = "Zsir"
def task1():
	taskone="{} asked {} to type a document".format(leader,staff)
	print(taskone)
def task2():
	tasktwo="{} asked {} to implement a functional module".format(leader,staff)
	print(tasktwo)
class MyClass():
	name = "yuemo"
if __name__ == "__main__":
	a = 1111
	print(a)

print(__name__)

运行结果:
运行结果

如果,后续我们在自己的模块中做测试时,需加入判断条件if name == “main”:,目的是调用方不会获取到我们自己的测试内容。

二、包部分

1、文件就是模块,目录(文件夹)就是包
2、__init__.py 是对包进行初始化的脚本文件,导入包的时候系统自动调用init文件,把init文件成员导入
3、可以通过__init__.py间接导入其他模块

1、导入包的使用

__init__内容:

cat = "毛线"
dog = "团团"

def animal():
	print("I have two friends")
	
def func():
	print("My cat {} and my dog {}".format(cat,dog))

执行:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
import importpkg
print(importpkg.cat)

运行结果:
运行结果

非init文件的执行:
方法一:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
import importpkg.Ctmmodule
importpkg.Ctmmodule.task1()

运行结果:
运行结果

方法二:通过初始化__init__文件间接导入Ctmmoudle模块

__init__内容:

from importpkg import Ctmmodule
cat = "毛线"
dog = "团团"

def animal():
	print("I have two friends")

def func():
	print("My cat {} and my dog {}".format(cat,dog))

执行:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
import importpkg
importpkg.Ctmmodule.task1()

运行结果:
运行结果

2、from … import … (从包导入相应成员)

从包当中导入成员属性(init):

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
from importpkg import func
func()

运行结果:
运行结果

从包当中导入模块:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
from importpkg import Ctmmodule
Ctmmodule.task2()

运行结果:
运行结果

引入包下模块的具体成员:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
from importpkg.Ctmmodule import task2
task2()

运行结果:
运行结果

在引入的同时,起别名:

import sys
sys.path.append("/Users/atsukokoshi/Desktop/学习记录/python31/")
from importpkg.Ctmmodule import task1 as t1,task2 as t2
t1()
t2()

运行结果:
运行结果

3、单入口模式

分模块不能单独进行调用,统一由主文件main进行调用
模块之间的互相嵌套导入,使用相对路径实现
单入口文件必须和包在同一层级,包里面可以含有各种包和文件

相对路径导入的落脚点在:模块或其中的具体成员身上

创建以下包路径:
路径包文件

main文件作文主文件,通过相对路径调用各包和模块

1). 代表当前

在test1中:

from . import pkg2_module1 as pg
print(pg.ceshi3000)

从主文件main中通过绝对路径导入test1:

from  单入口模式.get.second.third import test1

执行主文件:
运行结果

成功取到pkg2_module1的值
注:在相对路径文件中无法获取到值,只能从主文件中获取!

2).. 代表上一级

test1文件:

from .. import Ctmmodule as ce
ce.task2()

主文件main执行:

from  单入口模式.get.second.third import test1

运行结果:
运行结果

以此类推:
. 当前路径
… 上一级路径
… 上一级的上一级
… 上一级的上一级的上一级
… (这里的点是无限的)
from … import 模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值