Python之模块、包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33248299/article/details/82832281

一.模块

1.模块

  • 模块是python程序架构的一个核心概念
  • 每一个以扩展名py结尾的Python源代码文件都是一个模块
  • 模块名同样也是一个标识符
  • 模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块

2.模块两种导入方法

  • import导入
import 模块名1,模块名2(不推荐)
  • 在导入模块时,每个导入应该独占一行
  • 通过模块名.使用模块提供的工具 --全局变量,函数,类
import 模块名1
import 模块名2(推荐使用)
  • 如果模块名字太长,可以使用as指定模块的名称,以方便在代码中使用
import 模块名1 as 模块别名
#全局变量
title = "模块1"

def say_hello():
    print("我是 %s" %(title))

class Cat(object):
    pass
# 全局变量
title = "模块2"


def say_hello():
    print("我是 %s" % (title))


class Dog(object):
    pass
import  stefan_01_测试模块1 as CatModle
import  stefan_02_测试模块2 as DogModle

print(CatModle.title)
CatModle.say_hello()
print(CatModle.Cat)

print(DogModle.title)
DogModle.say_hello()
print(DogModle.Dog)

/*
模块1
我是 模块1
<class 'stefan_01_测试模块1.Cat'>
模块2
我是 模块2
<class 'stefan_02_测试模块2.Dog'>
*/
  • from…import导入
  • 导入之后不需要通过模块名. 可以直接使用模块提供的工具–全局变量,函数,类
# 从 模块 导入 某一个工具
from 模块名1 import 工具名
from stefan_01_测试模块1 import  Cat
from stefan_02_测试模块2 import  say_hello

say_hello()

xiaohuang = Cat()
print(xiaohuang)
  • 如果两个模块,存在同名函数,那么后导入模块函数会覆盖掉先导入的函数
from stefan_01_测试模块1 import  say_hello
from stefan_02_测试模块2 import  say_hello

say_hello()
/*
我是模块2
*/
  • 一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
from stefan_01_测试模块1 import  say_hello as Model1_say_hello
from stefan_02_测试模块2 import  say_hello

say_hello()
Model1_say_hello()
/*
我是 模块2
我是 模块1
*/
  • from…import导入所以工具
from 模块名1 import *(不推荐使用,函数重名并没有任何提示,出现问题不好排查)
from stefan_01_测试模块1 import  *
from stefan_02_测试模块2 import  *
print(title)
say_hello()
xiaohuang = Cat()
print(xiaohuang)
/*
模块2
我是 模块2
<stefan_01_测试模块1.Cat object at 0x000000A3CD49F0F0>
*/

3.模块搜索顺序

  • 搜索当前目录指定模块名的文件,如果有就直接导入
  • 如果没有,再搜索系统目录
  • 在开发时,给文件起名,不要和系统的模块文件重名

4.__name__属性

  • __name__属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行
  • __name__属性是Python的一个内置属性,记录这一个字符串
  • 如果是被其他文件导入的,__name__属性就是模块名
  • 如果是当前执行的程序__name__属性__main__
/*只有直接执行这个程序,才会打印*/
def say_hello():
    print("你好你好,我是say")

if __name__ =="__main__":
    print(__name__)

    print("小明开发的模块")
    say_hello()

二.包

1.包

  • 包是一个包含多个模块的特殊目录
  • 目录下有一个特殊文件__init__.py
  • 包名的命名方式和变量名一致,小写字母+_
  • 使用import 包名可以一次性导入包中所有模块,但是要先在__init__.py设置

在这里插入图片描述
__init__.py

from . import  send_message
from . import  receive_message

receive_message.py

def receive():
    return  "这是来自 stefan 的短信"

send_message.py

def send(text):
    print("正在发送 %s" %text)

text.py

import  stefan_message

stefan_message.send_message.send("hello")
print(stefan_message.receive_message.receive())
/*
正在发送 hello
这是来自 stefan 的短信
*/

猜你喜欢

转载自blog.csdn.net/qq_33248299/article/details/82832281