Python成长记七(包、模块)

1.工程组织结构:包、模块、类
包:文件夹
模块:.py文件
类:函数、变量
特点:一个包下面可以有多个模块,一个模块下可以有多个类
导入包或模块:
     1.import module_name   (引入某个模块下的变量或者函数用点号连接)  
     注意:import只能导入模块,如果命名空间比较长可以用as替换一个别名
     2.from module import a,def (from可以导入具体变量或函数) 或者 from package import module_name(from可以只导入包,然后import导入具体模块,然后具体使用某个变量或函数可用点连接)
     注意: * 可以导入全部(但不介意使用),__all__内置变量可定义*导入的模块、变量或函数,以列表的方式定义,如:__all__ = ['a','b']


 2. __init__.py的用法 (比如:如何一次导入多个模块?)
 作用:(1)标识一个包是否为模块 
       (2)在引入包(或者包中的某个模块)的同时自动执行
       (3)批量导入(作为共用文件只导入一次)

 技巧:如果一行导入过长,除了使用 \ 换行以外,可使用()(即在外部加括号)

 注意:导入包时避免循环导入


3.模块内置变量:
使用dir()查看模块内置变量
如:
    a = 2
b = 3
print(dir())
输出:['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b']


几个重要模块内置变量的认识:

案例:新建一个包(package),在包下面创建一个模块(c2.py),然后在与包同级的目录下创建一个模块(c1.py)(用于调用包内的模块)

c2.py模块下:

'''
  这是一个注释文档
'''
print('name:'+__name__) #作用:返回完整命名空间的模块名称
print ('package:'+__package__) #作用:引用的包
print ('doc:'+__doc__) #作用:返回当前模块注释文档信息,用于书写注释文档(文档自动生成工具)等
print ('file:'+__file__) #作用:返回当前系统的物理路径

c1.py模块下:
import package.c2
运行c1.py后打印结果如下:
name:package.c2
package:package
doc:

  这是一个注释文档

file:C:\Users\MACHENIKE\Desktop\python\demo\package\c2.py

4.入口文件和普通模块内置变量的区别
在c1.py模块中加入如下代码:
'''
  这是c1的文档注释
'''
import package.c2
print('-----------------分隔符--------------------------')
print('name:'+__name__)
print ('package:'+(__package__ or '当前模块不属于任何包')) #python中没三元表达式,可用or代替
print ('doc:'+__doc__)
print ('file:'+__file__)

打印结果为:
name:package.c2
package:package
doc:
  这是c2的注释文档

file:C:\Users\MACHENIKE\Desktop\python\demo\package\c2.py
-----------------分隔符--------------------------
name:__main__
package:当前模块不属于任何包
doc:
  这是c1的文档注释

file:C:/Users/MACHENIKE/Desktop/python/demo/c1.py #与我们执行文件的路径有关

总结:以上分割线上部分结果和下部分结果的内置变量的差异就是入口文件和普通模块内置变量的区别

5.__name__的经典应用
(1)熟悉dir()函数的应用
比如:传入系统模块(sys)
import sys
print(dir(sys)) #将打印出sys模块中所有变量
结果:['__displayhook__', '__doc__', ....]


(2)__name__内置变量
作用:使得脚本既可以作为普通的可导入模块也可以作为可执行文件
if __name__ == '__main__':
    pass
测试案例:
if __name__ == '__main__':
    print('This is app')

print('This is a module')

如果执行当前文件输出:
This is app
This is a module

如果是外部引入该文件则输出:
This is a module

小知识点:只执行python文件时,比如: python -m c1.py     
注释:-m参数的作用就是把当前可执行文件当模块运行

注意:要执行这个带参数的命令需要返回到与项目同级的目录,把项目的文件夹当成一个包(目的是找到包文件)

6.相对导入和绝对导入
顶级包的决定因素是入口文件与引入包是否在同一级目录
通常我们用的都是绝对导入的形式,有时候我们也可以用相对导入的形式
点的概念:. 表示当前目录 .. 表示上一级目录 ...表示上上级目录 ....等

使用:在引入不超过顶级包的情况下可使用相对路径(如果超过顶级包有两种解决方案:1.使用绝对路径 2.使用python -m 入口文件的上一级文件名.入口文件名(即:把入口文件当作模块的形式))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值