statements是编程语言中重要部分。在Python中也是如此。statements代表一段逻辑。Python通过对齐(indent)控制statements。
赋值:
正常的赋值就不提了。Python3支持一种特别的赋值方式:
a,*b, c = [1,2,3,4,5] ,*b代表匹配剩下的。Python3在赋值前都会创建副本,比如
a,b = b,a 的赋值方式完全没有问题。 顺便提一下,
print(a = 1) 这样的语句在Python中是不行的,因为赋值不返回值,跟C不一样。
当然Python也支持 Augmented assignment statements。其实就是
X += Y 这样的。如果这里X是不可变的,那么这样操作与
X = X + Y 差别不大。但是如果X是可变的,比如list类型,那差别就大了。特别是效率问题。如下所示。变量是重新开辟了内存区域。
1 2 3 4 5 6 | l = [1,2,3] print(l, id(l)) #140143435913224 l += [1,2] print(l, id(l)) #140143435913224 l = l + [1,2] print(l, id(l)) #140143435913544 |
if:
Python里只有if,没有switch。因为if…elif…也可以写的很漂亮。更因为Python可以直接用dict代替switch。仔细想想如何做。更强大的是可以直接switch到函数。如下:
1 2 3 4 5 6 | branch = {"multiply":lambda x: x * x, "power":lambda x: x ** x, "default":lambda x: x} choice = "power" r = branch.get(choice)(7) print(r) |
Python中的判断还是要注意的。像大小比较返回的是True、False,但是逻辑判断返回的居然是对象,因为在Python中每个对象都是固有的True或False。当然判断还是遵守short circuit的。如下:
1 2 3 | a = 2 < 3, 3 < 2 #(True, False) a = 2 or 3, 3 or 2 #(2, 3) a = [] or 3, [] or {} #(3, {}) |
循环:
计算机就是用来循环的。Python的循环也不同寻常。Python很少用while,至少我很少用,因为for太强大了。平常的for不管了。Python的for是只要对方是个可迭代的,就可以使用 for i in X: 的形式。举例文件的读取。下面才是正确的做法。节省内存,效率也不低。唯一的弱点是f是iterator,只能顺序读一次。
1 2 3 | f = open("t.t") for line in f: print(line) |
循环也经常与map,zip,enumerate配合使用。
1 2 3 4 5 6 7 8 9 10 11 | L1 = [1,2,3,4,5] L2 = [5,6,7,8,9,10] for (x,y) in zip(L1, L2): print(x, y, '--', x+y) #for i in map(None, L1, L2): for i in map(str, L1): print(i) for (of, i) in enumerate(L2): print(i,of) |
Iterations:
Iteration是Python中重要的类型。Python中有iterable和iterator。书上是这么说的。
The iterable object you request iteration for, whose __iter__ is run by iter
The iterator object returned by the iterable that actually produces values during
the iteration, whose __next__ is run by next and raises StopIteration when finished
producing results
感觉还是不太明白,后来还是上网查查明白了。见stackoverflow。像list,dict,str等等都是iterable的。这样就可以做有趣的事了。普通的for一样可以。这里多了叫Comprehension的说法。其实就是把for写在[]里。如
1 2 3 | a = [1,2,3,4,5] #iterable print([(x, y) for x in a for y in reversed(a)]) [x + y for x in 'abc' for y in 'lmn'] |
据说这样效率会比较高。。总之比手动index快。所以让Python做更多事是提升效率的基本原则。
文档:
虽然说Python已经十分接近自然语言了。但是写注释和文档还是必要的。Python这点做的很好,PyDoc把注释和文档结合了。所以写大型注释就是写””” HELLO “””这样的。然后由__doc__或help获取。不展开。也可以使用HTML看文档, python -m pydoc -b 。对与个人用足够了。高大上的Sphinx也可以尝试一下。
好了,Python以前会打大概就差不多了。还有后面一点点会的函数。。就当复习了。这么点时间还是学到了不少。收获很多!