Python 学习笔记

其实Python我已经用了一些年了,用起来也比较顺手。但最近开始教自己的孩子学习Python时,还是发现了许多自己需要更新的知识。有些是自己没用过,不知道的,有些则是能让Python程序更加优雅,或者更加有效的。下面总结几点。

image.png

关于格式化字符串

我一般使用的方式是:

"One for %s, one for me." % name

这种方式能够正常工作,但建议的方式是:

'One for {name}, one for me.'.format(name=name)

或者简化为:

'One for {}, one for me.'.format(name)

sort 和 sorted的区别

首先进行一个简单的试验:

image.png

可以看到,sorted会将列表进行排序,并返回一个新的列表。而sort()则会将列表本身进行排序。在Python的函数中,尽量不要使用sort()方法,以避免改变传入的参数。就像别人借给你一样东西,肯定希望你完好无损的归还一样。

关于数组越界的问题

Python其实很聪明的,它知道如何判断数组越界,并会在数组越界时自动的帮你处理。比如,有些人的Python代码会这样写:

sorted_array = sorted(scores,reverse=True)
return sorted_array[0:3] if len(sorted_array)>=3 else sorted_array

其实完全不必,可以简化为:

return sorted(scores,reverse=True)[0:3]

强大的Python数组操作

举一个简单的例子:把如下字符串:

"1 2 3 4\n5 6 7 8\n9 8 7 6"

转换为一个二位数组:

1 2 3 4
5 6 7 8
9 8 7 6

可以先使用 splitlines:

s = "1 2 3 4\n5 6 7 8\n9 8 7 6"

>>> lines = s.splitlines()
>>> lines
['1 2 3 4', '5 6 7 8', '9 8 7 6']

然后再进一步处理:

>>> rows = [[int(v) for v in row.split()] for row in lines]
>>> rows
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 8, 7, 6]]