python—-模块与包1
标签:别名需要引用显示hang文件执行moneychange
模块与包
1 什么是模块?
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀
2 为何要使用模块?
如果你对出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script
3 如何使用模块?
实例文件:spam.py ,文件名spam.py ,模块名spam
print(\”from the spam.py\”)
money=1000
def read1():
print(\”spam–>read1–>money,money\”)
def read2():
print(\”spam–>read2–>\”)
read1()
def change():
global money
money=0
3.1.1 模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句
import spam #只在第一次导入时才执行spam.py内代码,
# 此时的显示效果是只打印一次“from the spam.py\”
import spam
import spam
import spam
执行结果为:
from the spam.py
3.1.2 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个函数的名称空间当做全局名称空间。
这样我们在编写自己的模块时,就不用担心我们在定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突
#测试一:money与spam.money 不冲突
#test.py
import spam
money=100
print(spam.money)
执行结果:
from the spam.py
1000
#测试二:read1与spam.read1 不冲突
#test.py
import spam
def read1():
print(\”read1\”)
spam.read1()
执行结果:
from the spam.py
spam–>read1–>money,money
#测试三:执行spam.change()操作的全局变量money仍然是spam中
#test.py
import spam
money=10
spam.change()
print(money)
执行结果:
from the spam.py
10
总结:导入模块会执行文件
第一件事:创建名称空间,用来存放spam.py中定义的名字
第二件事:基于刚刚创建的名称空间来执行spam.py
第三件事:创建名字spam指向该名称空间,spam.名字的操作,都是以spam.py为准
3.1.3 为模块名起别名,相当于m1=1;m2=m1
import spam as sm
print(sm.money)
执行结果:
from the spam.py
1000
3.1.4 在一行导入多个模块
import sys,os,re
3.2 from ……import…..
3.2.1 对比import spam,会将源文件的名称空间“spam”带到当前名称空间时,使用时必须是spam.名字的方式。