Python 学习之二: module, import 与 import as

1, module 的实质

python 中的module 本质上就是一个相对独立的python文件.

当需要重用某些功能时, 将此功能所在的模块import到需要的模块即可.


2,  import 的实质

import的过程实际上包括两个主要部分,

1) 类似于shell 的 "source" 命令, 具体说即相当于将被import的module(即python文件) 在当前环境下执行一遍.

当多次import同一个module时, python会保证只执行一次. 参考Example1


2) import的第二个部分是使被import的成员(变量名, 函数名, 类....)可见.

为保证不发生命名冲突, 需要以 module.name 的方式访问导入的成员. 参考Example2


3, from *** import 的实质 (import 与 from *** import 的区别)

与import类似, 被导入的module仍然会执行且仅执行一次.

区别是当以 "from *** import " 方式导入module时, python会在当前module 的命名空间中新建相应的命名.

即, "from t2 import var1" 相当于:

import t2

var1= t2.var1

在此过程中有一个隐含的赋值的过程

由于python赋值操作特性(参考Python 学习之1: 变量名的本质),

在当前代码中对"var1"的修改并不能影响到t2.py中"var1"的值. 同时, 在t2.py中对var1的修改也不能反映到当前的代码.

参考Example3



Example1:

t1.py:

import t2
import t3
print "execution of t1.py"


t2.py:

print "execution of t2.py"


t3.py:

import t2
print "execution of t3.py"


(env) D:\test>python t1.py
execution of t2.py
execution of t3.py
execution of t1.py


Example2:

t1.py:

import t2

print "a varialbe in t2 is %s" % t2.var_in_t2
print "now will call a functiong in t2"
t2.func_in_t2


t2.py:

var_in_t2 = 0
def func_in_t2():
    print "this is a function in t2.py"
    
print "execution of t2.py"


(env) D:\test>python t1.py
execution of t2.py
a varialbe in t2 is 0
now will call a functiong in t2


Example3:

t1.py

from t2 import var_in_t2
import t2

print "the initial value in t1.py is %s" % var_in_t2
print "the initial value in t2.py is %s" % t2.var_in_t2

print "now try to change the value in the t1.py"
var_in_t2 = 50
print "now the value in t1.py is %s" % var_in_t2
print "now the value in t2.py is %s"  % t2.var_in_t2

print "now try to change the value in the t2.py"
t2.var_in_t2 = 20
print "now the value in t1.py is %s" % var_in_t2
print "now the value in t2.py is %s"  % t2.var_in_t2


t2.py

var_in_t2 = 0
def change_var():
    global var_in_t2
    var_in_t2 = 100


(env) D:\test>python t1.py
the initial value in t1.py is 0
the initial value in t2.py is 0
now try to change the value in the t1.py
now the value in t1.py is 50
now the value in t2.py is 0
now try to change the value in the t2.py
now the value in t1.py is 50
now the value in t2.py is 20


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值