基础
代码块以冒号开始,并且缩进相同的代码属于同一代码块。因此,if等表达式后需要跟一个冒号。
逻辑运算
True:真。非零与非空的变量都是真。
False:假。0、None或者空的量都是False。如
a={"dict":1}
a.clear()
if a:
print(a)
else:
print("else")
如果将a.clear()不注释掉,则输出的是else,也就是说if a的判断为False。如果注释则if a:就是True。
and:与。
or:或。
not:非。
if
与别的语言中的if表达式完全一致,除了判断语句后面需要跟一个冒号外。
elif:等同于java中else if。
for
for xx in xxxx:——for与in关键字结合。
结合着字典的items()方法,可以通过一个for循环将它的Key,value都取出来。如下:
>>> a={"aba":1213,"cfe":4324}
>>> for k,v in a.items():
... print(k)
... print(v)
...
aba
1213
cfe
4324
这是因为a.items()返回的是一个列表,其中的元素又都是一个元组。for循环首先取出列表中的每一个元素,而元组又可以通过k,v=()进行分解,所以for k,v in {}是可以一次性将字典的key,value值都取出来的。与else结合
当for循环正常结束时,会执行else操作;当for循环不正常结束时,不会执行else。如:
a = {34: "value1", 12: 4234}
for k, v in a.items():
print(k, " = ", v)
if k == 12:
break
else:
print("ending")
当没有if判断块时,会执行else语句块;但加上if判断块后,就不会执行,因为for循环不是正常结束的,是被break打断的。与java不同的用法
1,for循环中的变量可以直接用于生成列表,如:
L = [d for d in range(11)]
print(L) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2,也可直接使用d进行操作。如:L = [d**2 for d in range(11)] # 直接求取d的平方
print(L) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
当然,也可将d**2换成一个函数。如下:
def test(m, n):
return (m*2)+","+n
L = [test(m, n) for m in 'xyz' for n in 'abc'] # 直接使用循环变量m,n,并将函数返回值当作列表元素
print(L) # ['xx,a', 'xx,b', 'xx,c', 'yy,a', 'yy,b', 'yy,c', 'zz,a', 'zz,b', 'zz,c']
3,for循环后可跟if判断,这样只有满足判断条件的变量才会被使用,如:
L = [d**2 for d in range(11) if d % 2 == 0] # 求取偶数的平方
print(L) # [0, 4, 16, 36, 64, 100]
4,for循环后可直接跟for循环。如:L = [m+","+n for m in 'xyz' for n in 'abc'] # for循环后跟另一个循环,直接使用循环中的变量
print(L) # ['x,a', 'x,b', 'x,c', 'y,a', 'y,b', 'y,c', 'z,a', 'z,b', 'z,c']
从上面生成的列表中可以看出一共生成了9个元素,而且它的生成效果与下面代码的效果一样:for m in 'xyz':
for n in 'abc':
l.append(m+","+n)
因此,for循环后跟for循环只是能java中for循环嵌套的简化写法。按此种写法可以写多个for循环。并且按照此思路,for后面跟的if判断也可以跟多个。如:L = [a+b for a in range(5) for b in range(5, 8) if b % 2 == 0 if a % 2 != 0]
print(L) # [7, 9]
第一个if判断决定了b只能是偶数,所以b=6;第二个if判断决定了a为奇数,所以a为1,3,故返回的元素只有7和9。
记住:for循环后跟for循环,只是对java中for循环嵌套的简写;for循环后跟if判断也是对java中for循环中嵌套if的简写。