python-查漏补缺笔记-更新中

包导入时__init__.py中命令的执行顺序和sys.modules变化

ref: https://edu.csdn.net/skill/practice/python-3-6/164

  1. 在有父包和子包的情况下,父包中的“ __ init__.py”语句会在子包的“ __ init__.py”语句之前执行,然后按下列顺序执行
  2. 导入子包和模块
  3. 执行“ __ init__.py”中其他代码

需要注意的是,如果只导入子包,Python解释器会将父包的信息添加到sys.modules中,这样导入子包的时候能知道父包的存在,但是除了父包的__init__.py中的语句,并不会执行其他代码,只有需要访问父包时才会进行真正的导入。

sys.modules是一个字典,记录的是已经导入的模块信息。首次导入一个模块时,python会检查这个模块是否存在于sys.modules中,如果已经存在,会直接返回模块对象;否则导入。

实例
文件结构如下图所示,father包含one、two和three三个包,one包又包含一个one包。每个 __ init__.py中包含的内容只有一条print语句,打印诸如 this is father、this is 1、this is 1.1这样的语句。
在这里插入图片描述
leetcode.py中的内容如下所示:

import sysif __name__ == '__main__':for i in range(2):import fatherimport father.one.oneimport father.two#print(sys.modules.keys())del sys.modules['father']del sys.modules['father.one.one']del sys.modules['father.two']print('-----------\n')''' 输出结果
this is father
this is 1
this is 1.1
this is 2
-----------this is father
this is 1.1
this is 2
-----------
'''

这是因为father.one在第一次循环时被加入了sys.modules,后续并没有被删除,所以再次导入时不会执行father.one的__init__.py语句,也就不会输出this is 1。

可变形参:匿名和带关键字的

Python函数的参数可以有4种:

  1. 按位置顺序指定的参数,如下面的index
  2. 带默认值的参数,如下面的default
  3. 没有名字的可选参数,如*args
  4. 有名字的可选参数,如**kw

实例

# -*- coding: UTF-8 -*-
def dump(index, default=0, *args, **kw):print('打印函数参数')print('---')print('index:', index)print('default:', default)for i, arg in enumerate(args):print(f'arg[{i}]:', arg)# 注意这里要用kw.items()for key,value in kw.items():print(f'keyword_argument {key}:{value}')print('')if __name__=='__main__':dump(0)dump(0,2)dump(0,2,"Hello","World")dump(0,2,"Hello","World", install='Python', run='Python Program')'''输出
打印函数参数
---
index: 0
default: 0打印函数参数
---
index: 0
default: 2打印函数参数
---
index: 0
default: 2
arg[0]: Hello
arg[1]: World打印函数参数
---
index: 0
default: 2
arg[0]: Hello
arg[1]: World
keyword_argument install:Python
keyword_argument run:Python Program
'''

元组tuple

tuple1 = ('红色')
for element in tuple1:print(element)
'''输出
红
色
'''

这个输出是因为tuple1实际不是元组,是str,用type()可知。如果要声明为元组,应该用 tuple1 = (‘红色’,)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323924.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在总段输入brew search nginx 命令检查nginx是否安装了 2. 安装命令:brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式:在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

如何打造家居产业数字化转型范式?林氏家居以数智供应链作答

近年来,我国房地产行业逐步进入深度调整期。作为下游产业,家居家装行业的发展也来到了新阶段。业内人士指出,新房市场成交规模收缩,家居家装企业们开始整合资源,向存量房市场、产品科技化以及数字化转型。 国家层面出…

实验4.4 动态路由OSPF协议的配置

实验4.4 动态路由OSPF协议的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.配置交换机和路由器的接口的IP地址等参数。2.配置动态路由OSPF协议,实现全网互通。 六、任务验收七、任务小结八、知识链接1.OSPF协议概念2.…

qiankun 公共依赖

1、提取公共依赖的目的 减少相同资源的重复加载资源版本不同步打包文件庞大2、如何提取公共依赖 基本思路:1、相同依赖 采用 CDN 的方式加载,并把 所有依赖的 CDN 链接 统一放到一个文件中进行管理 2、把存放 CDN 链接的文件,引入到 vue.conf…

基于OpenCV的图像平移

基本概念 图像的平移操作是将图像的所有像素坐标进行水平或者垂直方向的移动,也就是所有像素点按照给定的偏移量在水平方向上沿X轴,垂直方向上沿y轴移动。 设原始图像像素点为(x0,y0),平移后的图像的像素点为(x,y),x…

接口开发—hrun语法和用例规范

学习目标: 1、常见的抓包方法 2、如何提取和使用token 3、用例规范 4、辅助函数 具体内容: 1、常见的抓包方法 做接口测试前,肯定需要使用抓包工具去请求接口,然后才开始正常写接口用例。 常用的2种抓包方法有&#xff1a…

FreeRTOS——内存管理知识总结及实战

1 freeRTOS动态创建与静态创建 动态创建:从FreeRTOS 管理的内存堆中申请创建对象所需的内存,在对象删除后, 这块内存释放回FreeRTOS管理的内存堆中 静态创建:需用户提供各种内存空间,并且使用静态方式占用的内存空间一…

分配器allocators

STL六大组件之一分配器allocators 分配器&#xff1a;负责空间的配置与管理&#xff08;写在容器类型的后面&#xff0c;如右图&#xff0c;作用是帮容器分配内存&#xff0c;一般都 会省略不写&#xff0c;源代码有默认的&#xff09; #include <vector>vector<…

linux下安装Nginx及其常用命令

安装Nginx 接下来在Linux服务器进行操作就可以了 安装插件 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel直接使用wget进行安装(如果没有wget需要先安装wget) yum install wgetwget https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf nginx..…

python的课后练习总结4(while循环)

for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. i 1while i < 5:print(i)i i 11、使用wh…

pypdf 将 PDF两个页面拼接成一个页面进一步详解

pypdf 原库名Pypdf2(已弃用&#xff0c;文档 PyPDF2 RectangleObject类_w3cschool) pypdf 官方文档 The Transformation Class — pypdf 3.17.4 documentation pypdf 将两个PDF页面在x轴&#xff0c;y轴进行平移调整位置之后&#xff0c;直接用merge_page拼接在一起&#xff…

python学习曲线绘制

1. 学习曲线的绘制 learning_curve的使用案例 learning_curve 函数是 Scikit-learn 库中用于生成学习曲线的工具。以下是该函数的主要参数及其解释&#xff1a; estimator: 模型估计器&#xff08;estimator&#xff09;&#xff0c;即要评估性能的机器学习模型。这是必需的参…