Python模块与包的应用

本文详细介绍了Python中的模块和包的使用,包括模块的导入方式、from...import语句、as别名、循环导入的处理、模块搜索路径的优先级,以及包的目录结构和init.py文件的作用。通过实例展示了如何创建和使用包,强调了相对导入在包结构中的重要性,并提醒了避免循环导入的重要性。
摘要由CSDN通过智能技术生成

前言

在以前我们存放功能的地方在函数内,可以将各个功能写好存入函数内,那我们开发程序仅仅只用一个文件吗。并不是,学习使用模块可以很好的帮我们解决功能分类,使程序的组织结构变得清晰,维护起来更加方便。



Python模块

在Python中,一个py文件对应一个模块,模块根据文件名去掉后缀导入,如:文件名为test.py,那么我们导入模块使用test导入即可。模块是存放我们写好的功能。比如写好了登录、注册、修改密码、忘记密码等功能,我们可以将它们存放在一个py文件内。那么它可以称之为模块,且模块是可以重复调用的。
我们可以自定义模块,也可以导入使用内置或第三方模块的现有功能,这种用法极大提高了程序的开发效率。


模块的使用

首次导入模块会产生三件事情:

1、执行模块的源代码
2、产生一个新的名称空间用于存放模块执行过程中产生的名字
3、在当前执行文件所在的名称空间得到一个名字(也就是模块的名字),该名字指向的就是模块名称空间。我们引入模块的代码加上模块名即可。

我们使用import导入写好的py文件,在同目录定义两个文件

# test文件
name = 'tom'
age = 18


# run文件

# 导入test模块
import test # 有可能会发现导入时会划红线,别担心,这是编辑器的原因,我们正常调用即可

print(test.age) # 引用test模块下面的age变量
> 18

注意:我们定义的变量不能与模块名冲突了,如果定义相同的名字,等于覆盖了模块名。

我们使用模块进行的操作不会对当前文件的代码产生影响,我们也可以直接改变模块内变量值

import test

test.age = 300
print(test.age)
> 300

我们在test文件内定义一个函数,然后通过调用这个函数看看是否会产生影响

# test文件

age = 30
def change():
    global age
    age = 130


# run文件
import test
age = 100 # run文件内定义的变量

test.change() # 是否会对当前age变量产生影响?

# 答案是不会的,因为名称空间与作用域在定义的时候已经产生了,怎么调用它都是到对定义时的值进行操作,也就是test文件内的age变量
print(age) 
> 100

需要强调一点:第一次导入模块已经将其加载到内存了,之后再导入名称相同的模块会直接引用内存中已存在的模块,不会再重复执行。

# test文件
print('my file_name is test') # 增加一个打印内容


# run文件
import test
> 'my file_name is test' # 可以看到已经将test模块载入内存了

import test
# 并不会再打印内容了,因为第一次已经调用过,第二次调用等于复用第一次调用的模块

使用sys模块的modules会打印内存中已经加载的模块

import sys

print(sys.modules)

使用import语句可以导入多个模块,可以写多行import语句

import test
import test1
import test2

也可以一行导入多个模块,使用逗号进行分隔

import test,test1,test2

但其实第一种更为规范,可读性更好,推荐使用,而且我们导入的模块中可以含有python内置的模块、第三方模块、自定义模块,为了更方便区分它们,我们通常在文件开头导入,并且分类导入,每个类型之间的模块进行空行隔开。

# python内置模块,常见内置模块
import sys
import os
import time
import random

# 第三方模块

# 自定义模块
import test

当然,我们也可以在函数内导入模块,在文件开头导入的模块属于全局作用域,而在函数内导入的模块则属于局部作用域。


form … import 语句

from 与 import 基本一致。但是不同的是:使用import test导入模块后,我们在使用时必须以模块名为前缀使用。而使用from test import 可以引入模块内的代码,直接调用引入进来的代码使用

# test文件
def func():
	print('Hello')

# run文件

#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值