目录
装饰器
简单的装饰器
复杂点的装饰器
偏函数
变量的作用域
异常处理
错误处理的语句:
断言
概念:是一个闭包,把一个函数当作参数返回一个替代版的函数,本质上就是一个返回函数的函数
def a():
print("this is hanshu\n")
def b(fun):
print("************")
fun()
b(a)
def a():
print("this is hanshu\n")
def b(fun):
def k():
print("************")
fun()
return k
f = b(a)
f()
def a(ok):
print("this is %s\n" %ok)
a('10')
def b(fun):
def c(ok):
print('********')
if ok > 0 :
ok = 0
fun(ok)
return c
a = b(a)
a(10)
如果你想使用别人的方法,但你不能修改别人的原码,这时候可以写一个装饰器去修改
还可以在需要被装饰的方法上使用@装饰方法去装饰 相当于a = b(a)
python2.4开始支持使用@符合
def b(fun):
def c(ok):
print('********')
if ok > 0 :
ok = 0
fun(ok)
return c
@b
def a(ok):
print("this is %s\n" %ok)
a(10)
但是参数不一时需要注意,因为使用了 ok > 0 判断,所有ok的值需要为整型,不能为字符串
def b(fun):
def c(ok):
print('********')
if ok > 0 :
ok = 0
fun(ok)
return c
@b
def a(ok):
print("this is %s\n" %ok)
a('10')
base=n 将字符串当作n进制来计算,输出结果仍是10进制
print(int('1010',base=10))
print(int('1010',base=8))
print(int('1010',base=2))
作用域:变量可以使用的范围
程序的变量并不是在所有位置都能使用的,访问的权限决定于变量在哪里赋值的
作用域:
print(3/0)
需求:当程序遇到错误时不让程序结束,让程序继续执行下去
try......except.....else
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
........
else:
语句e
注意:else语句可有可无
作用:用来检测try语句块中的错误,从而让expect语句捕获错误信息并处理
逻辑:当程序执行到try...expect时
try:
print(3/0)
except ZeroDivisionError as e:
print("除数为0了\n")
try:
# print(3/0)
print(n)
except ZeroDivisionError as e:
print("除数为0了")
except NameError as e:
print("没有该变量")
使用except而不匹配错误类型,只要程序出现异常就报错
try:
print(n)
except :
print("程序出现异常")
使用except带着多个异常
try:
print(5 / 0)
except (NameError,ZeroDivisionError):
print("程序没有变量或出现除数为0")
错误其实是class类,所有的错误都继承自BaseException,所以捕获了该类型的错误还把子类的错误一网打尽
多层调用报错
def fun1(num):
print(2/num)
def fun2(num):
fun1(num)
def main():
fun2(0)
try:
main()
except (NameError,ZeroDivisionError,BaseException):
print("程序没有变量或出现除数为0")
try...except...finally...
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
........
finally:
语句f
语句t无论是否出现错误,都将执行语句f
断言正确则不会显示断言
def su(a,b):
assert (b != 0),"b不能为0"
print(a / b)
su(10,2)
su(10,0)