python工作中遇到的坑
1. 字典拷贝
有些场景下,需要对字典拷贝一个副本。这个副本用于保存原始数据,然后原来的字典去参与其他运算,或者作为参数传递给一些函数。
例如,
>>> dict_a = {"name": "John", "address":"221B Baker street"}
>>> dict_b = dict_a
利用赋值运算法把dict_a赋值给dict_b之后,这2个变量的值是相同的。
你或许会拿着dict_b去参与其他的运算,例如,更新/添加键值对。
但事实却不是你认为的那样,如果你更新或者编辑dict_b,dict_a也会随之改变,详细内容可以了解一下Python可变对象与不可变对象。
下面来看一下效果:
>>> dict_b["age"] = 26
>>> dict_b
{'address': '221B Baker street', 'name': 'John', 'age': 26}
>>> dict_a
{'address': '221B Baker street', 'name': 'John', 'age': 26}
你会发现,给dict_b添加了一个age:26键值对,dict_a也更新了,这样,我们留一个副本就没有任何意义了。
针对这个问题,可以用Python中的浅拷贝copy、深拷贝deepcopy来解决,下面来看一下,
>>> dict_c = dict_b.copy()
>>> dict_c["location"] = "somewhere"
>>> dict_c
{'address': '221B Baker street', 'name': 'John', 'age': 26, 'location': 'somewhere'}
>>> dict_b
{'address': '221B Baker street', 'name': 'John', 'age': 26}
2. 字典键值 True和1
>>> dict_a = dict()
>>> dict_a
{}
>>> dict_a[1] = "apple"
>>> dict_a[True] = "mango"
>>> dict_a[2] = "melon"
>>> dict_a
{1: 'mango', 2: 'melon'}
你注意到发生了什么吗?
输出字典之后,发现键值True没有了!
这是因为,在Python中,True相当于1、False相当于0,因此,在dict_a[True] = "mango"这行代码里,它把原来键值为1给替换了。
可以来验证一下True相当于1的说法:
>>> isinstance(True, int)
True
>>> True == 1
True
3.驻留字符串
在某些情况下,Python尝试重用现有的不可变对象。
字符串驻留就是这样一种情况。来看一个示例对比,
>>> a = "gmail"
>>> b = "gmail"
>>> a is b
True
然后修改一下,
>>> a = "@gmail"
>>> b = "@gmail"
>>> a is b
False
是不是很神奇?我们只加了一个@符号,结果却截然不同!
在第一个实现方法中,尝试创建两个不同的字符串对象。但是当检查两个对象是否相同时,它返回True。
这是因为python并没有创建另一个对象b,而是将b指向了第一个值gmail,换句话说它被驻留了。
但是,如果字符串中除ASCII字符、数字、下划线以外的其他字符时,它则不会驻留,这样的话,它就不会再指向@gmail。
这里需要注意一下,is与==的运算是不同的。
==用于判断值是否相等,is不仅需要值相等,还需要指向同一个对象。
>>> a = "@gmail"
>>> b = "@gmail"
>>> a is b
False
>>> a == b
True
4. 默认参数只计算一次
>>> def func(a, lst=[]):
... lst.append(a)
... return lst
...
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]
这里发生了什么?
我在func中给了一个默认参数[],然后先后调用2次func函数。
按照我们常规的认识,这2次调用是分开的,第1次调用输出[1],第二次应该输出[2],为什么第2次调用时列表里竟然还保留着第1次调用时的值?
这是因为,在Python中,默认参数只会被计算一次。第1次调用func(1)时,它用到了默认参数。但是,第2次调用就不会再去计算默认参数,直接在[1]的基础上附加一个值。
相关文章:
python工作中遇到的坑
1. 字典拷贝 有些场景下,需要对字典拷贝一个副本。这个副本用于保存原始数据,然后原来的字典去参与其他运算,或者作为参数传递给一些函数。 例如, >>> dict_a {"name": "John", "address&q…...
中职网络安全wire0077数据包分析
从靶机服务器的FTP上下载wire0077.pcap,分析该文件,找出黑客入侵使用的协议,提交协议名称 SMTP 分析该文件,找出黑客入侵获取的zip压缩包,提交压缩包文件名 DESKTOP-M1JC4XX_2020_09_24_22_43_12.zip 分析该文件&…...
引领未来:在【PyCharm】中利用【机器学习】与【支持向量机】实现高效【图像识别】
目录 一、数据准备 1. 获取数据集 2. 数据可视化 3. 数据清洗 二、特征提取 1. 数据标准化 2. 图像增强 三、模型训练 1. 划分训练集和测试集 2. 训练 SVM 模型 3. 参数调优 四、模型评估 1. 评估模型性能 2. 可视化结果 五、预测新图像 1. 加载和预处理新图像…...
240707-Sphinx配置Pydata-Sphinx-Theme
Step A. 最终效果 Step B. 为什么选择Pydata-Sphinx-Theme主题 Gallery of sites using this theme — PyData Theme 0.15.4 documentation Step 1. 创建并激活Conda环境 conda create -n rtd_pydata python3.10 conda activate rtd_pydataStep 2. 安装默认的工具包 pip in…...
华为如何做成数字化转型?
目录 企业数字化转型是什么? 华为如何定义数字化转型? 为什么做数字化转型? 怎么做数字化转型? 华为IPD的最佳实践之“金蝶云” 企业数字化转型是什么? 先看一下案例,华为经历了多次战略转型…...
Python | Leetcode Python题解之第229题多数元素II
题目: 题解: class Solution:def majorityElement(self, nums: List[int]) -> List[int]:cnt {}ans []for v in nums:if v in cnt:cnt[v] 1else:cnt[v] 1for item in cnt.keys():if cnt[item] > len(nums)//3:ans.append(item)return ans...
TCP/IP模型和OSI模型的区别(面试题)
OSI模型,是国际标准化组织ISO制定的用于计算机或通讯系统间互联的标准化体系,主要分为7个层级: 物理层数据链路层网络层传输层会话层表示层应用层 虽然OSI模型在理论上更全面,但是在实际网络通讯中,TCP/IP模型更加实…...
UML建模工具Draw.io简介
新书速览|《UML 2.5基础、建模与设计实践 Draw.io是一个非常出色的免费、开源、简洁、方便的绘图软件,利用这款软件可以绘制出生动有趣的图形,包括流程图、地图、网络架构图、UML用例图、流程图等。它支持各种快捷键,免费提供了1000多张画图…...
qt udp 协议 详解
1.qt udp 协议链接举例 在Qt框架中,使用UDP协议进行通信主要依赖于QUdpSocket类。以下是一个基于Qt的UDP通信示例,包括UDP套接字的创建、绑定端口、发送和接收数据报的步骤。 1. 创建UDP套接字 首先,需要创建一个QUdpSocket对象。这通常在…...
ubuntu 换源
sudo apt update 错误如下 Ign:1 http://security.ubuntu.com/ubuntu focal-security InRelease Ign:2 http://us.archive.ubuntu.com/ubuntu focal InRelease Err:3 http://security.ubuntu.com/ubuntu focal-security Release SECURITY: URL redirect target…...
基于ssm的图书管理系统的设计与实现
摘 要 在当今信息技术日新月异的时代背景下,图书管理领域正经历着深刻的变革,传统的管理模式已难以适应现代社会的快节奏和高要求,逐渐向数字化、智能化的方向演进。本论文聚焦于这一转变趋势,致力于设计并成功实现一个基于 SSM&…...
python压缩PDF方案(Ghostscript+pdfc)
第一步:安装Ghostscript Ghostscript是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。它可以作为文件格式转换器,如PostScript和PDF转换器,也为编程提供API。[1]PDF压缩本质…...
kotlin 基础
文章目录 1、安装 Java 和 Kotlin 环境2、程序代码基本结构3、变量的声明与使用4、数据类型5、数字类型的运算1)布尔类型2)字符类型3)字符串类型 6、 选择结构1)(if - else)2) 选择结构(when&am…...
Spring中的适配器模式和策略模式
1. 适配器模式的应用 1.1适配器模式(Adapter Pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 1.2 AOP中的适配器模式 在Spring的AOP中,使用Advice&#…...
书生浦语大模型实战营---Python task
任务一 请实现一个wordcount函数,统计英文字符串中每个单词出现的次数,通过构建defaultdict字典,可以避免插入值时需要判断值是否存在 from collections import defaultdictdef word_count(text):#构建缓存reval defaultdict(int)words t…...
Chrome 127内置AI大模型攻略
Chrome 127 集成Gemini:本地AI功能 Google将Gemini大模型整合进Chrome浏览器,带来全新免费的本地AI体验: 完全免费、无限制使用支持离线运行,摆脱网络依赖功能涵盖图像识别、自然语言处理、智能推荐等中国大陆需要借助魔法,懂都懂。 安装部署步骤: 1. Chrome V127 dev …...
Yolo的离线运行
Yolo 的离线运行 运行环境准备 比较简单的办法是通过官方的github获取到对应的yolo运行需要的python环境-requirement.txt.通过如下地址可以获取到对应的文件和相应的说明以及实例。 Yolov5 git地址 为了让程序能本地话运行,我们还需要获取相应的模型权重文件&…...
【矿井知识】煤矿动火作业
简介 煤矿动火作业是指在煤矿环境下进行的任何形式的使用火源的工作。这些工作可能包括焊接、切割、加热、打磨等操作,这些操作都可能产生火花、火焰或高温,因此被称为动火作业。 动火作业的主要类型 焊接:包括电弧焊、气焊等,…...
设计模式使用场景实现示例及优缺点(结构型模式——享元模式)
结构型模式 享元模式(Flyweight Pattern) 享元模式,作为软件设计模式中的一员,其核心目标在于通过共享来有效地支持大量细粒度对象的使用。在内存使用优化方面,享元模式提供了一种极为高效的路径,尤其在处…...
开放式耳机哪款比较好?五款开放式耳机测评推荐
开放式耳机真的越来越火了,真的好多人问我,开放式耳机应该怎么选啊,所以这次我亲自测评了几款开放式耳机,作为数码博主这一篇文章就教大家如何挑选开放式耳机,当然最后还有五款开放式耳机的推荐给到大家,话…...
基于python的一线式酒店管理系统
目录 同行可拿货,招校园代理 ,本人源头供货商功能模块设计技术实现要点扩展功能建议异常处理机制 项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 同行可拿货,招校园代理 ,本人源头供货商 功能模块设计 前台管理模块 客房预…...
从外卖配送到大疆无人机:经纬度距离计算在真实业务场景中的5种应用实践
经纬度计算在商业场景中的实战应用:从路径优化到智能决策 当你在手机上下单一份外卖,15分钟后热腾腾的餐食准时送达;当无人机精准降落在指定位置,完成最后一公里配送;当共享单车APP为你推荐最优停车点——这些场景背后…...
OpenSubdiv高级特性:特征自适应细分与硬件曲面细分
OpenSubdiv高级特性:特征自适应细分与硬件曲面细分 【免费下载链接】OpenSubdiv An Open-Source subdivision surface library. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSubdiv OpenSubdiv是一款强大的开源细分曲面库,为3D建模和动画提…...
解锁欧空局10米土地利用数据:从注册到实战应用全流程解析
1. 欧空局10米土地利用数据简介 第一次接触欧空局WorldCover平台的朋友可能会被这个10米分辨率的土地利用数据惊艳到。作为一个长期和遥感数据打交道的从业者,我可以很负责任地说,这个数据集在精度和实用性上确实很能打。简单来说,它把全球地…...
React Native Keyboard Controller部署指南:生产环境最佳配置
React Native Keyboard Controller部署指南:生产环境最佳配置 【免费下载链接】react-native-keyboard-controller Keyboard manager which works in identical way on both iOS and Android 项目地址: https://gitcode.com/gh_mirrors/re/react-native-keyboard-…...
CD3抗体如何成为双抗药物的核心靶点?
一、双特异性抗体药物为何发展迅猛?双特异性抗体(BsAb)是一类能够同时特异性结合两个不同抗原或抗原表位的人工工程抗体。其通过同时阻断两个靶点介导的生物学功能,或将表达不同抗原的细胞拉近,实现单一抗体难以完成的…...
Graphormer实际作品分享:10个典型分子(CCO/c1ccccc1/C=O等)预测结果集
Graphormer实际作品分享:10个典型分子预测结果集 1. 模型介绍与核心能力 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个模型在OGB(Open Graph Benchmark)和PCQM4M等分子基准测试…...
Qwen3-14B惊艳效果展示:RTX 4090D上流畅运行14B模型的真实体验
Qwen3-14B惊艳效果展示:RTX 4090D上流畅运行14B模型的真实体验 1. 开箱即用的高性能体验 当我第一次在RTX 4090D上启动这个Qwen3-14B私有部署镜像时,最直接的感受就是"快"。从执行启动命令到WebUI界面完全加载,整个过程不到2分钟…...
华三中小型企业二层组网配置案例一(单ISP+单链路)
1. 组网拓扑某企业内部共划分 4 个业务部门,为实现部门间网络隔离与安全访问控制,分别规划独立网段:192.168.10.0/24、192.168.20.0/24、192.168.30.0/24、192.168.40.0/24。核心交换机作为三层网关,配置各网段 VLANIF 接口地址&a…...
HBuilderX+Android Studio本地离线打包Uniapp安卓Apk全流程解析
1. 为什么需要本地离线打包? 每次用HBuilderX云打包都要排队等半天?项目紧急上线时看着进度条干着急?作为过来人,我太懂这种痛苦了。去年我们团队开发医疗问诊App时,高峰期云打包排队超过2小时,差点耽误版…...
