一、例外处理Exception
代码运行可能会意外出现各种错误:
• 语法错误:Syntax Error
• 除以0错误:ZeroDivisionError
• 列表下标越界:IndexError
• 类型错误:TypeError…
事先无法预料,如:
• 由用户输入/交互引起
• 由外部数据引起
• 由设备连接等引起
二、例外处理Exception Handling
• 错误会引起程序中止退出
• 如果希望掌控意外,就需要在可能出错误的地方设置陷阱捕捉错误:try: # 为缩进的代码设置陷阱,except: # 处理错误的代码,else: # 没有出错执行的代码,finally: # 无论出错否,都执行的代码。
三、推导式comprehensions
可以用来生成列表、字典和集合的语句
• [<表达式> for<变量> in <可迭代对象> if<逻辑条件>]
• {<键值表达式>:<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
• {<元素表达式>for <变量> in <可迭代对象>if <逻辑条件>}
四、用推导式替代map/filter函数
• 函数式编程被认为不太pythonic,推导式可以替代map/filter函数
• map函数的替代:map(func,list),[func(x) for x in list]
• map(func, list1, list2)
• [func(x,y) for x,y in zip(list1, list2)]
• filter函数的替代:filter(func,list),[x for x in list if func(x)]
五、替代reduce函数
• 需要一个迭代循环才能替代reduce函数,result = reduce(function, iterable, start) ,相当于:
• result = start
• for x in iterable: • result =function(result, x)
六、生成器推导式generator
与推导式一样语法:
• (<元素表达式>for <变量> in <可迭代对象>if <逻辑条件>)
• 返回一个生成器对象,也是可迭代对象
• 但生成器并不立即产生全部元素,仅在要用到元素的时候才生成,可以极大节省内存
七、生成器函数
• 如果生成器较复杂,一行表达式无法容纳,可以定义生成器函数
• 生成器函数的定义与普通函数相同,只是将return换成 了yield
• yield语句会立即中止函数执行,返回一个值
• 但在下一次迭代生成器函数的时候,会从yield语句后的语句继续执行,直到再次yield返回,或终止
• return语句也会立即中止函数执行,返回一个值
• 但它会终止函数的执行,下次调用函数会重新执行函数