**1、模块:**模块好比工具包。要想使用这个工具包中的工具,就需要先导入这个模块
其中每一个以扩展名py结尾的python.源代码文件都是一个模块。
模块的导入方式:
(1)import导入
import 模块名1,模块名2(不推荐使用)
推荐使用下列方式,因为在导入模块时,每个导入应该独占一行
import 模块名1
import 模块名2
导入之后:通过模块名。使用模块提供的一些工具(比如说全局变量、函数、类)
import test_model1
import test_model2
test_model1.say_hell0()
test_model2.say_hell0()
#因为我们类是实例属性,要创建对象才可以
#创建对象需要在类名前面加上这个模块的名字
dog=test_model1.Dog ("小黑")
dog.nm()
cat=test_model2.Cat()
print(cat)
自己写的test_model1:
#全局变量
title="模块1"
#函数
def say_hell0():
print("欢迎使用{}".format(title))
#类
class Dog(object):
def __init__(self,name):
self.name=name
def nm(self):
print("这只狗的名字叫{}".format(self.name))
# dog=Dog("小黑")
#这里只是创建了对象,还需要写一个方法的调用
#而init方法只是进行了一个初始化
# dog.nm()
自己写的一个简单test_model2:
#全局变量
title="模块2"
#函数
def say_hell0():
print("欢迎使用{}".format(title))
#类
class Cat(object):
pass
如果模块的名字太长,可以使用as指定模块的名称,以此方便代码中的使用。
格式:
import 模块名1 as 模块别名
(其中模块别名应该符合大驼峰的命名法则)
2、如果希望从某一个模块中导入部分工具可以使用from。。。import的方式
格式:from 模块名1 import 工具名
from test_model1 import Dog
from test_model2 import Cat
dog=Dog ("小黑")#相当于引入了dog类,
dog.nm() # 所以直接在主函数创建对象和调用属性就可以了
cat=Cat()
print(cat)
这种可以直接使用模块提供的工具(像全局变量,函数,类)
注意:
如果两个模块中存在同名的函数,那么会执行最后导入的模块,即覆盖掉先导入的函数,所以在开发时,import 代码应该统一写在代码的顶部,更容易发现冲突,这种情况下,可以使用as关键字给其中一个工具起一个别名。
from test_model1 import say_hell0
from test_model2 import say_hell0
say_hell0()
欢迎使用模块2
改变方法:
from test_model1 import say_hell0 as model1_sayhello
from test_model2 import say_hell0
model1_sayhello()
say_hell0()
欢迎使用模块1
欢迎使用模块2
from 。。。import*
表示从模块导入所有工具,但这种方式不推荐使用
3、模块的搜索顺序
python的解释器在导入模块时,会:
搜索当前目录指定模块名的文件,如果有就直接导入,如果没有,在搜索系统目录。
因此在开发时,给文件起名,不要和系统模块文件重名。
下图中此时python文件中没有random.py,因此可以正常运行
然后我们自定义添加一个random,这时候程序会报错。
我们用内置属性—file—可以查看模块的完整路径,例如:
import random
print(random.__file__)
结果如下:
F:\python--study\basement\section5--functions\random.py
表示当前路径下的py文件。
这时我们点击右键选择delete,界面弹出提示信息,直接点删除。然后我们在运行刚刚的程序,结果如下:
E:\anaconda\lib\random.py
4、每一个文件都应该是可以被导入的。
一个独立的python文件就是一个模块
在导入文件,文件中所有没有任何缩进的代码都会被执行一遍。
比如:
主程序中:
import test_model1
print("-*"*10)
test_model1.say_hell0()
dog=test_model1.Dog("小黑")
dog.nm()
结果如下:
这是一个test模块
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
欢迎使用模块1
这只狗的名字叫小黑
可以看出,不仅输出的test_model1中的函数与类,还输出了没有缩进的“这是一个test模块”
test_model1中:
title="模块1"
#函数
def say_hell0():
print("欢迎使用{}".format(title))
#类
class Dog(object):
def __init__(self,name):
self.name=name
def nm(self):
print("这只狗的名字叫{}".format(self.name))
# dog=Dog("小黑")
#这里只是创建了对象,还需要写一个方法的调用
#而init方法只是进行了一个初始化
# dog.nm()
print("这是一个test模块")
那么有没有什么办法使得print(“这是一个测试模块”)这条语句仅在test_model1中使用。
——name——属性可以做到。
1、如果是在当前执行的程序(比如说test_model1中),–name–就是–main–
print(“__name__”)
结果为
__main__
2、如果是被其他文件(比如说main)导入的,–name–就是模块名
常用语句:
if name=“main”: