千峰笔记-装饰器-偏函数-异常处理

装饰器

 

概念:闭包,把一个函数当作参数返回一个替代版的函数,本质上就是一个返回函数的函数

 

#简单的装饰器

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语句时

  1. 如果当try语句t执行出现异常,匹配第一个错误码,如果匹配上,就执行对应的语句
  2. 如果当try语句t执行出现异常,没有匹配的异常,错误将会被提交到上一层的try语句,或者到程序的最上层
  3. 如果当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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值