python局部变量、高级函数、匿名函数、嵌套函数、装饰器

1.局部变量

在函数内部,可以用Global,显式的声明为全局变量。这种方式永远不要这么用。

Ctrl+?多行注释i

2.高级函数

把函数名当做参数,传给函数

def add(a,b,f):

return f(a)+f(b)

res = add(3,-6,abs)

abs是内置函数

def bar():

print("in the bar")

def test1(func):

首先看第一个例子:def bar():

print("in the bar")

def test1(func):

print(func)

func()

test1(bar)

<function bar at 0x0000019A43BC2E18>
in the bar

其次看第二个例子:

def bar():    time.sleep(3)    print("in the bar")

def test1(func):    start_time = time.time()    func()    stop_time = time.time()    print("the func run time is: %s" %(stop_time-start_time))

test1(bar)

in the bar
the func run time is: 3.000192880630493

可以看出不修改bar()的源代码下,为其增加功能

最后看第三个例子:

  

def bar():    print("in the bar")

def test1(func):    print(func)    return func

print(test1(bar))test1(bar)()

bar  = test1(bar)bar()

<function bar at 0x000002347ACE2E18>
<function bar at 0x000002347ACE2E18>
<function bar at 0x000002347ACE2E18>
in the bar
<function bar at 0x000002347ACE2E18>
in the bar

2.匿名函数:

lambda x:x*3

calc = lambda x:x*3

calc(3)

3.引用计数

python通过引用计数,回收内存

4.嵌套函数

在一个函数体内def另外一个函数
def foo():    print("in the foo")    def bar():        print("int the bar")        def love():            print("int the love")        love()    bar()foo()

5.装饰器本质是函数,装饰其它函数,为其他函数添加附加功能。语法糖。

1.不能修改被装饰的函数的源代码

2.不能修改被装饰的函数的调用方式

成为透明性

实现:

1函数即“变量”,先定义再使用

2.高级函数

3.嵌套函数

import timedef timer(func):    def deco():        start_time = time.time()        func()        stop_time = time.time()        print("the func run time is: %s" % (stop_time - start_time))

return deco

def test1():    time.sleep(3)    print("in teh tes1")

def test2():    time.sleep(3)    print("in teh tes2")

test1=timer(test1)test1()

in teh tes1
the func run time is: 3.0001118183135986

最终为:

import timedef timer(func):    def deco():        start_time = time.time()        func()        stop_time = time.time()        print("the func run time is: %s" % (stop_time - start_time))

return deco@timer #test1=timer(test1)
def test1():    time.sleep(3)    print("in teh tes1")@timerdef test2():    time.sleep(3)    print("in teh tes2")

test1()

最最终为:import time
def timer(func):    def deco(*args,**kvargs):        start_time = time.time()        func(*args,**kvargs)        stop_time = time.time()        print("the func run time is: %s" % (stop_time - start_time))

return deco@timerdef test1():    time.sleep(3)    print("in the test1")@timerdef test2(name,age):    time.sleep(3)    print("in the test",name,age)

test1()test2("roger",22)

补充:

username,password = "roger","abc123"
def auth(func):    def wrapper(*args,**kvargs):        username = input("Username:")        password = input("Password:")        if username == "roger" and password =="abc123":            print("User has passed authenticated")            func(*args,**kvargs)        else:            print("invalid username or password")            exit()    return wrapperdef index():    print("welcome to index page")

@authdef home():    print("welcome to home page")@authdef bbs():    print("welcome to bbs page")

index()home()bbs()

继续:
username,password = "roger","abc123"def auth(func):    def wrapper(*args,**kvargs):        username = input("Username:")        password = input("Password:")        if username == "roger" and password =="abc123":            print("User has passed authenticated")            resu = func(*args,**kvargs)            print("after authentication")            return resu        else:            print("invalid username or password")            exit()    return wrapperdef index():    print("welcome to index page")

@authdef home():    print("welcome to home page")    return "from home"@authdef bbs():    print("welcome to bbs page")

index()print(home())bbs()

再继续:
username,password = "roger","abc123"def auth(auth_type):    print("auth function args",auth_type)    def out_wrapper(func):        def wrapper(*args, **kvargs):            print("wrapper function args:", *args,*kvargs)            if auth_type == "local":                username = input("Username:")                password = input("Password:")                if username == "roger" and password == "abc123":                    print("User has passed authenticated")                    resu = func(*args, **kvargs)                    print("after authentication")                    return resu                else:                    print("invalid username or password")                    exit()            elif auth_type == "ldap":                print("执行ldap的验证")        return wrapper    return out_wrapperdef index():    print("welcome to index page")

