python中导入一个模块使用_Python 中模块及其导入方式

模块

模块的概念:模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。

模块的定义:创建一个 py 文件就是一个模块,该 py 文件名就是模块名。

模块的使用:在要使用模块的文件中,通过 import 模块名 来导入模块。

模块的通用类别:

1 使用python编写的.py文件

2 已被编译为共享库或DLL的C或C++扩展

3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

4 使用C编写并链接到python解释器的内置模块

import module 导入模块后对应的操作:

编译执行模块所对应的 py 文件,形成对应的 pyc 文件

产生该模块自己的全局名称空间

在使用该模块的全局名称空间中产生一个名字(导入的模块名)

导入模块是要注意点:

1.每一个文件都会产生自己的全局名称空间,且相互不影响

2.多次导入,只会编译执行模块一次,将其加载到内存,之后的都是直接对名字的引用

使用模块的优点:

1.从文件级别组织代码,是同特性的功能能统一管理

2.可以使用系统或第三方模块(拿来主义),来提高开发效率

起别名

通过as关键字可以给模块起别名: 模块名一旦起别名,原模块名就不能再使用,为已经导入的模块起别名的方式对编写可扩展的代码很有用。

优点:

1.可以简化模块名字

2.可以统一功能

# 1.可以简化模块名字

import mmmmm3 as my_m3

print(my_m3.num)

# 2.可以统一功能

cmd = input('数据库选择 1:mysql | 2:oracle:')

if cmd == '1':

import mysql as db

# mysql.excuse()

else:

import oracle as db

# oracle.excuse()

db.excuse()

假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块

if file_format == 'xml':

import xmlreader as reader

elif file_format == 'csv':

import csvreader as reader

data=reader.read_date(filename)

from导入

from 模块名 import 名字1, 名字2, …, 名字n

利用from导入可以指名道姓导入模板中所有想导入的名字。

使用from导入与import导入的区别:

使用from…import…则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.

from...import...的方式有好处也有坏处

好处:使用起来方便了

坏处:容易与当前执行文件中的名字冲突

from 模块名 import *

导入的是模块中的__all__这个列表

1、系统默认该列表不会收录_开头的名字

2、可以自定义__all__列表来规定外界通过*可以导入的名字

大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差。

例如模块中有变量名 a

from 模块名 import *

# 可以使用模块中的a

a = 20

# 模块中的a就被覆盖了,且在代码上还不能直接看出

利用from导入时起别名

from 模板名 import 名字1 as 别名1, ..., 名字n as 别名n

自执行与模块区别

编写好的一个python文件可以有两种用途:

一:脚本,一个文件就是整个程序,用来被执行

二:模块,文件中存放着一堆功能,用来被导入使用

python为我们内置了全局变量__ name __ ,

当文件被当做脚本执行时:__ name __ 等于’__ main __ ’

当文件被当做模块导入时:__ name __等于模块名

作用:用来控制.py文件在不同的应用场景下执行不同的逻辑

if __ name __ == ‘__ main __’:

__name__:

1.在py文件作为模块被使用时,__name__为模块名

2.在py文件自执行时,__name__为字符串 '__main__'

print("共有逻辑")

if __name__ == '__main__':

# 所有自执行的逻辑

print("m6: 我是自执行的")

a = 10 # 产生的是全局的名字

else:

# 所有模块的逻辑

print("m6: 我被导入执行的")

print(a) # 会报错:走else就不可能走if,所以a压根没产生

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值