python高级2之装饰器及内建函数、属性

2.14装饰器

装饰器本质上就是一个函数,它可以让其它函数在不需要任何代码修改的情况下,添加新的功能。

装饰器功能:①引入日志函数执行时间统计执行函数前预备处理执行函数后清理功能权限校验等场景缓存

2.14.1装饰器装饰的函数带参数

(1)装饰器装饰的函数带确定参数

例子:

def outer(func):
    def inner(number):
        return func(number)
    return inner

@outer
def f1(number):
    print(number)


@outer
def f2(number):
    print(number)


f1(100)
f2(200,200)

(2)装饰器装饰的函数带不定长参数

例子:

def outer(func):
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner

@outer
def f1(number):
    print(number)


@outer
def f2(number,number2):
    print(number)
    print(number2)


f1(100)
f2(200,200)

(3)装饰器装饰的函数带返回值

例子:

def outer(func):
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner

@outer
def f1(number):
    print(number)
    return "f1"


@outer
def f2(number,number2):
    print(number)
    print(number2)
    return "f2"


res = f1(100)
res2= f2(200,200)
print(res)
print(res2)

2.14.2装饰器案例(装饰器工厂函数)

# 班长  视频网站
# 增加功能  要求只能使用qq登录  login_type:QQ

def login_type(logintype):
    def check_login(func):
        def inner(name,pwd):
            if logintype == "QQ":
                if name == "班长" and pwd == "vip中p":
                    return func(name,pwd)
                else:
                    return error()
            else:
                print("必须使用QQ登录")
        return inner
    return check_login


# 注意:login_type不是装饰器,而是一个创建装饰器的函数 :装饰器工厂函数
#login_type "
    # 1、  check_login = login_type("QQ")
    # 2、 .........


@login_type("QQ")
def American(name,pwd):
    print("欧美专区")

@login_type("QQ")
def Japan(name,pwd):
    print("日韩专区")

@login_type("QQ")
def Shunyi(name,pwd):
    print("班长和彬哥专区")

def error():
    print("请注册,支持班长和彬哥的事业!!!!!")

American("班长","vip中p")
Shunyi("班长","vip中p")
Japan("班长","vip中p")

2.14.3装饰器执行过程

装饰器是自上而下进行调用执行的

例子:

def outer1(func):
    def inner1():
        print("我是装饰器1")
        return func()
    return inner1

def outer2(func):
    def inner2():
        print("我是装饰器2")
        return func()
    return inner2


@outer1
@outer2
def f1():
    print("我是一个函数")


f1()

2.14.4多重装饰器装饰顺序

2.14.5类装饰器

class Person(object):
    def __init__(self,func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("我是内函数")
        return  self.func()

@Person  #  f1 = Person(f1)
def f1():
    print("hello world")

f1()

2.14.6AOP面向切面编程

2.15内建属性

 

2.16内建函数

dir(__builtins__), 可以看到很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函数

2.16.1range

range(stop) -> list of integers range(start, stop[, step]) -> list of integers

  • start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5);
  • stop:到stop结束,但不包括stop.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

python2中range返回列表,python3中range返回一个迭代值。如果想得到列表,可通过list函数

2.16.2map函数

(1)map函数会根据提供的函数对指定序列做映射

(2)map(function, sequence[, sequence, ...]) -> list

  • function:是一个函数
  • sequence:是一个或多个序列,取决于function需要几个参数
  • 返回值是一个list

参数序列中的每一个元素分别调用function函数,返回包含每次function函数返回值的list

2.16.3filter函数

(1)filter函数会对指定序列执行过滤操作

(2)filter(function or None, sequence) -> list, tuple, or string

  • function:接受一个参数,返回布尔值True或False
  • sequence:序列可以是str,tuple,list

filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包

含调用结果为True的元素。

返回值的类型和参数sequence的类型相同

2.16.4reduce函数

(1)reduce函数,reduce函数会对参数序列中元素进行累积

(2)reduce(function, sequence[, initial]) -> value

  • function:该函数有两个参数
  • sequence:序列可以是str,tuple,list
  • initial:固定初始值

reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。 第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial 作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。 注意function函数不能为None。

(3)注意:在Python3里,reduce函数已经被从全局名字空间里移除了, 它现在被放置在fucntools模块里,用的话要先引入: from functools import reduce

2.17常用标准库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值