@auth(auth_type="local")def home():    print("welcome to home page")    return "from home"@auth(auth_type="ldap")def bbs():    print("welcome to bbs page")

index()print(home())bbs()

 

原文地址:https://www.cnblogs.com/wherewhenwho/p/9031195.html

时间: 2024-10-10 19:58:29

python局部变量、高级函数、匿名函数、嵌套函数、装饰器的相关文章

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

【Python基础】高阶函数+函数嵌套+闭包 ==装饰器

高阶函数+函数嵌套+闭包 == 装饰器 一 什么是装饰器 二 装饰器需要遵循的原则 三 实现装饰器知识储备 四 高阶函数 五 函数嵌套 六 闭包 七 无参装饰器 八 装饰器应用示例 九 超时装饰器 参考: https://www.cnblogs.com/linhaifeng/articles/6140395.html https://www.cnblogs.com/haiyan123/p/8387769.html 原文地址:https://www.cnblogs.com/XJT2018/p/11

Python虚拟机函数机制之闭包和装饰器(七)

函数中局部变量的访问 在完成了对函数参数的剖析后,我们再来看看,在Python中,函数的局部变量时如何实现的.前面提到过,函数参数也是一种局部变量.所以,其实局部变量的实现机制与函数参数的实现机制是完全一样的.这个"一样"是什么意思呢? 之前我们剖析过Python虚拟机的一些指令,如果要访问一个变量,应该使用LOAD_NAME指令,应该依照local.global.builtin这三个名字空间里去检索变量名所对应的变量值.然后在调用函数时,Python虚拟机通过PyFrame_New创

python基础知识7——迭代器,生成器,装饰器

迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延迟,是指在需要的时候才产生结果,而不是立即产生结果.这样在需要的时候才去调用结果,而不是将结果提前存储起来要节约内存.比如用列表的形式存放较大数据将会占用不少内存.这是生成器的主要好处.比如大数据中,使用生成器来调取数据结果而不是列表来处理数据,因为这样可以节约内存. 2.迭代到下一次的调用时,所使

Python自动化面试必备 之 你真明白装饰器么?

装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都 不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器. 1.先明白这段代码 #### 第一波 #### def foo():     print 'foo'   foo     #表示是函数 foo()   #表示执行foo函数   #### 第二波 

Python开发【第十四篇】装饰器

装饰器 什么是装饰器? ? 装饰器是一个函数,主要作用是用来给包装另一个函数或者类 包装的目的是不改变原函数名(或类名)的情况下改变或添加被包装对象的功能 函数装饰器 是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数 语法: def 装饰器函数名(参数): 语句块 return 函数对象 @张诗琪函数名 def 函数名(形参列表): 语句块 示例: # 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数 # 的语法 def mydeco(fn): def fx(): print("

(一)Python入门-5函数:09嵌套函数(内部函数)-数据隐藏

嵌套函数: 嵌套函数: 在函数内部定义的函数! 一般在什么情况下使用嵌套函数? 1. 封装 - 数据隐藏:外部无法访问“嵌套函数”. 2. 贯彻 DRY(Don’t Repeat Yourself) 原则: 嵌套函数,可以让我们在函数内部避免重复代码. 3. 闭包: 后面会详细讲解. #测试嵌套函数(内部函数) def test01(): print("test01,running") def test02(): print("test02,running") te

Python 函数对象、生成器 、装饰器、迭代器、闭包函数

一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数作为第一类对象有如下特性: #函数身为一个对象,拥有对象模型的三个通用属性:id(内存地址

函数嵌套与装饰器

*应用场景,位置参数中代表将多个参数存入元祖,**将关键字参数传入字典 位置参数: 位置形参:必须被传值,一一对应 位置实参:按从左到右的顺序与形参一一对应 关键字参数:按照key=value形式指名道姓的为形参传值,可以完全不按照顺序 1.关键字实参必须在位置参数的后面 2.可以混用位置实参与关键字实参,但不能为同一个形参重复传值 默认参数: 形参有默认值 可变长参数 形参:*args,**kwargs将多余的参数分别封装成元祖与字典 实参:将args kwargs分别打散 什么是命名关键字参