python的一些技巧和知识点(二)

2023-10-27

        书接上文,这篇再记录10条我觉得有用的,虽然没多少人看,但我相信还是会帮助到一部分人的,哪怕是个位数也好,此外,就当作自己的记录吧。没有看过第一篇的朋友点击这里

1.正确复制一个列表

        假设有一个列表a,之后需要复制一份儿这个列表,新列表记作b,假设将b作为b的备份也好,亦或是需要同时维护两个相同内容的列表也罢。那是直接b=a吗?让我们试一逝:

a = [x for x in range(5)]
print('a: ', a)
b = a
a[0] += a[4]
print('b: ', b)

        运行上面这一小段代码,可以得到输出:

a: [0,1,2,3,4]
b: [4,1,2,3,4]

         用b=a把a赋值给b,根据上一篇里说到的,a和b都是对这个列表的引用,对a进行修改,效果也会在b表现出来,让我们再看看a和b是不是同一个东西:

print(id(a))
print(id(b))
2226674051976
2226674051976

         可以看到a和b其实指向的都是同一个东西,在内存里都是同一块地方。正确的复制方法应该是:

b = [x for x in a] 
# or
b = [] + a

        使用空列表[]+a,python解释器会新建一个新的空列表,再把a的内容放到这个空列表之后,也就实现了列表的复制。

 2.熟练使用with

        相信一开始对文件操作时大家都肯定会打开文件后忘记关闭,这在学习初期写一些比较短的代码时问题不大,当然如果你能养成open之后记得close的习惯,那就更没有问题了。但还是墙裂推荐养成使用with关键字的习惯,它能帮你关闭你忘记关闭的文件,省时又省力,写出来的代码还好看,再结合上一篇提到的try语法,更能让你无后顾之忧。例如:

try:
    with open("something.txt","r") as f:
        for each_line in f:
            print(each_line)
except OSError as reason:
	    print("something wrong " + str(reason))

        不仅仅是文件,with还能帮助我们管理其他资源,例如需要用python访问数据库时,也可以用with作为资源的管理器,换言之,可迭代的资源(文件,数据库等)都可以用with来进行管理。 

 3.python的整数和字符 

        考虑下面几句代码,猜想结果会是什么:

a = 12
b = 12
print(id(a) == id(b))
a = 12345678
b = 12345678
print(id(a) == id(b))

        是两个True?可能有了前面的经验,会有人觉得会是两个True,但是其实是True和False,究其原因,python对小整数,有一个整数池,预先对这些小整数分配了空间,当需要用到小整数时,直接返回这些空间的引用就完事儿了,(至于这个小整数范围,我忘了,欸嘿)但对于大整数,会先分配空间,再返回引用给变量,同理,对于常用的单字符如a-z,python的机制也是事先准备了“池”。知道这个可能对写代码没啥实质性的帮助,但多少对python对象的机制有多一点了解。

4.可变对象和不可变对象

        考虑一个函数,参数是一个列表和一个元组,在这个函数里对它们进行修改,试问当这个函数返回后,原列表和元组会不会被改变?

def testListTuple(tup :tuple, lis :list):
    tup[0] = 2 * tup[0]
    lis[0] = 2 * lis[0]

a_tup = tuple((1,2))
b_list = list([1,2])
print(b_list)
testListTuple(a_tup, b_list)
print(b_list)

         运行,此代码会报错,因为元组类型是不可更改类型,只能读,不能在函数里写,

TypeError: 'tuple' object does not support item assignment

        将第二行修改tup的代码注释掉,运行,可以经过函数后,b_list变量被修改了,这一点可能大多习惯C/C++函数传值类型参数的同学会比较不习惯,还是因为“一切皆为对象的思想”,此处传递给函数的列表仍然是列表的引用,就跟C++的传引用符&一样,是对变量本身直接进行修改的,python的可变对象只有字典(dictionary)和列表(list)类型,其余都是不可变,因此如果需要用一个函数操作一个列表,而不希望对这个列表本身产生影响,就需要手动复制一个列表再传递给那个函数。有时候莫名其妙的bug可能就是由这个引起的。

5.没了,但是!

      写到这发现以前做的初学笔记好像就这些了,好像确实有点短,如果再找到另外的笔记,会继续补上。希望对你有用。

        不出意外找到另外的笔记的话,三天内更新第三篇,如果对你有帮助的话,记得点个赞哦,您的支持就是对我最大的鼓励。

第三篇加量更新,欢迎各位捧场:

python编程技巧和可能注意的地方(三)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的一些技巧和知识点(二) 的相关文章

  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件

    我已经在服务器上设置了 postfix 以及 openDKIM 当我跑步时 echo Testing setup mail s Postfix test my email address 我收到电子邮件 邮件标题中有一个DKIM Signa
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • 嵌入式系统中的“四个地址”

    1 物理地址 计算机在运行程序时 需要对代码指令及相关数据进行保存 而这些数据将会保存到内存 包括RAM和ROM 中 为了能够在读取数据时 可以直接找到数据的位置所在 因此 会对内存进行编号 从0开始顺序编号 直到其支持的最大存储单元 物理
  • 防止SQL注入的五种方法

    一 SQL注入简介 SQL注入是比较常见的网络攻击方式之一 它不是利用操作系统的BUG来实现攻击 而是针对程序员编程时的疏忽 通过SQL语句 实现无帐号登录 甚至篡改数据库 二 SQL注入攻击的总体思路 1 寻找到SQL注入的位置 2 判断
  • Topaz Photo AI for Mac v1.3.1,图像智能ai降噪软件

    Topaz Photo AI是一款适用于Mac的图像处理软件 它使用人工智能技术对照片进行编辑和优化 该软件提供了多种强大的功能 帮助用户轻松地改善图像质量 并实现自定义的效果 Topaz Photo AI支持多种文件格式 包括JPEG T
  • css web页面实现一个弹窗

    div 基本层级 div class pc invest join container div class bg wrap div class place hold div div class top container div class
  • go 类型断言

    1 什么是类型断言 由于 interface 是 一般类型 不是具体类型 如果要转成具体类型 就需要使用类型断言 直接将 x 的值 赋给 a 是不可以的 编译前检查都过不去 断言后可成功赋值 输出结果为 5 2 带检查的类型断言 类型断言有
  • 继承和方法重写

    目录 继承的基本概念 super关键字 1 使用super关键字调用父类成员 子类对象 实例化子类对象 方法重写 方法重写特点 继承的基本概念 1 继承是面向对象的三大特征之一 继承可以解决编程中代码冗余的问题 是实现代码重用的 重要手段之
  • 第五章、ROS常用组件

    第五章 ROS常用组件 TF坐标变换 实现不同类型的坐标系之间的转换 rosbag 用于录制ROS节点的执行过程并可以重放该过程 rqt 工具箱 集成了多款图形化的调试工具 可实现的案例 roslaunch turtle tf2 turtl
  • 熄灯问题

    公众号 CppCoding 题目描述 include
  • VMD-LSTM的数据回归预测(主要应用于风速,负荷,功率)

    VMD LSTM预测 clc clear all close all warning off restoredefaultpath tic 导入数据 ff xlsread windspeed xls B2 B1001 ff ff data
  • 利用lambda表达式为槽函数传递参数20221021

    利用lambda表达式为槽函数传递参数 lambda是匿名函数 lambda 参数 函数体 fun lambda print 我是没有参数的lambda函数 fun 我是没有参数的lambda函数 fun xy lambda x y pri
  • @那些想要转行AI的人:送你一份人工智能入门指南

    人工智能是什么 人工智能为何重要 我们应该畏惧人工智能吗 为什么突然之间所有人都在谈论人工智能 你可能会从网上知道人工智能如何为亚马逊和Google的虚拟助理提供支持 或者人工智能如何一步步地取代所有的工作 有争议的 但是这些文章极少很好的
  • Qt(2):MOC文件解析

    在Qt下 从QObject派生的类都会生成moc 文件 1 比如现在有2个文件 qmyobject h和qmyobject cpp 它里面有一个类QMyObject 记为版本A cpp view plain copy print class
  • hadoop中的ssh无密码登录配置

    目标 在配置hadoop分布式安装过程中 需要配置ssh的无密码登录 在组建hadoop集群的时候 需要多台实体机进行通信 发送或者读取数据 namenode和datanode之间 就是借助ssh 在通信过程中如果需要操作人员频繁输入密码是
  • 域名服务器从k8s访问不稳定,使用云厂商托管K8S时容器域名解析注意事项

    云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项 使用云厂家提供托管式Kubernetes Pod的域名解析参数 通过界面创建Pod的话 可能厂商界面没有开放dnsConfig配置 采用了一些默认值 在使用时候 需要了解清
  • 人工智能与伦理问题浅谈

    第一章 绪论 一 提出问题 人工智能 Artificial Intelligence 缩写为AI 一词 是在1956年的达特茅斯会议上被首次提出来的 作为一门新兴的交叉学科 人工智能在当今脑科学 认知科学飞速发展的基础下 被称为本世纪三大科
  • element中table组件使用多级表头后在点击事件中为变量赋值会出现抖动

    出现情况 一般出现在表头中设置了v if v if的表头在更新数据时自动重新计算一次宽高 解决方法 为表格设置doLayout方法 更新数据前重写表格样式 不在重新计算宽高 beforeUpdate this nextTick gt 在数据
  • springboot国际化配置中英文切换

    1 新建项目 第一步新建springboot项目 勾选web依赖 或者后面进入在pom xml中加入也可以 2 项目结构 项目pom xml
  • 今日笔记:关于Symbol(Symbol.iterator)的使用笔记

  • 【问题及解决】win11 vmware创建虚拟机之后电脑和虚拟机都变得特别卡

    由于之前用的是wsl ubuntu发现编译SDK一直失败 别人提示改用VMware创建虚拟机 所以在win上的这里 控制面板 程序 启用或关闭windows功能 关闭了原来勾选的 适用于Linux的Windows子系统 和 虚拟机平台 并且
  • python的一些技巧和知识点(二)

    书接上文 这篇再记录10条我觉得有用的 虽然没多少人看 但我相信还是会帮助到一部分人的 哪怕是个位数也好 此外 就当作自己的记录吧 没有看过第一篇的朋友点击这里 1 正确复制一个列表 假设有一个列表a 之后需要复制一份儿这个列表 新列表记作