Python语言学习讲解四:常见的几个坑
来源:互联网 发布:恢复出厂设置了怎么恢复数据 编辑:程序博客网 时间:2024/06/05 04:51
版权声明:本文为博主原创文章,未经博主允许不得转载。
1、混用空格和tab
python是严格缩进的,全用空格或者全用tab就没错,如果是混用就会有问题。如果用vim开发的话,一般是在配置中把tab转成4个空格。
2、用可变对象作为默认参数
def f(a=[]):
a.append('kzc')
return a
>>> f()
['kzc']
>>> f()
['kzc', 'kzc']
>>> f()
['kzc', 'kzc', 'kzc']
3、同一个引用
>>>a = range(3)
>>>a
[0, 1, 2]
>>>b = a
>>>b
[0, 1, 2]
>>>b[0]='kzc'
>>>b
['kzc', 1, 2]
>>>a
['kzc', 1, 2]
可以看到,改变b时,a也跟着变了。这是因为赋值的是引用。其实a和b指向同一个对象。
可以用b= a[:]或者b = a+[]解决。
上面的解决方法是浅拷贝的,如果列表a比较复杂,比如列表里面嵌套列表,就需要深拷贝才能彻底解决了。
即利用copy模块,b= copy.deepcopy(a)。
顺带,字典也是引用。
4、遍历的时候改变值
>>>arr = ['a','b','c','kzc']
>>>for i in arr:
....: if i!='kzc':
....: arr.remove(i)
....:
>>>arr
['b', 'kzc']
为什么结果会是这个呢,我可是要把不等于'kzc'的元素删了的。
这是因为遍历的跟删除的是同一个引用,同一个对象。
一开始,遍历到第一个元素'a','a'不满足被删掉,arr列表就变成了['b','c','kzc']了,然后i继续往下遍历到第二个元素,注意,这时候arr列表被改变了,第二个元素成了'c'了,于是'b'就漏掉了。
5、不同类型也能比较
尤其是字符串跟整型搞混,
>>>'32'>63
True
由于存到redis数据库中的都是字符串,有时候取出来的时候忘记转成整型,造成损失。
有一次操作玩家的数值的时候,本来是要加32*3即96的,结果成了'32'*3即'323232'了。
6、元组的陷阱
>>>[i for i in ['foo']]
['foo']
>>>[i for i in ('bar')]
['b', 'a', 'r']
元组只有一个元素时必须加逗号
尽量用列表吧,不要因为元组的效率比列表好,除非是频繁的调用,次数很多,否则这点性能是微不足道的。
- Python语言学习讲解四:常见的几个坑
- 飘逸的python - 常见的几个坑
- 对python几个常见的小函数进行学习使用
- Python语言学习讲解十九: 异常信息的详细获取
- Python语言学习讲解十二:nonlocal关键字
- C语言常见的几个排序
- C语言的几个常见冷知识
- Python常见函数讲解
- python学习笔记(四), python语言基础
- Python语言学习讲解三:详解Python中的split()函数的使用方法
- 新手学习C语言常见几个错误以及处理方式
- 四、golang类型讲解--go语言学习笔记
- Python语言学习讲解十三:python之多进程和多线程
- MediaRecorder的几个常见坑
- Python学习的几个网站
- Python语言学习讲解二:@staticmethod和@classmethod的作用与区别
- Python语言学习讲解六:增强的格式化字符串format函数
- Python语言学习讲解七:使用traceback获取详细的异常信息
- SQL Server Express连接字符串
- mysql 有权限,不能增删改 SET SQL_SAFE_UPDATES=0;
- WebService到底是什么?
- 《OpenCV》Part4 OpenCV3.1.0 提取视频中的每一帧
- 一个DWORD类型存储多种数据
- Python语言学习讲解四:常见的几个坑
- 新的起点,从C基础开始(一)
- html5解决大文件断点续传
- /etc/profile 简介
- 【jmeter测试--自带录制脚本功能】
- 使用winform中的fileSystemWater与EMGU结合实现文件监控和字母识别
- Matlab Robotic Toolbox V9.10工具箱(七):Stanford arm 动力学建模与仿真
- Javascript运动概念2——多物体运动框架
- cocos2dx-lua class