python-函数

作者: python_run | 来源:发表于2019-04-02 01:58 被阅读0次

    参考廖雪峰python3知识点的总结

    函数返回值--函数

    • 函数可以作为函数的返回值:
    1. 函数作为返回值的使用:表示返回的函数对象,利用函数对象()就可以执行该方法
    2. 函数作为返回的应用场景:
      1. 作为返回值的函数现在暂时用不上,则可以将其作为函数对象值先进行传递保存起来;
      2. 返回值函数外面嵌套函数的作用往往是用来接收参数,然后将该参数作为局部变量提供给返回值函数使用,当外部函数得到执行,那么外部函数的局部变量就会给内部函数使用
      3. 返回的是内部函数的函数对象,使用 内部函数()便可以执行该方法,使用 内部函数(参数) 就又可以使用它自己的参数
    def func():
        i = 0
        def inter(a):
            print('a:',a,'i:',i)
        return inter
    #使用()表示得到执行,使用(参数)表示给予其自己的参数
    func()('a')
    
    1. 这种使用,往往是在一个方法A的传参时使用嵌套函数B的返回值函数C来传递C这个函数对象供A方法使用。见如下实例:
    def include(num):
        return lambda x:x**2
    def func(a):
        print('现在我要开始使用……',a())
    func(include(1))
    

    注意点:每次返回的函数对象时不相同的,即没调用一次嵌套函数就会返回一个新的函数对象。

    • 函数作为返回值(闭包)存在的问题

    当函数作为返回值的时候,标志就是嵌套函数内部的函数不立刻执行,那么当他们引用嵌套函数的变量,并且这个变量不停变化的时候,那么这些函数访问到的变量都将是最终变量值,即访问到的值是统一的,可能存在安全隐患
    如果这个内部函数立刻得到执行,那么就不存在这个问题,因为每次变量都得到及时的使用。
    解决办法: 1.首先充分理解其原因,本质就是变量名和对象的指向问题,其指向的是最终的对象值,所以每个函数访问到的值是一样的,所以方法一就是可以使用不同的变量值,那么他们指向不同的对象,那么内部函数得到的值就是不同的。2.充分理解命名空间的作用,所以可以在内部函数的外面再绑定一个函数,用这个函数来固定变量。

    def func():
    #     这个函数用来固定变量,固定好变量给返回函数使用
        def intern(i):
            def g():
                print(i**i)
            return g
        return (intern(i) for i in range(4))
    for i in func():
        i()
    

    匿名函数

    • 匿名函数的特点
    1. lambda x:x2表示定义了一个匿名函数,其中x表示接受的参数,x2表示返回值,其不用return
    2. 匿名函数实质上表示的是函数对象,其可以作为返回值和参数,但想要执行它,则需要将它赋值给变量,然后用变量名()来执行。

    装饰器

    作用:就是用来补充函数本身的功能

    • 不提供参数的装饰器:
    def log(func):
        def wrapper(*arg,**args):
            print('%s 执行'%func.__name__)
        return wrapper
    @log
    def func():
        print('时间')
    func()
    

    其本质上就是func = log(func),表示对func进行装饰,装饰好后进行待用。

    • 提供参数的装饰器
    def log(text):
        def decorate(func):
            def wrapper(*arg,**args):
                print('%s 执行'%func.__name__)
            return wrapper
        return decorate
    @log('execute')
    def func():
        print('时间')
    func()
    

    实质上是func = log('execute')(func),其同样表示对func函数进行装饰,并且log('execute')进行装饰了一次,(func)函数又装饰了一次,即装饰了两次。
    注意点:以上的两次装饰,对于func = log('execute')(func)左边的变量名,返回的是装饰过的函数对象wrapper,所以其函数名变为wrapper,
    在python中可以使用@functools.wraps(func)写在一个函数的前面,表示将该函数的name属性改为和func的name属性相同。

    偏函数

    作用:用来控制变量的值,使用 functools.partial 在原函数的基础上返回新的函数,达到减少调用参数的作用
    形式:

    import functools
     int2 = functools.partial(int, base=2)
    
    max2 = functools.partial(max, 10)
    

    注意点:其中用参数:值,表示对*args进行控制,其中用值,则从arg的左边开始填参数。

    相关文章

      网友评论

        本文标题:python-函数

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