python 模块

'''
模块的创建
.py文件就是模块
模块命名遵循普通变量名的命名规则

模块搜索路径方式
1. 程序主目录
2. PYTHONPATH目录(如果已经进行了设置)
3. 标准链接库目录

4. 任何.pth文件的内容(如果存在的话)

#************************************************************************

import语句
1. 找到模块文件
2. 编译成位码(需要时)
3. 执行模块的代码来创建其所定义的代码
这三个步骤只有模块第一次导入时才会进行,非第一次导入,会跳过这三个步骤,而只提取内存中已经加载的模块对象
python把载入的模块存储到一个名为sys.modules的表中
import使一个变量名引用整个模块对象
'''
import sys
print(sys.path)   #返回模块搜索路径,导入时,Python会自动由左到右搜索这个列表中每个目录。

#from语句会把变量名复制到另一个作用域,它可以使我们直接在脚本中使用复制后的变量名,而不需要通过模块
from sys import path
print(path)
#************************************************************************
#from *语句 会取得模块顶层所有赋了值的变量名的拷贝,该语句只能用在文件的顶部,不能用于函数中
from sys import *
print(path)

#import和from是赋值语句,可以嵌套在if测试中,def中
#import将整个模块对象赋值给一个变量名
#from将一个或多个变量名赋值给另一个模块中同名的对象,而非模块本身
'''
first.py   x=1 y=[1,2]
'''
from first import x,y
print(x, y)   #1 [1,2]
x=42   
y[0]=42

import first
print(first.x, first.y)    #1 [42,2] x不是一个共享的可变对象,但y是,所以y的值被更新了,from复制而来的变量名和其来源的文件之间没有联系
first.x=42

print(first.x)   #42  要想实际修改另一个文件中的全局变量名,必须使用import

'''
first.py

x=88
def f():
    global x
    x=x+1

'''
x=11
import first
first.f()

print(x, first.x)  #11, 89

#from复制变量名,而不是连接

'''
eggs.py
x=1
def printer():
    print(x)
'''

from eggs import x, printer
print(x)
printer()
x=2
print(x)
printer()

#************************************************************************

#命名空间的嵌套
'''
first.py
x=1

second.py
x=2
import first
print(x, end=' ')
print(first.x)
'''
import second   #导入second,执行second,输出  2 3

x=1
print(x)  #x为当前模块x,输出1
print(second.x)  #x为当前模块second的x,输出2

print(second.first.x)  #x为当前模块first的x,输出3

#************************************************************************

模块重载
reload函数强制加载已加载的模块的代码重新载入并重新执行,此文件中新的代码的赋值语句会在适当的地方修改现有的模块对象
传给reload的是已经存在的模块对象,而非变量名

import语句 导入的模块,重载后,模块对象编程了新值,因为是通过点号运算符取出属性

from语句 导入的模块,重载后,之前重载的不会受到影响,因为依旧引用重载前取出的旧对象

#过渡性重载
#模块A中导入了模块B,C,重载A则不会重载B和C

#************************************************************************

#import语句和from语句的as扩展

from sys import path as o

print(o)   #打印结果为sys.path的值

import eggs as e

print(e)   #打印结果为同目录下的eggs.py模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值