Python 基础之import语句

Python提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。

模块(py文件),模块相当于一盒积木,而模块中的函数相当于一块积木,一个py文件中可包含多个函数/类/方法,模块化编程通常把复杂的程序分为多个文件(模块),这样不仅可以提高代码的可维护性,还可以提高代码的可重用性。

代码可重用性:当编写好一个模块后,只要编程过程中需要用到该模块中的某个功能(由变量、函数、类实现),无需做重复性的编写工作,直接在程序中导入该模块即可使用该功能。

模块化是更高级的封装

Python中的包和模块可以分为三类:

1、标准包/模块:即python自带的模块,通过import导入后使用,如:os , random等

2、第三方包/模块:即非python自带,需要通完pip install来安装后,再import导入使用,如接下来常用的:requests, pyYaml, pytest, selenium等模块;

3、自定义包/模块:即自己封装的py文件,通过import来导入使用

回顾一个之前学过的封装:

  • 诸多容器,例如列表、元组、字符串、字典等,它们都是对数据的封装;
  • 函数是对 Python 代码的封装;
  • 类是对方法和属性的封装,也可以说是对函数和数据的封装。
  • 模块是对数据、函数、类的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。

import语句,用于导入py模块,调用模块中的封装

import random  # 导入random.py

ran_num = random.randint(0, 9)

Python 基础之import语句_第1张图片

 

import 的基本使用:

  1. import 模块名1 [as 别名1], 模块名2 [as 别名2],…:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。
  2. from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…: 使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。同时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。
# D2.py

def func_01():
	print("这是func_01函数")

class FuncClass:

	def func_02(self):
		print("这是类中func_02方法")

 在D1.py 中调用D2.py中的函数和方法(D1.py与D2.py在同一文件夹下)

#D1.py
import D2   # import 模块名 即导入D2.py模块

D2.func_01() # 模块名.函数
D2.FuncClass().func_02() # 模块名.实例.方法

 

from ... import 语句

from [文件夹名].模块 import 函数/类 (D1.py与D2.py可不在同一文件夹下,不在同一文件夹下时需要指定文件夹名)

#D1.py
from study_day01.D2 import func_01, FuncClass

func_01()
FuncClass().func_02()

from 文件夹.模块 import 函数名/类名

#D1.py
from study_day01.D2 import FuncClass
from study_day01.D2 import func_01
# from study_day01.D2 import FuncClass, func_01

func_01()
FuncClass().func_02()

把模块中的函数或类全部导入

from 文件夹.模块 import *

#D1.py
from study_day01.D2 import *  # 通过 import * 导入D2.py模块的全部函数或类

func_01()
FuncClass().func_02()

python的__name__变量

__name__变量是python内置变量,通过学习import,我们知道py模块的运行分为直接运行与通过导入后的间接运行

py模块直接运行时:name__变量在Python内部会变为__main

py模块通过导入间接运行时:__name__变量在Python内部会变为对应运行的模块名

例:

#study_02.D4

def func_d4():
    print('执行函数func_d4中的代码')
    print(f'D4.py模块此时__name__变量的值为:{__name__}')



class FuncD4Class:

    def methond_d4(self):
        print('执行方法method_d4中的代码')

func_d4()

运行结果:
执行函数func_d4中的代码
D4.py模块此时__name__变量的值为:__main__

在同目录下新建一个D5.py模块,在D5.py模块中通过import导入D4.py

#study_02.D5

from D4 import func_d4

print(f"这是D5.py模块中的__name__此时的值为:{__name__}")

运行结果:
执行函数func_d4中的代码
D4.py模块此时__name__变量的值为:D4
这是D5.py模块中的__name__此时的值为:__main__

 上面代码示例表明在D5.py模块中通过导入D4.py模块,会执行D4.py模块下的可执行代码 func_d4() 函数,该函数中__name__变量变更为自己的所属的模块名D4,如果不通过导入调用,直接在D4.py下执行func_d4()函数,__name__变量为__main__,通过此特性如果D4.py模块下的代码不想被D5.py模块导入时执行,可加入判断 if __name__ == '__main__': 把不需要被导入执行的代码放到 if 判断的子语句中。

#study_02.D4

def func_d4():
    print('执行函数func_d4中的代码')
    print(f'D4.py模块此时__name__变量的值为:{__name__}')



class FuncD4Class:

    def methond_d4(self):
        print('执行方法method_d4中的代码')
        
        
if __name__ == '__main__':
    
    func_d4()

 在D5.py模块中运行

from D4 import func_d4

print(f"这是D5.py模块中的__name__此时的值为:{__name__}")

运行结果:
这是D5.py模块中的__name__此时的值为:__main__

D5.py模块中虽然导入了D4模块的func_d4,但并没有执行调用func_d4( ),是因为在D4模块在D5中导入后__name__变量实际值为D4,D4 ≠ __ main __,所以import时并不执行func_d4( )该函数。 

 

 

 

 

 

 

 

你可能感兴趣的:(学习python,python)