美文网首页
函数之生成器和闭包

函数之生成器和闭包

作者: endmoon | 来源:发表于2018-11-04 21:19 被阅读6次

用例:

#闭包的应用

def create(pos):
    def game(move_direction,step):
        '''
        实现点在坐标中移动
        :param move_ddirection: 移动方向
        :param step: 移动步长
        :return:
        '''
        x=pos[0]+move_direction[0]*step     #这里的pos[0]代表x轴初始值位置和move_direction[0]为x轴移动的方向
        y=pos[1]+move_direction[1]*step     #这里的pos[0]代表y轴初始值位置和move_direction[0]为y轴移动的方向
        pos[0]=x                            #将更新的x轴位置赋值给pos变量的x轴
        pos[1]=y                            #将更新的y轴位置赋值给pos变量的y轴
        return pos              #返回更新后的坐标位置的函数参数
    return game                 #返回create(pos)的值为game函数名
game=create([10,1])          #设置坐标初始位置
print(game([1,0],2))         #打印移动后的位置
#装饰器的应用
import time
def count(mysums):
    mysum=0
    for mysum in range(mysums):
        mysum+=mysums

def count_time(func):    #用于传递调用的函数给装饰器函数
    def wrapper(*args,**kwargs):   #装饰器,用于包装调用的函数
        start_time=time.time()  #调用函数前
        func(*args,**kwargs)                  #调用函数
        end_time=time.time()    #执行完函数后的时间
        print(end_time-start_time)  #打印执行函数的时间
    return wrapper      #返回装饰器函数名称



f=count_time(count)     #将函数count_time(count)把count函数作为参数传递,同时把返回值wrapper(装饰器函数名称)赋值给变量f
f(10000000)      #这个相当于wrapper(1,2),也就是调用装饰器函数,同时把参数传递给被装饰的函数func作为参数使用

# @count_time     #使用装饰器,给下面的函数
#创建需要调用的函数
# def count(mysums):
#     mysum=0
#     for mysum in range(mysums):
#         mysum+=mysums

# count(1000000000)

@count_time     #这个是调用装饰器的语法,直接使用装饰器,下面写需要装饰的函数就可以了
def count(results):
    result=1
    for result in range(results):
        result*=2
    print(result)
count(1000000000)


#通过两个被装饰的函数可以知道,装饰器不需要做任何修改,就可以同时给两个功能不同的函数使用,这个装饰器的作用就是用来计算函数运行的时间,至于是什么函数它不关心,需要就只管调用就可以了,和不用装饰器实现的区别就是,多个函数如果要想使用类似计算运行时间这种功能,需要给每个函数进行条件,如果要把改变功能,需要给每个函数都做修改,而装饰器就不需要,直接对装饰器修改,所有的函数就都会根据改变的功能应用上,无论是使用功能还是修改功能上都极大的节省了时间和代码量

用例:

#计数装饰器
def count(func):
    func.num=0
    def wrapper():
        func()
        func.num+=1
        print('第{n}次调用函数{f}'.format(n=func.num,f=func.__name__))
    return wrapper
@count
def show():
    print('我是被装饰的函数')
show()

相关文章

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 函数之生成器和闭包

    用例: 用例:

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • Swift-闭包

    闭包的特点:一个函数有权访问另外一个函数内的变量和参数 闭包—匿名函数 结尾闭包 衍生 内容捕获 闭包和函数是引用类型

  • 闭包函数

    闭包函数 闭包,又称闭包函数或者闭合函数,其实和嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

  • 变量

    闭包: 什么是闭包? 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾机构回收; 用闭包做...

网友评论

      本文标题:函数之生成器和闭包

      本文链接:https://www.haomeiwen.com/subject/ikvdxqtx.html