Python新手易混淆点,快来看看,有没有你不知道的!

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在这里插入图片描述

python语言里面有一些小的坑,特别容易弄混弄错,初学者若不注意的话,很容易坑进去,下面我给大家深入解析一些这几个坑,希望对初学者有所帮助,需要的朋友可以参考学习,下面来一起看看吧。

一、i+=1 不等于++i

初学者对Python语言不是特别了解的话,又正好有c++,java的语言背景,很容易把++i和i+=1弄混

先来看一个小例子:

i=0
mylist=\[1,2,3,4,5,6\]
while i <len(mylist):
 print(mylist\[i\])
 ++i

这段代码会想当然的认为,没有啥问题啊,一个循环输出,i不断的+1,蛮对的呀.其实不是的,这个代码会一直输出1,一个死循环.因为Python的解释器会将++i操作为+(+i) .其中+表示是正数符号,对于–i也是类似的.

print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1

这下明白了++i虽然在Python语法是合法的,但是并不是我们理解的自增的操作.

二、分清楚==和is的用法

在判断字符串是否相等的时候,初学者特别会弄混is和==,这样的结果是程序在不同的情况下表现不同:

比如先看一个简单的例子:

a='Hi'
b='Hi'
print(a is b)
>>>True
print(a==b)
>>>True #看起来is和==好像是一样的

我们再看第二个例子:

str1='Wo shi yi ge chi huo'
str2='Wo shi yi ge chi huo'
print(str1 is str2)
>>>False#is的结果是False
print(str1==str2)
>>>True #==的结果为True,看二者不一样了吧

第三个例子

str3='string'
str4=''.join(\['s','t','r','i','n','g'\])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的结果是False
print(str3==str4)
>>>True #==的结果为True,看二者不一样了吧

这就是很容易混淆初学者的地方,感觉很奇怪,为什么有的时候is和==输出相同,有的时候不同呢.好我们来一探究竟:

我们用内置的id()这函数,这个函数用来返回对象的内存地址,查一下就清楚了

is是对象的标示符,用来比较两个对象的内存空间是不是一样,是不是用的同一块空间地址,而==是比较两个对象的内容是否相等.

三、连接字符串特别是大规模的字符串,最好用join 而不是+

字符串处理的时候,最常用的是连接,Python中的字符串与其他的语言有一点不同,它是不可变对象,一旦创建不能改变.而这个特性直接会影响到Python中字符串连接的效率.

用+连接字符串:

str1,str2,str3='test','string','connection'
print(str1+str2+str3)
>>>test string connection

用join连接字符串

str1,str2,str3='test ','string ','connection'
print(''.join(\[str1,str2,str3\]))
>>>test string connection

但是若是连接大规模的字符串,比如要连接10万左右的字符串的时候,join的方法效率就会快很多(甚至相差百倍).比如下面这10万个字符串连接.

long\_str\_list=\['This is a long string' for n in range(1,100000)\]

原因是因为若要连接字符串:S1+S2+S3+…+SN,由于字符串是不可变的对象,执行一次就要申请一块新的内存,这样的话在N个字符串连接的过程中,会产生N-1个中间结果,每产生一个中间结果就要申请一次内存,这样会严重影响执行效率.

而join不一样,它是一次性申请总的内存,然后把字符串里面的每一个元素复制到内存中去,所以join会快很多.

因此,字符串的连接,尤其是大的字符串处理,最好用join

四、不要在for 和while 循环后面写else 块

Python 提供了一种很多编程语言都不支持的功能,那就是可以在循环内部的语句块后面直接编写else 块。比如:

for i in range(3):
 print('Loop %d'%i)
else:
 print('Else block')
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block
  • 这种else 块会在整个循环执行完之后立刻运行。既然如此,那它为什么叫做else 呢?为什么不叫and ?在if/else 语句中,else 的意思是:如果不执行前面那个if 块,那就执行else 块。
  • 同理try/except/else 也是如此,该结构的else 的含义是:如果前面的try 块没有失败,那就执行else 块。
  • try/finally 同样非常直观,这里的finally 的意思是:执行过前面的try 块之后,不管如何总是执行finally块。

问题来了对于刚接触Python 的程序员可能会把for/else 结构中的else 块理解为:如果循环没有正常执行完,那就执行else 块。

