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

news2025/1/12 16:04:04

包导入时__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 sys

if __name__ == '__main__':
    for i in range(2):
        import father
        import father.one.one
        import 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.coloradmin.cn/o/1361589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7款实用的SQLite数据库可视化管理工具

前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。今天推荐7款实用的SQLite数据库可视化管理工具(GUI),帮助大家更好的管理SQLite数据库。 什么是SQLite? SQLite是一个…

[C#]使用onnxruntime部署yolov8-onnx印章检测

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8是目标检测领域中的一种先进算法,它是YOLO(You Only Look Once)系列算法的最新发展。YOLO算法以其高效和实时的性能而著名,而YOLOv8则进一…

Flume基础知识(九):Flume 企业开发案例之复制和多路复用

1)案例需求 使用 Flume-1 监控文件变动,Flume-1 将变动内容传递给 Flume-2,Flume-2 负责存储 到 HDFS。同时 Flume-1 将变动内容传递给 Flume-3,Flume-3 负责输出到 Local FileSystem。 2)需求分析: 3&…

【十】【C语言\动态规划】376. 摆动序列、673. 最长递增子序列的个数、646. 最长数对链,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

用Redis实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题: id的规律性太明显受表数据量的限制 全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性: 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

Linux第15步_安装FTP客户端

安装完FTP服务器后,还需要安装FTP客户端,才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中,找到“FileZilla_3.51.0_win64-setup.exe”,双击它,就可以安装。 2、点击“I …

How can I be sure that I am pulling a trusted image from docker?

1、Error response from daemon: manifest for jenkins:latest not found: manifest unknown: manifest unknown 2、Error response from daemon: pull access denied for nacos, repository does not exist or may require ‘docker login’: denied: requested access to th…

云服务器ECS搭建个人项目

一、登录云服务器ECS 在ECS实例的操作列中点击远程连接云服务器ECS,点击实例最右侧的远程连接按钮,并立即登录后会跳转至Workbench的登录页面。但是第一次进去不知道密码?可以重置密码 登录后可以看到如下页面,说明已经成功登录到…

开源项目 | 完整部署流程、一款开源人人可用的开源数据可视化分析工具

📚 项目介绍 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结…

Spring Boot依赖版本声明

链接 官网 Spring Boot文档官网:​​​​​​https://docs.spring.io/spring-boot/docs/https://docs.spring.io/spring-boot/docs/ Spring Boot 2.0.7.RELEASE Spring Boot 2.0.7.RELEASE reference相关:https://docs.spring.io/spring-boot/docs/2.…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》,我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识,我们已经在行业内建立了良好的声誉,并赢得了客户的信任和支持。 支持各种源码,网站搭建,APP&a…

为什么说UUID是唯一的?

在数字时代,我们需要一种能够唯一标识各种实体的方法。通用唯一标识符(UUID)正是为满足这一需求而诞生的。本文将从多个方面介绍UUID,探讨它为何成为通用唯一标识符,以及为什么说UUID是唯一的。 UUID/GUID生成器 | 一…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop中处理被激活的文件描述符的事件

文件描述符处理与回调函数 一、主要概念 反应堆模型:一种处理系统事件或网络事件的模型,当文件描述符被激活时,可以检测到文件描述符:在操作系统中,用于标识打开的文件、套接字等的一种数据类型 处理激活的文件描述符…

RK3568驱动指南|第九篇 设备模型-第111章 platform总线注册驱动流程实例分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Vue2 实现内容拖拽或添加 HTML 到 Tinymce 富文本编辑器的高级功能详解

在 Web 开发中,Tinymce 被广泛应用作为富文本编辑器。除了基础的文本编辑功能,Tinymce 还提供了一系列高级功能,使得文本编辑更加灵活和便捷。本文将介绍如何在 Tinymce 中实现一些高级功能,并深入了解每个工具的使用。 Tinymce …

走向云原生 破局数字化

近年来,随着云计算概念和技术的普及,云原生一词也越来越热门,云原生成为云计算领域的新变量。行业内,华为、阿里巴巴、字节跳动等各个大厂都在“抢滩”云原生市场。行业外,云原生也逐渐出圈,出现在大众视野…

分布式(6)

目录 26.雪花算法如何实现的? 27.雪花算法有什么问题?有哪些解决思路? 28.有哪些方案实现分布式锁? 29.基于数据库如何实现分布式锁?有什么缺陷? 30.基于Redis如何实现分布式锁?有什么缺陷&…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1)resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由: php artisan route:list 2) compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…

thingsboard规则节点功能记录(自用)

本文是对【ThingsBoard源码级分析规则节点使用第一季】 https://www.bilibili.com/video/BV1CT411e7vt/?p4&share_sourcecopy_web&vd_source9a5ca7ed3cff97385fdab4b6188e485c 学习的一些记录,加深自己的理解,在此声明。 asset profile switch…

Zookeeper之Java客户端实战

ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有: ZooKeeper官方的Java客户端API。第三方的Java客户端API,比如Curator。 接下来我们将逐一学习一下这两个java客户端是如何操作zookeeper的。 1. ZooKe…