首页 > 代码库 > python第四天装饰器+迭代器+生成器

python第四天装饰器+迭代器+生成器

1.函数嵌套:在调用一个函数的过程中,调用了其他函数

def f1():
    x=1
    def f2():
        print(from f2)
    f2()
f1() 

2.名称空间与作用域

 a. 名称空间:存放名字与变量值绑定关系的地方

    (1)内置名称空间:在python解释器启动时产生,存放一些python内置的名字

    (2)全局名称空间:在执行文件时产生,存放文件级别定义的名字。

    (3)局部名称空间:在执行过程中,如果调用了该函数则会产生该函数的局部名称空间。在调用该函数的时候生效,调用结束时失效

  加载顺序:   内置----> 全局 ----> 局部

  查找顺序:   局部-----> 全局-----> 内置

x=0
def f1():
    x=1
    def f2():
        x=2
        def f3():
            x=3
            print(f3中x是 ,x)
        f3()
    f2()
    print(f1中x是  ,x)
f1()

 b.作用域:

   (1)全局作用域:全局存活,全局有效。

   (2)局部作用域:局部存活,局部有效。

   (3)作用域关系是在函数定义阶段就已经固定,与函数调用位置无关

x=1
def f1():
    def f2():
        print(x)
    return f2

def f3(func):
    x=2
    func()
f3(f1())

3.闭包函数

  (1).定义在函数内部的函数

  (2).包含对外部作用域的引用,而不是对全局作用域的引用。就可以称为闭包函数。

例子:

x=1
def  f1():
    x=11111111111
    def f2():
        print(x)
    return f2

func=f1()
func()

f2就是闭包函数

 

=====================================

eval 的用法:

  将字符串中包含的字段单独拿出来执行一下。

dic={"name":"user01","age":"18"}
print(type(dic))

dic=eval(dic)
print(type(dic)) 

技术分享

====================================

 

 

4.装饰器

  (1).装饰器遵循的原则:a.不修改被装饰对象的源代码。b.不修改被调用对象的调用方式。

  (2).装饰器的目的:为其他函数添加新功能。

## 装饰器必须写在被装饰对象的正上方,并且是单独一行。

 

装饰器框架:

def timer(func):
     def wrapper():
         func()
     return wrapper

 

加上参数:

 def timer(func):
     def wrapper(*args,**kwargs):
         func(*args,**kwargs)
     return wrapper

 

 

 

例子:

(无参)

import time

def timmer(func):
    def wrapper():
        start=time.time()
        func()
        stop=time.time()
        print(run time is %s %(stop-start))
    return wrapper

@timmer # index=timmer(index)
def index():
    time.sleep(3)
    print(welcome to index)

 

 

例子:

(有参)

import time

def timmer(func):
    def wrapper(*args,**kwargs):
        start=time.time()
        res=func(*args,**kwargs)
        stop=time.time()
        print(run time is %s %(stop-start))
        return res
    return wrapper

@timmer # index=timmer(index)
def index():
    time.sleep(3)
    print(welcome to index)
    return 123

@timmer # home=timmer(home)
def home(name):
    time.sleep(2)
    print(welcome %s to home page %name)

 

5.迭代器

 可迭代对象:凡是对象下有__iter__ 方法的都是可迭代对象。

 迭代器对象:可迭代对象执行内置的__iter__方法,得到的结果就是迭代器对象。

 

 

6.生成器

 

7.三元表达式、列表解析、生成器表达式。

python第四天装饰器+迭代器+生成器