python核心概念---模块导入的几种方法,__name__属性和测试模块、包

模块

模块的几种导入方法

每一个以扩展名py结尾的源代码文件都是一个模块。
模块名同样也是一个标识符,需要符合标识符的命名规则。
在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具
模块就像是一个工具包,想要使用其中的工具,需要先导入这个模块。

import导入

import 模块名1
import 模块名2

导入之后,通过模块名.使用模块提供的工具。

可以在导入时使用as给模块起别名,模块别名应该符合大驼峰命名法。

import 模块名 as 模块别名

导入部分工具

import是一次性把模块中所有工具全部导入,并通过模块名或者别名访问,而导入部分工具可以使用from...import的方式,导入之后不需要通过模块名.的方式调用,而是可以直接使用

form 模块名 import 工具名

如果两个模块存在同名的函数,那么后倒入模块的函数会覆盖先导入的函数。这个时候可以通过给另一个工具起一个工具别名来解决。

不推荐的导入方法:

from 模块名 import *

一次性导入所有工具,并且不需要模块名.调用,但是不方便排查错误

导入模块的搜索顺序:

python的解释器导入模块时,会搜索当前指定模块名文件,如果有就直接导入,如果没有就会搜索系统目录。

在开发时,如果给文件起的名字不小心和系统模块文件名重名,那么python就会直接调用该模块而不是系统模块,就会可能会导致不想要的结果。

import random
	rand = random.randint(0, 10)

print(rand)

这时候,如果当前目录文件夹下面存在一个random.py文件,程序就无法正常运行。

使用内置属性__file__可以查看模块的完整路径。在pycharm中没有用,但是在ipython中可以。

print(模块名.__file__)
测试模块

在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍,但是一般在导入模块时,能够直接执行的文件一般都不需要立即执行。

在实际开发中,每个模块都是独立开发的,所以通常会在模块下方增加一些测试代码,仅在模块内使用,而被导入到其他文件中不需要执行

__name__属性可以做到,测试模块的代码只有在测试情况下被运行,而在被导入时不会被执行。

__name__是python的一个内置属性,记录着一个字符串,如果是被其他文件导入的,__name__就是模块名,如果是当前执行的程序,__name__就是__main__

创建一个test_han.py的模块如下:

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


def say_hello():
    print("HELLO")


say_hello()

运行结果:

小明开发的模块
__main__
HELLO

在另一个模块中导入test_han模块:

import test_han
print(__name__)
print("小韩开发的模块")

运行结果:

小明开发的模块
test_han
HELLO
__main__
小韩开发的模块

如果在test_han中增加一个判断:

if __name__ == "__main__"

并将所有测试代码移到条件判断之下,即可避免在被导入之后直接执行。
所以test_han模块中的代码应该改成:

def say_hello():
    print("HELLO")


if __name__ == "__main__":
    print("小明开发的模块")
    print(__name__)
    say_hello()

条件判断下方的代码为测试代码。

这时候再被导入,就不会直接执行。

代码
代码
代码

def mian()
	...
	pass

if __name__ == "__main__":
	main()

所以在开发的时候,也应该使用上面的格式进行开发,这样才能够被正常被导入使用。

包是一个包含多个模块特殊目录
目录下有一个特殊的文件__init__.py
包的命名方式与变量名一致

在这里插入图片描述
两种方式:
一种新建目录,手动添加__init__.py文件
一种是直接新建包

可以使用import 包名 一次性导入包中所有模块

要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表。

from.import 模块名1
from.import 模块名2

注意,这时候就可以直接 import 包名,而不是模块名,一次性导入所有模块,因为各个模块都已经在__init__.py中被初始化完毕了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值