实际上刚好相反——在循环里用break语句提前跳出,会导致程序不执行else 块,这一点会有点绕.对于不熟悉for/else 的人来说,会令阅读代码的人感到相当费解.


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

从字节码角度分析i++与++i以及i+=1与i=i+1运算操作 变量的自增操作,如 i++ ++i i+=1 i=i++ 这些自增操作的算术运算可能计算的最后结果是一样,仅从代码层面很难看出它们的异同。下面将从字节码指令的角度去分析这些操作的同之处。 i++与++i的区别 如果只是进行变量的自增的运算,涉及赋值操作,那么i++和++i在字节码指令层面上是执行相同的指令 可以看出i++与++i的字节码指令是一样的,都是先将操作数10压入操作数栈,然后保存到局部变量表索引为1的位置,也就是保存变量i的位置,然后将局部变量表索引为1的位置的变量的值加1。 但是如果 阅读详情

相关推荐

混淆矩阵含义及python代码实现

一、分类评估指标中定义的一些符号含义 TP:将正类预测为正类数,真实为0,预测也为0 FN:将正类预测为负类数,真实为0,预测为1 FP:将负类预测为正类数, 真实为1,预测为0 TN:将负类预测为负类数,真实为1,预测也为1 二、混淆矩阵定义及表示含义 混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇...

IMWTJ123的博客 1万+

Python中i += 1与i = i + 1有什么区别?

对于可变对象类型 += 改变内存地址,在原有实例上增加1操作。对于可变对象类型,两种计算都会开辟新的内存空间。而=+则是开辟新的内存空间进行增1操作。

灰灰Coding的博客 4168

Python代码加密混淆

python作为一种解释型语言,源代码加密本身比较困难。但有时候我们在发布一款python产品时又必须考虑到代码的加密性,以避免源代码泄露。为此,我查阅了一些资料,研究了几种python代码加密的常见方式,在此记录一下。 源代码加密 (一)py脚本编译成pyc二进制文件 编译命令: python -m py_compile file.py pyc文件是一个二进制文件,但是可以被很轻松的被...

weixin_42625143的博客 7129

python中i+=1等于++i

1. i+=1等于++i python解释器会将++i解释为+(+i),同理将--i解释为-(-i)。其中+表示正数符号而是自增,-表示负数符号而是自减。这样有: >>>-2 -2 >>>--2 2 >>>-----2 -2 1 2 3 4 5 6 因此你需要明白++i在python中语法上时合法的,但并是我们理解的通...

微电子学与固体电子学-俞驰 6497

python i+=1与i=i+1的区别

''' 探索 i += 1 与 i = i+1 的区别 ''' ''' 对于可变对象int str tuple 都会创建一个新的内存地址 ''' i = 0 print(id(i)) # 1564271360 i += 1 print(id(i)) # 1564271376 i = i + 1 print(id(i)) # 1564271392 ''' 对于可变类型对象 i+=1会...

qq_42933123的博客 2万+

i=i+1和i+=1以及i++和++i详解

原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中**++i比i++效率要高些**。左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有是左值的表达式的值。i++是先传递结果后加,而++i刚好相反,是先加后传递结果。

大聪明的博客 9952

1056 混淆

题目描述: 给定一个数字 N,当它满足以下条件的时候返回 true: 原数字旋转 180° 以后可以得到新的数字。 如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 。 2, 3, 4, 5, 7 旋转 180° 后,得到的是数字。 混淆数 (confusing number) 在旋转180°以后,可以得到和原来同的数,且新数字的每一位都是有效的。 示例 1: 输入:6 输出:true 解释: 把 6 旋转 180° 以后得到 9,9 是有效数字且 9

weixin_44171872的博客 508

python及numpy,pandas混淆

初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝可思议的简单命令就可以完成非常复杂的计算,但是真正接触一下就发现,python比matlab有很多一样的特性。首先python的工具包(类似于C的库函数)非常多,很多功能都有重复,所以选好包很重要,最简单的选择方法就是用时下最流行的包,社区比较活跃,遇到问题网上一搜很多答案,而且更新和维护也比较好。在数值计算中常用的包就

几何君的算法天空 5512

ZFJObsLib-iOS代码混淆工具-马甲包混淆工具(Python脚本混淆iOS工程)

本次更新V1.4.4(2020年01月31日) 1.适配cocos2d项目; 2.优化类名混淆重名问题; 3.优化代码和项目结构; 更新说明 https://gitee.com/zfj1128/ZFJObsLib_dmg ----------------------------------------分割线-------------------------------------...

