python 导入包的路径_python模块的使用实例(import, from import,循环导入,搜索路径)...

一、模块的使用

模块定义:一系列功能的集合体

分为三大类:1.自定义模块

2.内置模块(比如 time,os,sys)

3.第三方模块

模块的表现形式:

1.使用python编写的py文件

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

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

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

为什么要用模块:

1.可以拿来内置、第三方的模块,然后直接使用,这种拿来就用的方式,会极大的提升开发效率

2.将程序中共用的一些功能组织到一个文件中,然后程序各部分组件可以重用该文件中的功能。

优点是 减少代码冗余,增强程序的组织结构性与可维护性

怎么用模块:

一个py文件就是一个模块,如果文件名为modules.py,模块名则为modules

ps:模块的使用必须搞清楚谁是执行文件,谁是被导入的模块

1、模块的使用之import

#:coding:utf-8#modules.py

print('from the modules.py')

money=1000

defread1():print('modules模块.read1',money)defread2():print('modules模块.read2')

read1()defchange():globalmoney

money=0

modules.py

importmodules

money=111111111111

print(modules.money)print(modules.read1)print(modules.read2)print(modules.change)

modules.money=2222

print(money)###结果为money=111111111111

modules.read1()#modules模块.read1 2222 #这个更改成功modules.money=2222

def read1():#此处定义read1

print('run.py中的read1')

modules.read1()#执行结果仍为modules模块.read1 2222

money=20000000modules.change()#此处执行了modules中change函数

print(money)###此处为上述money=20000000

print(modules.money)##结果为0

import modules as spam ##可以as 起个别名

print(spam.money) #依旧执行成功 结果为0

run.py

执行文件:run.py      被导入模块是:modules.py

首次导入模块会发生三件事:

1、创建一个模块modules.py的名称空间

2、执行模块对应的文件modules.py,将产生的名字丢到模块的名称空间中

3、在当前执行文件的名称空间中拿到一个名字modules,该名字就是指向模块modules.py的名称空间的

import modules# modules=modules.py名称空间的内存地址

ps:

在当前执行文件中引用模块中的名字语法为:modules.名字,必须加上modules.作为前缀

modules.名字相当于指名道姓地跟某一个名称空间要名字,根本不会与当前执行文件的名字冲突

2、模块的使用之  from   import

#modules.py#print('from the modules.py')

__all__=['money','read1']

money=1000

defread1():print('spam模块.read1',money)defread2():print('spam模块.read2')

read1()defchange():globalmoney

money=0

spam.py

from spam importmoney,read1,read2,change#defread1():print('run.py.read1')

read1()#run.py.read1

read2() #spam模块.read2 ------------> spam模块.read1 1000

from spam importmoney as myprint(my) #1000

#===========================================

from spam import * #* 会检索被导入模块中的__all__指定的名字,如果没有该变量那默认导入所有

print(money) #1000

print(read1) ##print(read2) #会报错#print(change) #会报错

run.py

执行文件:run.py      被导入模块: spam.py

首次导入模块会发生三件事

1、创建一个模块spam.py的名称空间

2、执行模块对应的文件spam.py,将产生的名字丢到模块的名称空间中

3、在当前执行文件的名称空间中拿到一个名字money,该名字就是指向模块spam.py的名称空间的那个money

from spam import money,read1,read2,change

两种导入方式的对比

相同点:函数的作用域关系在定义阶段就规定死了,与调用位置无关

from import

优点:可以不用加前缀而直接引用名字,更简洁

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

import

优点:指名道姓跟某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突

缺点:必须加上前缀

3、循环导入的问题

#print('正在导入m1')#

#x='m1.py'#

#from m2 import y#

print('正在导入m1')deff1():from m2 importy,f2print(y)

f2()

x='m1.py'

m1.py

#print('正在导入m2')#

#y='m2'#

#from m1.py import x

print('正在导入m2')deff2():from m1 importxprint(x)

y='m2.py'

m2.py

### run.py#1、创建m1.py的名称空间#2、执行m1.py的代码,将产生的名字丢到m1.py的名称空间中#3、在当前执行文件的名称空间中拿到一个名字m1

importm1

m1.f1()

4、模块的搜索路径

模块搜索路径优先级:

内存  --------> 内置的模块 --------> sys.path(环境变量)

5、区分python文件的两种用途

一个python文件有两种用途:

1、可以执行运行:__name__ == '__main__'

2、可以被当做模块导入:__name__ == '模块名'

if __name__ == '__main__':

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值