eziceice / thinkinginpython

Study notes for Python 3
4 stars 0 forks source link

If & Loop Statement #8

Open eziceice opened 6 years ago

eziceice commented 6 years ago

If & Loop & Other Statement

from math import sqrt as foobar print(foobar(4))


- 序列解包(sequence unpacking),也叫做递归解包,将多个值的序列解开,然后放到变量的序列中.解包允许函数返回一个以上的值并且打包成元组, 然后通过一个赋值语句很容易进行访问.所解包的序列中的元素数量必须和放置在赋值符号=左边的变量数量完全一致.

x, y, z = 1, 2, 3 print(x,y,z) # (1,2,3)

x, y = y, x print(x,y,z) # (2,1,3)

values = 1,2,3 x,y,z = values print(x,y,z) # (1,2,3)


- 链式赋值(chained assignment),是将同一个值赋给多个变量的捷径.看起来有些像并行赋值,但是实际上只是处理了一个值.

x = y = somefunction()

等价于

y = somefunction() x = y

不一定等价于

x = somefunction() y = somefunction()


- 在Python中,冒号(:)用来标识语句块的开始,块中的每一个语句的缩进量都是相同的.当回退到和已经闭合的块一样的缩进量时,就表示当时块已经结束了.**Python标准推荐的方式是只用空格,每个缩进需要4个空格,并不是使用tab,因为tab是8个空格.**

- Python的解释器将会把下面的值当做布尔表达式中的假(False). <br>
**False None 0 "" '' () [] {}**

print(True + False + 42) // True = 1 False = 0

bool()方法可以用来将值和布尔值进行转换. **注意,这里并不意味着其他这些等同于False的值是相等的.**

- elif子句,Python中的else if使用elif代替.

if x: dosomething() elif: dosomethingelse() else: doit()


- 比较运算符和Java中的类似,多了以下两种. 

x is y # x和y是同一个对象 x is not y # x和y不是同一个对象 x in y # x在容器y中 x not in y # x不在容器y中

同时, python中的比较运算符是可以连接使用的

if 0 < x < 100: dosomething()

eziceice commented 6 years ago

print([1,2,3] < [1,2,5]) # True


- Python中的and和or运算符就是使用and和or,并不像Java使用&&和||.
**惰性求知(lazy evaluation)或者短路逻辑(short-circuit logic), 就是指只有在需要的时候才求值,如果第一个表达式不成立,则后面的表达式直接不考虑(略过).**

- Assert,可以在条件不成立是抛出exception使程序崩溃.

a = 50 assert a > 100, 'a must be larger than 50' #AssertionError: a must be larger than 50.

eziceice commented 6 years ago

常见的loop工具

for i in range(len(names)): print(ages[i], names[i])

zip函数可以将两个序列压缩在一起,组成一个tuple的list.

for name, age in zip(names, ages): # 解包元组 也可以使用 for i in zip(names, ages): print(name, age)


- Python中的按索引迭代通常使用enumerate()

for index, item in enumerate(templist): if 'abc' in templist: templist[index] = 'opq'


- sorted()和reversed()方法,可以作用于任何序列或者可迭代对象,不是原地修改,而是返回翻转或者排序之后的序列.**sorted方法返回列表,reversed方法返回一个可迭代对象(需要配合list()或者循环方法使用)**

- for和while循环中都可以使用continue, break和**else**语句, else语句只在没有调用break的时候才执行.

for i in range(0,100): if i == 101: #若i等于101,执行else.若i=0-99中的某个数,调用break并且跳过else. print('break') break else: print('I am in else')


- 列表推导式(list comprehension),利用其他列表创建新列表.该方法比使用循环更加简洁.

print([x * x for x in range(0,10)])

print([x * x for x in range(0,10) if x % 3 == 0])

print([(x, y) for x in range(0,10) for y in range(5)])



- pass,如果不要程序做什么,可以使用pass,和Java中的Todo差不多.先空下今后再开发.

- del方法不仅会移除对象的引用,也会移除对象本身. (不需要过多考虑,python有垃圾回收的机制.)实际上删除的仅仅是名称而已,真正的对象删除靠的是GC的机制.Python的解释器会负责这些GC的处理.

- exec(),可以直接执行一个字符串,也可以动态地穿件代码字符串.

- eval(),求值函数.可以直接计算一个python表达式.