踩过的python坑

1、python中一些内置函数是没有返回值的,所以不能return 函数调用。如 return list_a.append(a),函数返回值为None而不是append 后的list_a!

2、对list删除元素时,如果时连续删除元素不能用pop(index)函数(考虑使用remove(val))!原因是pop(i)函数执行完后,索引 i 后面的元素均依次前移,对应地索引值均依次减一,所以在程序中连续pop(i)的话,第二次pop(j)执行的元素已经不再是之前的第j个元素了(其实是原来的第j+1个)!

3、os.mkdir()函数在创建新目录时报错:The system cannot find the path specified.原因是os.mkdir()只能基于当前存在的路径创建一个新的目录,而不能递归创建,如在路径下创建两层目录:mkdir("./first_dir/second_dir")系统目录下因没有first_dir这个目录,因而报 找不到指定目录的错误;若要创建多层目录可以使用os.makedirs()函数。

4、python的编解码问题(很多大神也在说字符串编码一直是令人非常头疼的问题)。再通过python读取txt文件是经常出现解码错误,所以了解相应文本的编码十分重要,这里推荐python的第三方包chardet,通过pip安装后即可使用。如通过下面方式获取文本编码: 

#解析文件编码格式
    def code(self,path):
        f = open(path, 'rb')
        f_read = f.read()
        f_charInfo = chardet.detect(f_read)
        return f_charInfo

5、使用pickle 反序列化数据时,在python2和python3间pickle.load出现不兼容现象:UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)(此错误为python3  load python2反序列化的二进制数据(以‘rb’读)),解决方法为在load函数后加上编码方式:pickle.load(文件句柄, encoding='latin1'),其中Latin1是ISO-8859-1的别名,向下兼容ASCII。

6、python中的复杂变量赋值(如np.array或整个list赋值(lst1=lst2))执行的是浅拷贝,新变量只是原变量的一个标签,只要更改其中一个变量另一个变量一会随之改变。如:

>>> lst1 = [1,2,2]
>>> id(lst1)
139814676235112
>>> lst2 = lst1
>>> id(lst2)
139814676235112
>>> lst2
[1, 2, 2]

7、[python装饰器详解](https://www.cnblogs.com/cicaday/p/python-decorator.html)

8、python的浅拷贝与深拷贝:https://github.com/familyld/learnpython/blob/master/Difference_between_DeepCopy_and_ShallowCopy.md

9、python的垃圾回收机制。在写数据下载代码时内存消耗飙升,升到最大内存后并没有OOM。带着这个疑问重温python的垃圾回收机制,虽没有完全解释清为什么会前期内存消耗飙升,可以清楚了解python的内存管理机制:http://www.ityouknow.com/python/2020/01/06/python-gc-111.html

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值