函数闭包,装饰器,迭代器

函数闭包

闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量引用),闭包指的是:函数内部函数对外部作用域而非全局作用域的引用

import requests

def func(url):
    def get_res():
        res=requests.get(url)
        res.encoding='utf8'
        print(res.text)
    return get_res
# baidu=func('https://www.baidu.com')
# baidu()
taobao=func('https://www.taobao.com/')
taobao()
两种为函数传参的参数

1、使用参数的形式

def func(x):
    print(x)
func(1)
func(1)
func(1)
#1
#1
#1

2、包给函数

def outter(x):
    x=1
    def inner():
        print(x)
    return inner
f=outter(1)
f()
f()
f()
#1
#1
#1

装饰器

器指的是工具,而程序中的函数就是具备某一功能的工具,所以装饰器指的是为被装饰对象添加额外功能,因此定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外的功能

需要注意

装饰器本身其实是可以任意调用的对象

被装饰的对象也可以是任意可调用的对象

装饰器的实现必须遵循两大原则

不修改被装饰对象的源代码

不修改被装饰对象的调用方式

import time
def index():
    print('hello, world')
    # return index  ##再次返回调用一次
# index()

def dice(func):   ##装饰器

    def f1():     ##装饰的功能
        star=time.time()
        func()
        time.sleep(1)
        end=time.time()
        print(end-star)
    return f1
index=dice(index)
index()
#加强版
import time
def index(x,a=1):
    print('x',x)
    print('a',a)
    print('hello wrold')
    return 123

def deco(func):
    def f1(*args,**kwargs):
        print('args:',args)
        print('kwargs:',kwargs)
        start=time.time()
        res=func(*args,**kwargs)
        end=time.time()
        return res
    return f1

index=deco(index)
res=index(10)
print(res)
##装饰器模板
def login(func):
    def inner(*args,**kwargs):
        user=input('输入用户名')
        pwd=input('输入密码')
        if user=='lzs'and pwd=='1234':
            print('登陆成功')
            res = func(*args, **kwargs)
            return res
        else:
            print('登陆失败')

    return inner

@login
def shopping():
    print('欢迎购物')
shopping()
##三层装饰器:给双层装饰器加参数
def auth(engine):
    def login(func):
        def inner(*args, **kwargs):
            if engine == 'flie':
                user = input('输入用户名')
                pwd = input('密码')
                if user == 'lzs' and pwd == '1234':
                    print('登陆成功')
                    res = func(*args, **kwargs)
                    return res
                else:
                    print('登陆失败')
            elif engine == 'db':
                print('账号来自数据库')
        return inner

    return login

@auth('flie')
def shopping():
    print('shopping')
    # login=auth('flie')
    # shopping=login(shopping)
shopping()

原文地址:https://www.cnblogs.com/lzss/p/11401990.html

时间: 2024-11-05 22:53:40

函数闭包,装饰器,迭代器的相关文章

python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式

本节课重要知识点内容如下: 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式 1.函数嵌套 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数 def bar(): print('from nbar')def foo(): print('from foo') bar()foo()def max2(x,y): if x > y: return x else: return ydef max4(a,

函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数

一,函数对象 函数对象:函数是第一类对象,即函数可以当做数据传递 1,可以被引用 2,可以做参数的传递 3,返回值可以是函数 4,可以当作容器类型的元素 二,函数嵌套 1,函数的嵌套调用 2,函数的嵌套定义 三,名称空间与作用域 名称空间:存放名字的地方叫名称空间,存放这些值与名字的绑定关系 查看内置名称的两种方法: 三种名称空间 1,内置名称空间:随着python解释器的启动而产生 2,全局名称空间:文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入该空间 3,局部名称空间:调用函

D20-05 函数闭包 装饰器 06 ..解压序列

框架 #装饰器的框架 import time def timmer(func): #func=test def wrapper(): start_time=time.time() func() #就是在运行test stop_time=time.time() print('运行时间是%s'%(start_time-stop_time)) return wrapper def test(): time.sleep(3) print('test函数运行完毕') test = timmer(test)

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

<04day>_函数嵌套--闭包函数--装饰器--迭代器--生成器

一.函数的嵌套定义 1.python函数支持嵌套 def f1(): #f1函数的定义 def f2(): #f2函数的定义 print('from f2') def f3(): #f3函数的定义 print('from f3') f2() f1() 嵌套函数--运行结果说明: 1首先调用f1()结果,f1函数为空.担保函f2函数,f2函数有内容打印并且有调用,f2函数包含f3函数,但f3函数无调用. 运行结果: 列子:多个数据之间的大小比较. #!/usr/bin/python # -*- c

【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

python函数、装饰器、迭代器、生成器

5月21日,请假结婚,然后性格惰性来了,不怎么想看视频和笔记,性格中的弱点开始出现,开始做的不错,渐渐开始松懈,直至放弃--- 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo

第二模块·函数编程-第1章 函数、装饰器、迭代器、内置方法

01-鸡汤之人丑就要多读书 02-三元运算 03-文件处理 04-文件处理-二进制模式 05-文件处理-智能检测编码的工具 06-文件处理-写模式操作文件 07-文件处理-追加模式操作文件 08-文件处理-混合操作文件 09-文件操作其他功能 10-文件处理-文件修改功能 11-函数-基本介绍 12-函数-默认参数 13-函数-关键参数 14-函数-非固定参数 15-函数-非固定参数2 16-函数-返回值 17-函数-局部变量 18-函数-在函数里修改全局变量 19-函数-在函数里修改列表数据

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

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