Python程序员鲜为人知但你应该知道的16个问题

这篇文章主要介绍了Python程序员代码编写时应该避免的16个“坑”,也可以说成Python程序员代码编写时应该避免的16个问题,需要的朋友可以参考。

  1. 不要使用可变对象作为函数默认值

代码如下:

这2个例子说明了什么? 字典,集合,列表等等对象是不适合作为函数默认值的. 因为这个默认值实在函数建立的时候就生成了, 每次调用都是用了这个对象的”缓存”. 我在上段时间的分享python高级编程也说到了这个问题,这个是实际开发遇到的问题,好好检查你学过的代码, 也许只是问题没有暴露。

可以这样改,代码如下:

  1. 生成器不保留迭代过后的结果

代码如下:

  1. lambda在闭包中会保存局部变量

代码如下:

这个问题还是上面说的python高级编程中说过具体原因. 其实就是当我赋值给my_list的时候,lambda表达式就执行了i会循环,直到 i =4,i会保留

但是可以用生成器,代码如下:

也可以坚持用list,代码如下:

有点不好懂是吧,在看看python的另外一个魔法,代码如下:

一个分组的函数,看起来很不好懂,对吧? 我们来解析下这里

代码如下:

  1. 在循环中修改列表项

代码如下:

思考一下,为什么 – 是因为你对列表的remove,影响了它的index

代码如下:

  1. IndexError – 列表取值超出了他的索引数

代码如下:

  1. 重用全局变量

代码如下:

  1. 拷贝可变对象

代码如下:

  1. python多继承

代码如下:

看起来都是很简单, 有次序的从底向上,从前向后找,找到就返回. 再看例子:

代码如下:

这也就涉及了MRO(Method Resolution Order):

代码如下:

MRO的算法有点小复杂,既不是深度优先,也不是广度优先

  1. 列表的+和+=, append和extend

代码如下:

  1. datetime也有布尔值

这是一个坑,代码如下:

  1. ‘==’ 和 is 的区别

我的理解是”is”是判断2个对象的身份, ==是判断2个对象的值,代码如下:

  1. 浅拷贝和深拷贝

我们在实际开发中都可以向对某列表的对象做修改,但是可能不希望改动原来的列表. 浅拷贝只拷贝父对象,深拷贝还会拷贝对象的内部的子对象,代码如下:

  1. bool其实是int的子类

代码如下:

  1. 元组是不是真的不可变?

代码如下:

这里有个不错的解释Python’s += Is Weird, Part II :

代码如下:

  1. python没有私有方法/变量? 但是可以有”伪”的

代码如下:

  1. 异常处理加else

代码如下:

以上就是我的全部分享,如果你跟我一样都喜欢python,也在学习python的道路上奔跑,欢迎你加入python学习群:839383765 群内每天都会分享最新业内资料,企业项目案例,分享python免费课程,共同交流学习,让学习变(编)成(程)一种习惯!

原文地址:https://blog.51cto.com/14186420/2370208

时间: 2024-10-28 03:05:24

Python程序员鲜为人知但你应该知道的16个问题的相关文章

Python程序员鲜为人知但你应该知道的16个问题(转)

add by zhj: 没找到原文出处,只能找到转载的,文中说有17个坑,其实是16个 全文如下 这篇文章主要介绍了Python程序员代码编写时应该避免的16个“坑”,也可以说成Python程序员代码编写时应该避免的17个问题,需要的朋友可以参考下 1. 不要使用可变对象作为函数默认值 代码如下: In [1]: def append_to_list(value, def_list=[]): ...: def_list.append(value) ...: return def_list ...

Python 程序员经常犯的 10 个错误

关于PythonPython是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得... 关于Python Python是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得它在快速应用开发中非常有吸引力,并且可作为脚本或胶水语言来连接现有的组件或服务.Python支持模块和包,从而鼓励了程序的模块化和代码重用. 关于这篇文章 Python简单易学的语法可能会使Python开发

人工智能风口,Python程序员的狂欢与企业主的哀嚎。

人工智能风口有多火?估计很多人已经感受到了,我在这里引用一下新智元的报道: 2017年短短不到三个月的时间,国内AI获投项目已有36个,千万级别融资占据半数以上. 嗯,就是那么霸道.两会刚刚结束,"人工智能"首次被列入政府工作报告,随之而来的是人工智能板块领跑大盘涨势,无疑,这一切将刺激人工智能在多个领域的全面发展. 大量融资的风口企业,绝对会把钱拿到招揽人才.而现在最流行的人工智能技术栈就是 TensorFlow 和 PyTorch,使用它们就是一份 Python 编程开发工作.一时

Python 程序员的 Golang 学习指南(III): 入门篇

基础语法 类型和关键字 类型 // 基础类型 布尔类型: bool 整型: int8,uint8,int16,uint16,int32,uint32,int64,uint64,int,rune,byte,complex128, complex64,其中,byte 是 int8 的别名 浮点类型: float32 . float64 复数类型: complex64 . complex128 字符串: string 字符类型: rune(int32的别名) 错误类型: error // 复合类型 指

Python程序员糟糕的一天

Python程序员糟糕的一天!! 第一张图是上午上班前,第二张图是下午下班前,一天下来就加了一个return! 为了方便你们看懂具体(主要)的改动,我加了第三张图(上班前)和第四张图(下班前). 第一张图(因图片显示不完整而看不清楚的,请在"在新标签页中打开图片"): 第二张图: 第三张图: 第四张图: 上班前代码: #!/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- """ Created

CSDN日报20170319——《人工智能风口, Python 程序员的狂欢与企业主的哀嚎》

[程序人生]人工智能风口, Python 程序员的狂欢与企业主的哀嚎 作者:赖勇浩 人工智能风口有多火?估计很多人已经感受到了,我在这里引用一下新智元的报道: "2017年短短不到三个月的时间,国内AI获投项目已有36个,千万级别融资占据半数以上." 嗯,就是那么霸道.两会刚刚结束,"人工智能"首次被列入政府工作报告,随之而来的是人工智能板块领跑大盘涨势,无疑,这一切将刺激人工智能在多个领域的全面发展. [深度学习]NeuralFinder :集成人工生命和遗传算法

Python程序员的10个常见错误(转)

add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/68256/ 本文由 伯乐在线 - datorhjaelten 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译小组. 关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Ra

【转】嵌入式程序员应该知道的16个问题

全面解析<嵌入式程序员应该知道的16个问题> ----Sailor_forever分析整理,[email protected] http://blog.csdn.net/sailor_8318/archive/2008/03/25/2215041.aspx 1.预处理器(Preprocessor) 2.如何定义宏 3.预处理器标识#error的目的是什么? 4.死循环(Infinite loops) 5.数据声明(Data declarations) 6.关键字static的作用是什么? 7.

Python程序员最常犯的十个错误

不管是在学习还是工作过程中,人都会犯错.虽然Python的语法简单.灵活,但也一样存在一些不小的坑,一不小心,初学者和资深Python程序员都有可能会栽跟头.本文是Toptal网站的程序员梳理的10大常见错误,非常有参考意义.大家在开发过程中需要格外注意.译文中如有理解错误的地方,可以在网站留言或通过微信公众号编程派回复. 常见错误1:错误地将表达式作为函数的默认参数 在Python中,我们可以为函数的某个参数设置默认值,使该参数成为可选参数.虽然这是一个很好的语言特性,但是当默认值是可变类型时