Python
大约 2 分钟
Python
目录
结构化编程思想
语句块
- 作用:允许把多条语句放到按C++句法只能放一条语句的地方(逗号运算符同样可以做到相同的工作)
- 使用:依赖缩进
- 局部变量:语句块中可定义局部变量,执行完语句块后变量将被释放
for-in-else 循环语句
- 用法
for i in list:
,基于迭代器循环for i in range(start,end[,step]):
,基于次数循环(也写成了迭代器形式)
continue
退出本次循环,break
退出循环- 后面可以接
else
,循环自然结束触发而break或return不触发==【Python特有】==
- 后面可以接
【BUG注意】(这bug我常犯)
# 错误演示:for-in 删除不全
socket = None
for socket in self.inputs:
self.inputs.remove(socket)
socket.remove()
# 或
a=[1,2,3,4,5]
for i in a:
a.pop(0)
print(a)
# 原因
运行发现最后a不是[],该问题主要原因是删除元素后,整个列表的元素会往前移动,而i却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果。
# 解决方法
a=[1,2,3,4,5]
for i in a[:]:
a.pop(0)
print(a)
exp-for-in 生成器表达式
简概
- 有时简单的生成器可以用简洁的方式调用,就像不带中括号的链表推导式
- 这些表达式是为函数调用生成器而设计的
- 生成器表达式比完整的生成器定义更简洁,但是没有那么多变,而且通常比等价的链表推导式更容易记
使用
举例
>>> sum(i*i for i in range(10)) # sum of squares 285 >>> xvec = [10, 20, 30] >>> yvec = [7, 5, 3] >>> sum(x*y for x,y in zip(xvec, yvec)) # dot product 260 >>> from math import pi, sin >>> sine_table = {x: sin(x*pi/180) for x in range(0, 91)} >>> unique_words = set(word for line in page for word in line.split()) >>> valedictorian = max((student.gpa, student.name) for student in graduates) >>> data = 'golf' >>> list(data[i] for i in range(len(data)-1, -1, -1)) ['f', 'l', 'o', 'g']
while-else 循环语句
- 用法
while 条件:
continue
退出本次循环,break
退出循环- 后面可以接
else
,循环自然结束触发而break或return不触发==【Python特有】==
if-elif-else 语句
if:
- elif:
- else:
if json_data['data'] is None: # 而不是 ==None
print("Failed to load data because authkey timeout")
return
switch-case 语句(Python中没有)
Python中没有该类语句
if-else 三目运算符
- 使用(与C等不同)
C、Java、Js
:条件 ? true_exp : false_exp
Python
:true_exp if 条件 else false_exp
try-except-else & raise 异常捕捉
try:
- except:
try:
pass
except: # 若要保存异常并打印,需要改成:`except Exception, e:`
pass
else:
pass
pass
pass语句表示什么都不做==【Python特有】==
因为其他软件要么就可以用分号分割结尾,要么可以用空的大括号语句块标明为空
而Python通过检查缩进,且规定某些语句必须有缩进块,这时可以用pass语句占位