Python包和模块

模块:

在介绍python包之前,先来了解下模块,一个.py文件就是一个模块(与node.js模块概念类似,一个.js文件就是一个模块),模块里边可定义变量、函数和类。

导入模块(module)

在python中模块分为自定义模块、内置模块、第三方模块,这篇文章我们着重聊下模块的引入。

在python中引入模块有两种方式:

1、import module1,module2,module3 ··· ···

   package 文件夹
   |    |
   |    |
   |    |
   |    | ——————>m2.py ----> variable_name = 'm2'
   |    | ——————>m3.py ----> variable_name = 'm3'
   |
   |
   m1.py 
   # 引入模块
   improt package.m2,package.m3
   print(package.m2.variable_name) # 'm2'
   print(package.m3.variable_name) # 'm3' 

上边代码,package文件夹与m1.py文件同级,package文件夹下有m2.py和m3.py文件,m2和m3文件中分别有一个变量,m1通过improt关键字引入m2和m3模块 。

有几个注意的地方:

1、使用import导入模块,如果不是同级模块,则需要写上  文件夹名 . 模块名

2、使用模块中的变量时,写法:文件夹名 . variable_name

3、如果模块嵌套很深,可以使用as作为路径的别名, alias . variable_name

import package1.package2.package3.m4 as m

# 使用m4中的变量
m.variable_name

 

2、from module import 变量名 或 函数  ----->从xxx模块引入xxx变量或xxx函数

from package.m4 import variable_name

#使用模块变量时,直接打印即可,无需写路径
 print(variable_name)

  (1)可以使用星号导入所有的变量

form module.m4 import *
#使用模块中的变量
print(variable_name1,variable_name2, ··· ···)

   (2)也可以使用模块中的内置变量_ _all_ _来控制 * (也就是控制 * ,导入指定的变量)

# m4 模块
__all__ = ['a','b']
a = 1
b = 2
c = 3

form module.m4 import *
#使用模块中的变量
print(a) # 1
print(b) # 2
print(c) # 报错 c is not define

   ( 3 ) 多个变量的导入,可以使用括号

form module import (a,b,c,d,e ··· ···)
#使用模块中的变量
print(a,b,c,d ··· ···)

  (4)也可以直接引入包

form package_name import m1
#使用模块中的变量
print(m1.variable_name)

在python中,就是一个文件夹包里边模块.py文件),模块里边有类,里边含有函数与变量。。。

当我们创建一个python包的时候,包里边必须含有一个_ _ init_ _.py文件,否则创建的文件夹与普通文件夹没区别;在每次执行引入的模块的时候,总会先执行_ _ init_ _.py文件,所以在实际开发中通常会把__ init__.py文件当做模块的初始化来用。。。

在这说下,__init__.py这个模块的名字就是包的名字(下边__init__.py模块的名字是package)

   package 文件夹
   |    |
   |    |
   |    | ——————>__init__.py --> print('lxc')
   |    | ——————>m2.py --> variable_name = 'm2'
   |    | ——————>m3.py --> variable_name = 'm3'
   |
   |
   m1.py 
   # 引入模块
   form package.m2 import variable_name 
   print(variable_name) 

   # 打印顺序是:
   # 'lxc'
   # 'm2'

上边代码,我们在文件m1中引入的package下的m2模块,结果打印顺序:先打印 ‘ lxc ’ 后打印 ‘m2’,证明在执行引入的模块的时候,总会先执行__ init __ .py文件。

 

__init__.py文件作用:

        一、上边我们说可以用python中内置变量__all__开控制 * 号,导入指定的变量或函数,同样,我们还可以在__init__.py文件中使用__all__内置变量,来控制 * 号,指定引入哪一些模块:

上边截图,我们在m.py文件中引入py_package包下的所有模块,在__init__.py中我们用内置变量__all__来指定引入m1模块,结果打印m2没被定义,因为m2没有被引入!!!

当然如果不用 * 号 我们手动的引入模块,在__init__.py来控制模块的引入,是无效的。

     二、批量导入模块

假设有上百个文件需要导入相同的包,你当然不会去挨个文件引入相同的模块,这时可以把引入模块的事让__init__.py文件去做:

在__init__.py文件中,引入模块:

# 引入python内置模块
import os
import datatime
import sys

在需要执行模块的文件中,只需要引入包名(包的名子就是__init__.py的名字)即可:

# 引用包
import py_package
# 使用包中的模块
print(py_package.os)
print(py_package.datetime)
print(py_package.sys) # 1

注意:

包和模块不会重复被导入,如果重复导入只会执行一次

以上就是模块和包的大致用法,有不足之处,希望指正!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值