python 高阶函数与装饰器

高阶函数定义1.函数接收的参数是一个函数名2.函数的返回值是一个函数名以上两者满足任意一个,就是高阶函数

装饰器定义本质就是函数,功能是为其他函数添加新功能
装饰器的原则

1.不修改被装饰函数的源代码(开放封闭原则)

2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

装饰器=高阶函数+函数嵌套+闭包

   

# 无返回值无参数
import time

def timer(func):     #func = test
    def w():
        start_time = time.time()
        func()     #就是在运行test()
        stop_time = time.time()
        print("运行时间是%d"%(stop_time-start_time))
    return w

@timer    # 相当于 test = timer(test)
def test():
    time.sleep(2)
    print("from test")

# test = timer(test)  #返回的是w的地址
# test()       #相当于执行w

test()
#加上返回值
import time

def timer(func):       #func = test
    def w():
        start_time = time.time()
        res = func()    #就是在运行test()
        stop_time = time.time()
        print("运行时间是%d"%(stop_time-start_time))
        return res
    return w

@timer    # 相当于 test = timer(test)
def test():
    time.sleep(2)
    print("from test")
    return "这是test的返回值"

# test = timer(test)  #返回的是w的地址
# test()       #相当于执行w

res = test()
print(res)
#加上参数和返回值 装饰器最终形式
import time

def timer(func):          #func = test   #func = test1
    def w(*args,**kwargs):
        start_time = time.time()
        res = func(*args,**kwargs)     #就是在运行test()   test1()
        stop_time = time.time()
        print("运行时间是%d"%(stop_time-start_time))
        return res
    return w

@timer    # 相当于 test = timer(test)
def test(name,age):
    time.sleep(2)
    print("from test   %s   %s"%(name,age))
    return "这是test的返回值"

res = test("liao",18)
print(res)

@timer     # 相当于 test1 = timer(test1)
def test1(name,age,g):
    time.sleep(1)
    print("from test1   %s   %s  %s"%(name,age,g))
    return "这是test1的返回值"

res1 = test1("bo",26,"shi")
print(res1)

用户登陆(简单流程判断)

l = [{"name":"liao","pwd":"123"},{"name":"tom","pwd":"123"}]     #用户数据
c_d = {"user":None,"login":False}          #定义一个空的临时的用户字字典

def a_f(func):
    def w(*args,**kwargs):
        if c_d["user"] and c_d["login"]:      #判断临时字典里是否有用户登陆,没有就输入
            res = func(*args,**kwargs)        #有就进入下一步
            return res

        user = input("请输入用户名:").strip()   #临时字典没有数据就输入用户名
        pwd = input("请输入密码:").strip()      #临时字典没有数据就输入密码

        for i in l:          #遍历用户数据
            if user == i["name"] and pwd == i["pwd"]:    #判断输入的用户和密码是否在用户数据里
                c_d["user"] = user        #输入正确,数据保存到临时的用户字字典里,下一步不用再输入用户和密码
                c_d["login"] = True
                res = func(*args,**kwargs)    #进入
                return res
        else:                       #如果输入的用户名和密码不在用记数据里,提示用户
            print("用户名或者密码错误")
    return w

@a_f
def index():
    print("欢迎来到主页面")

@a_f
def home():
    print("这里是你家")

@a_f
def shopping_car():
    print("查看购物车啊亲")

index()
home()
shopping_car()
 
				
时间: 2024-10-12 12:43:37

python 高阶函数与装饰器的相关文章

Python高阶函数之 - 装饰器

高阶函数:  1. 函数名可以作为参数传入     2. 函数名可以作为返回值. python装饰器是用于拓展原来函数功能的一种函数 , 这个函数的特殊之处在于它的返回值也是一个函数 , 使用python装饰器的好处就是在不用更改原函数代码的前提下给函数增加新的功能, 装饰器的原理即是闭包. 原文地址:https://www.cnblogs.com/chenbin93/p/8988712.html

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():      

python学习笔记4:高阶函数,装饰器,生成器,迭代器

一.高级函数1.把一个函数名当作实参传给另一个函数2.返回值包含函数名>>> def bar():... print ("in the bar")... >>> def foo(func):... res=func()... return res... >>> foo(bar)in the bar 二.嵌套函数在函数中定义另一个函数 三.装饰器装饰器本质上是函数,作用是装饰其他函数,就是为其他函数添加附加功能.原则1:不能修改被装饰

高阶函数和装饰器

函数式:一种编程范式 纯函数式编程:没有变量,支持高阶函数编程 Python不是纯函数式编程语言,支持高阶函数编程 变量可以指向函数,函数名就是指向函数的一个变量,与普通变量没有区别 高阶函数:能接收函数做参数的函数. map():是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7

Python(十) 函数式编程: 匿名函数、高阶函数、装饰器

一.lambda表达式 lambda parameter_list: expression # 匿名函数 def add(x,y): return x+y print(add(1,2)) f = lambda x,y: x+y print(f(1,2)) 二.三元表达式 # x >y ? x :y # 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果 x= 2 y=1 r = x if x > y else y print(r) # 2 三.map 四.map与lambda

13.函数式编程:匿名函数、高阶函数、装饰器

# def add(x,y): # return x + y # print(add(1,2)) # 3 # 匿名函数 # lambda表达式 # f = lambda x,y:x + y # print(f(1,2)) # # 三元表达式 # x = 2 # y = 1 # r = x if x > y else y # print(r) # 2 # map # list_x = [1,2,3,4,5,6,7,8] # def square(x): # return x * x # 方法1 #

python中高阶函数与装饰器(2)

函数返回值为内置函数名: def sum(*args):    def sum_in():        ax = 0        for n in args:            ax = ax + n        return ax    return sum_in 当我们调用sum()时,返回的并不是求和结果,而是求和函数: >>> f = sum(1, 3, 5, 7, 9) >>> f <function sum.<locals>.su

python 高阶函数详解。

1,概念: Iterable 和 IteratorIterable 表示该变量可以被 for in 进行迭代.Iterator 表示该变量可以被 next(o)进行迭代(上一个表示有限迭代,下一个表示一个惰性的迭代概念,可以无限迭代.)一般的Iterable 的变量有:L=[{},[],(1,),{3:4},{3,4}]for x in L:print(isinstance(x,Iterable))print(isinstance(x,Iterator)) truefalse 可见,基础变量Li

Python高阶函数_map/reduce/filter函数

本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你就能大概明白map/reduce的概念. 我们先看map.map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序