装饰器
概念:闭包,把一个函数当作参数返回一个替代版的函数,本质上就是一个返回函数的函数
#简单的装饰器
def funnc1()
print(“sunck is a agood man”)
def outer(func):
def inner()
print(“*************”)
func()
return inner
#f是函数func1的加强版本
f = outer(func1)
f()
#复杂一点装饰器
say(-10)
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
#顺序
#使用@将装饰器应用到函数,python2.4开始支持使用@
@outer #相当于执行率say = outer(say)
def say(age):
print(“sunck is %d years old” % (age))
#say = outer(say)
say(-10)
#通用装饰器
def outer(func):
def inner(*args, **kwargs):
#添加修改的功能
print(“************”)
func(*args, **kwargs)
return inner
@outer #先定义装饰器,后定义函数时,用@装饰器
def say(name, age):#函数参数理论上无限制,最好不超过6、7个
print(“my name is %s, i am %d years old” % (name, age))
偏函数
import functools
print(int(“1010”, base = 2))
#偏函数
def int2(str, base = 2):
return int(str, base)
print(int2(“1100”))
#把一个参数固定住,形成一个新的函数
int3 = functools.partial(int, base = 2)
print (int3(“111”))
变量的作用域
作用域:变量可以使用的范围
程序的变量并不是在所有位置都能使用,访问的权限决定于变量的位置
作用域:
局部作用域
全局作用域
内建作用域
异常处理
#当程序遇到问题时不让程序结束,而越过错误继续向下执行
#try……except……else
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
else:
语句e
注意:else语句可有可无
作用:用来检测try语句块中的错误,从而让except语句捕获错误信息并处理
逻辑:当程序执行到try-except-else语句时
- 如果当try语句t执行出现异常,匹配第一个错误码,如果匹配上,就执行对应的语句
- 如果当try语句t执行出现异常,没有匹配的异常,错误将会被提交到上一层的try语句,或者到程序的最上层
- 如果当try语句t执行没有出现错误,执行else下语句e
print(num)
try:
print(3/0)
except NameError as e:
print(“没有该变量”)
except ZeroDivisionError as e:
print(“除数为0”)
else:
print(“代码没有问题”)
print(“**************”)
#使用except而不使用任何错误类型
try:
print(4/0)
except:
print(“程序异常”)
#使用except带着多种异常
try:
pass
except (NameError, ZeroDivisionError):
print(“出现了NameError 或ZeroDivisionError”)
#特殊
#1、错误其实是class(类),所以错误都继承自BaseException,所以捕获时,它捕获了该类型的错误,还把子类一网打尽
try:
print(5/0)
except BaseException as e:
print(“异常1”)
except ZeroDivisionError as e:
print(“异常2”)
#2、跨越多层调用
def func1(num):
print(1/num)
def func2(num):
func1(num)
def main():
func2(0)
try:
main()
except ZeroDivisionError as e:
print(“*******”)
#try……except……finally
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
finally:
语句f
作用:语句t无论是否有错都将执行最后的语句f
try:
print(1/0)
except ZeroDivisionError as e:
print(“0”)
finally: #关闭文件
print(“final”)
#断言
def func(num, div)
assert (div != 0), “div不能为0”
return num / div
print(func(10, 0))