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