python----项目中模块与包

模块的导入

import 模块名
调用: 模块名.功能名
​
from 模块名 import 功能名
调用: 功能名
​
from 模块名  import  *
import 模块名  as 别名
from 模块名 import 功能名 as 别名
# Python中的模块就是可以将别人写好的,或者自己以前写好的功能直接导入新的文件或工程内,导入后可以直接调用  例如 : random  time os
​
# 我们没有实现模块中的功能,但是我们讲模块导入后就可以使用该功能,类似于继承
​
# 导入模块的方式
'''
import 模块名
调用: 模块名.功能名
​
from 模块名 import 功能名
调用: 功能名
​
from 模块名  import  *
import 模块名  as 别名
from 模块名 import 功能名 as 别名
'''
# # 导入os模块
# import os
#
# # 使用os模块
# print(os.listdir())
​
# # 导入os模块中部分功能
# from os import listdir, mkdir
# # 使用os模块中的功能
# print(listdir())
​
# # 导入os模块中的所有功能
# from os import *
# # *就是通配符,表示导入os模块中所有允许导入的模块
#
# # 使用os模块
# print(listdir())
​
# # 导入os模块,将模块改名为xitong
# import os as xitong
# # 使用os模块
# # NameError: name 'os' is not defined
# # print(os.listdir())
# # 如果给模块起了别名.则原名称不可使用
# print(xitong.listdir())
​
# from os import listdir as ls
# print(ls())
# NameError: name 'listdir' is not defined
# 给功能名称起别名后,无法使用原名称只能使用新的功能名称
# print(listdir())

自定义模块

  • 模块名一定要遵循标识符的命名规则才能被导入

  • 模块中书写的全局变量,函数,类可以盗取其他文件

  • 导入模块时,会将模块中的所有文件执行一遍

  • 为了保证测试代码在导入模块时不被执行,我们的测试代码需要写入

    if __name__ == '__main__:'

# 标识符的命名规则
# 1/以字母数字下划线组成
# 2/不能以数字开头
# 3/不能是关键字
# 4/严格区分大小写
​
age = 18
​
​
def func():
    print('我是module中的函数')
​
​
class Person(object):
    def eat(self):
        print('西瓜真好吃呀')
​
​
​
​
# 在书写模块或者工具类的时候,经常需要调试,每次调试完成后还要将代码删除,否则导包结束后测试代码都会被执行一遍
​
# 所以我们需要想一个办法,将我们写的测试代码在当前模块中执行时,调用,在导入模块时不调用
# __name__就是说明当前文件执行的模块名是什么?
# print(__name__)   # __main__如果在当前文件中执行,模块名就是main
# 如果导入其他模块,则__name__的值就是文件名称module_01
# 所以我们根据__name__的值的判断,就可以断定他是咋当前文件执行,还是导入模块
​
# 使用该判断,让我们的测试代码只有在当前文件中执行的时候才会被调用
if __name__ == '__main__':
    if age > 10:
        print('今晚不能尿床了')

模块查询顺序

  • sys.path可以查询模块调用路径列表,越靠前的路径越优先查询

# 可以使用sys.path查看模块的定位顺序,如果模块名相同,优先从最新的序列查找
​
import sys
print(sys.path)
# sys.path的返回值是一个路径列表,排名越靠前的路径,在调用模块时优先查找,如果这个路径下没有对应模块才去下一个路径中查找.
​
# 在开发中可以在列表中你添加路径(了解)
  • 开发中可以添加调用路径 sys.path.append(路径)

__all__的使用方式

# __all__可以控制模块使用功能from 模块名 import *所导入的功能列表
​
from module_02 import *
​
# NameError: name 'age' is not defined
# 如果__all__控制的类表中没有改功能则不能在文件中使用
# print(age)
# 如果写到__all__中则可以使用
func()
​
​
import module_02
# __all__不能控制import的导入效果
print(module_02.age)
​
from module_02 import age
# 如果针对性导入某个功能,不受__all__影响
print(age)

包的的导入

  • 导入包

    • import 包名.模块名

    • from 包名 import 模块名

    • 如果想要使用功能from 包名 import *

      • 要在__init__.py文件中书写__all__添加指定模块名才能导入

# 包:多个有关联的模块在一起,保存在同一个文件夹内,并且文件内有一个__init__.py为文件,这种文件夹就叫做包
# 创建包的方式: mew >>> package   这中创建方式会自动添加一个__init__.py文件
​
# # 导入包 : import 报名.模块名
# import my_package.module_02
# # 调用 : 包名.模块名.功能名称
# my_package.module_02.func()
​
# 导入包: from 包名 import 模块名
# from my_package import module_01
# # 调用: 模块名.功能名称
# print(module_01.age)
​
# 导入包: from 包名 import *
from my_package import *
# 必须在__init__.py文件中的__all__里添加模块列表,才能使用import* 进行导入
​
print(module_01.age)
module_02.func()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值