Python语法规则
1:语句逐行运行,除非碰见if等控制语句
2:块与语句的边界会自动检测,因为它没有大括号之类的东西,所以就是缩进
3:复合语句的形式:首句后紧跟“:”,紧接着是缩进语句
4:文档字符串!=注释,尽管同样都是被忽略,但是在运行时会自动附加在对象上,可以由文档工具显示。
语句分割符
Python语句一般是行尾表结束,但当语句太长时,我们可以通过一些方式让他位于多行之中
1:使用语法括号对,使语句跨行。括号对包括(),{},或[]
2:语句以反斜线结尾,实现跨行。(现不再使用)
3:其它规则,三重引号字符串块或者先用分号终止语句,然后紧接着输入
while 循环
while <test1>:
<statement1> # loop body
if <test2>: break # Exit loop now, skip else
if <test3>: continue # Go to top of loop now, to test1
else: # Optional else
<statement2> # Run if didn't exit loop with break
break 跳出整个循环
continue 跳出当前循环
pass 什么事都不做,只是空占位语句。或者写成...也是什么都不做
else 循环正常离开时执行,也就是没碰到break语句
下面C语言中常见的形式在Python里面是不行的 while (( x = next()) != null ) { ...process x...}
for 循环
是一个通用的序列迭代器,可以遍历任何有序的序列对象内的元素,可用于字符串,列表,元组以及其他内置可迭代对象
for <target> in <object>:
<statements>
if <test>: break
if <test>: continue
else:
<statements>
通过下面的例子,你会发现它实际上关键还是赋值的形式,与我们前面说学的区别就是它后面时一个序列,然后我们会以,为分隔符,一次用一段进行赋值。
>>> D={'a':1, 'b':2, 'c':3}
>>> for k in D:
... print(k, '=>', D[k])
...
('a', '=>', 1)
('c', '=>', 3)
('b', '=>', 2)
>>> list(D.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> for (k,v) in D.items():
... print(k, '=>', v)
...
('a', '=>', 1)
('c', '=>', 3)
('b', '=>', 2)
>>> for ((a,b), c) in [((1,2),3),((4,5),6)]:
... print(a,b,c)
...
(1, 2, 3)
(4, 5, 6)
Python 3的扩展赋值:关键也就是*的引入
>>> for (a,*b,c) in [(1,2,3,4),(5,6,7,8)]:
... print(a,b,c)
...
1 [2,3] 4
5 [6,7] 8
>>> for all in [(1,2,3,4),(5,6,7,8)]: #对比上面字典的时候,k为啥就只是一个值'a'?为啥现在为整个元组
... a,b,c = all[0],all[1:3],all[3]
... print(a,b,c)
...
1 (2,3) 4
5 (6,7) 8
佐证:for 循环的列表,会以逗号为界限,每次取出一组然后进行处理
>>> items = ["aaa", 111, (4,5),2.1]
>>> tests = [(4,5), 3.4]
>>> for k in tests: #k 第一次值为(4,5)跟上面的all一样都是一次乘装一个分隔单元
... if k in items:
... print(k, "was found")
... else:
... print(k, "not found")
...
((4, 5), 'was found')
(3.4, 'not found')
for 对文件循环读取
file = open('test.txt', 'r')
print(file.read())
file = open('test.txt') #默认按read模式打开
while True:
char =file.read(1) #for会一次把文件加载至内存
if not char: break #文件结尾处,break
print(char)
file = open('test.txt')
while True:
line = file.readline()
if not line: break
print(line, end='')
file = open('test.txt', 'rb')
while True:
chunk = file.read(10) #因为上面它是按rb读的,所以就是每次读入10个byte.
if not chunk: break
print(chunk)
for char in open('test.txt').read(): #for会一次把文件加载至内存
print(char)
for line in open('test.txt').readlines(): #readlines方法会一次把文件载入到行字符串列表,然后通过for在一次次读取。
print(line, end='')
for line in open('test.txt'): #iterator:best text input mode
print(line, end='') #end来抑制一个\n,因为行字符串本身就有一个
while循环读取文件内容每次读取一行或一个字符,倒数2,3中的for和readlines的效果时先把文件都放入内存。你万一文件太大了呢?而iterator是文件迭代器,每循环一次读入一行。
while的机制跟最后一个for语句用的iterator一样,但是他俩速度还是有差别的,Itherator 在Python中是以C语言速度运行,而while循环版本时通过Python虚拟机运行Python字节码的。