Python基础 —— 模块和包

Python基础 —— 模块和包

一、模块

  一个模块就是一个包含了python定义和声明的文件,文件名是模块名+.py后缀。

  随着程序的发展,功能越来越多,为了方便管理,通常将程序分成一个一个的文件,这样程序的结构更清晰,方便管理。这是我们不仅仅可以把这些文件当成脚本去执行,还可以作为模块导入到其他模块中,实现了功能的重复利用。

导入模块的方法

导入模块其实就是告诉Python解释器去解释那个py文件

  • 导入一个py文件,解释器解释该py文件
  • 导入一个包,解释器解释该包下的 __init__.py 文件

那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path

1.1 import语句

导入方法

# 导入一个模块
import module_name

# 导入多个模块
import module1,module2

# 导入模块中指定的属性、方法(不加括号)、类
from module_name import *
from module_name import module_element
from module_name import module_element as new_name

使用别名时,使用"new_name()" 调用函数,文件中可以再定义一个"module_element"函数。

本质

创建一个名为"my_module"的py文件,

# my_module.py
print("from the my_module.py")
money = 100
def read1():
  print("my_module -> read1 -> money",money)

def read2():
  print("my_module -> read2 calling read1")
  read1()

def change():
  global money
  money = 0
my_module.py

新建一个名为"my main"的py文件:↓↓↓

# my_main.py
import my_module

my_module.read1()
my_module.change()
my_module.read2()


'''
运行结果:

from the my_module.py
my_module -> read1 -> money 100
my_module -> read2 calling read1
my_module -> read1 -> money 0
'''
my_main.py

 

# my main.py
import my_module
如果main程序中只是将my_module模块导入进来,运行结果: from the my_module.py

  

模块中可以包含可执行的语句和函数定义,这些语句的目的是初始化模块。只在模块名第一次遇到import语句时才执行。

import语句针对同一个模块被import很多次,为了防止重复导入,python优化的手段是第一次导入后就将模块名加载到内存,后续的import语句仅是对已经加载到内存中的模块对象增加一次引用,不会重新执行模块内的语句。↓↓↓

# my_main.py
import my_module import my_module import my_module

# 运行结果:
from the my_module.py  仅打印一次

可以用sys.modules查看文件导入的模块

# my_main.py
import sys import my_module print(sys.modules)

1.2 导入优化

import module_name 

def a():
    module_name.hello()
    print("fun a")

def b():
    module_name.hello()
    print("fun b")

a()
b()
module_test.py

多个函数需要重复调用同一个模块下的同一个方法,每次调用需要重复查找模块。可做如下优化:

1.3 

 

  

posted @ 2020-10-12 10:20  乖巧Clare  阅读(66)  评论(0编辑  收藏  举报