ZFJ_张福杰 4万+

Python代码混淆工具,Python源代码保密、加密、混淆

简介 介绍Python代码混淆工具,可以对源代码进行混淆处理,保证功能变但代码基本可读。 注意大部分混淆工具都是可逆的,例如编译生成pyc文件可以用https://github.com/wibiti/uncompyle2来解码。 pyminifier pyminifier是一个对Python文件进行压缩、混淆的工具,项目地址https://github.com/liftoff/p...

huanghong6956的博客 3万+

Python汇总

本文总结了Python初学者常见的10大,包括缩进错误、变量未定义使用、字符串与数字相加、列表浅拷贝陷阱、循环变量作用域、默认参数可变对象、对象比较混淆、除法运算符差异、异常处理缺失以及模块命名冲突。每个错误都配有典型场景和避坑指南,如使用4个空格缩进、str()转换数字、列表copy()方法、避免可变默认参数等。掌握这些常见问题的解决方案,能帮助新手更快适应Python的语法特性,提高编程效率和质量。

2201_75952812的博客 2138

Python混淆

is 和 == 的区别 前言:is,== 都是用来比较两个对象是否相等的运算符,可是它们是依据什么来判断是True 还是 False的呢? 一、****== a = [1, 2, 3] b = [1, 2, 3, 4] print(id(a), id(b)) # 5005896 , 5005960 print(a == b) # False c = a.copy() # [1, 2, 3] ...

weixin_42305250的博客 208

大数据最全Python混淆的知识_python编程

11.update函数:将一个字典添加到另外一个字典的末尾,把两个字典合并到一个字典,因为字典的key唯一性,所以当字典合并时候,key如果存在就添加key,value,存在就修改value值。如果字典中出现相同的 key 值,只有最后一个 key / value 有效,前面相同的 key / value 会被覆盖,*12.max(dict1)----->获得的是键的最大值,同理min(dict1)5.同类型的数据,计算机在底层给存储该数据分配的默认空间是一样的。增加一个元素在列表的最后。

2401_84166327的博客 318

Python混淆的知识_python编程

11.update函数:将一个字典添加到另外一个字典的末尾,把两个字典合并到一个字典,因为字典的key唯一性,所以当字典合并时候,key如果存在就添加key,value,存在就修改value值。如果字典中出现相同的 key 值,只有最后一个 key / value 有效,前面相同的 key / value 会被覆盖,*12.max(dict1)----->获得的是键的最大值,同理min(dict1)5.同类型的数据,计算机在底层给存储该数据分配的默认空间是一样的。= 对比的是两个变量的值。

2301_82241942的博客 389

Python代码混淆技术

Python代码混淆技术

qq_41527980的博客 5455

python】在线代码混淆方案及注意事项_在线解混淆

main.py。

2401_84139908的博客 2513

Python 5个比较容混淆

Python 5个比较容混淆

python茶水实验室 1161

Python 项目代码混淆

Python项目中,代码混淆是一种保护源代码被轻理解、逆向工程或盗用的有效手段。通过变量名混淆、字符串加密、控制流混淆、使用混淆工具以及代码注释和文档混淆等方法,我们可以对Python代码进行一定程度的混淆,增加其阅读的难度。但在实际应用中,我们需要注意要过度混淆要依赖混淆来保证安全性、混淆后的测试、保留必要的注释和文档以及选择合适的混淆工具和策略等注意事项。通过合理的使用代码混淆技术,我们可以更好地保护我们的Python项目代码的安全性。

Python老吕的博客 2560

Python混淆知识

<br /><br />每门编程语言都有混淆的部分,下面列举出一些Python混淆知识。== 和 is 的区别<br />在Python中,”==” 操作符测试值的相等性; “is”表达式测试对象的一致性,即是否指向同一个对象。 <br /> list1 = [1,('a',3)] list2 = [1,('a',3)] list1 == list2, list1 is list2   #(True,False)<br />说明:list1和list2通过了”==”测试 (他们的值相等,因为它

wwaiym的专栏 1066
上一篇: 详解Python利用Pandas和 NumPy 库来进行数据清洗
下一篇: 浅谈四种用Python实现数据可视化的快速简便方法
一秋的编程笔记
博客等级 码龄3年 1574粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值