美文网首页ITS·黑客
[python]函数与函数式编程复习

[python]函数与函数式编程复习

作者: JEZAU | 来源:发表于2017-04-18 09:18 被阅读0次

    有一段时间高估了自己,都没有认真看教程。
    现在惨了,得一课课复习!
    要吸取教训。
    以下笔记重点为装饰器

    返回函数

    注意1:当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

    >>> f1 = lazy_sum(1, 3, 5, 7, 9)
    >>> f2 = lazy_sum(1, 3, 5, 7, 9)
    >>> f1==f2
    False```
    f1()和f2()的调用结果互不影响。
    
    
    注意2:函数内函数的变量可以被外层函数引用。
    注意3:一种赋值方法
    

    a,b,c = [1,2,3]
    a
    1

     
    然后来理解下面的代码:
    

    def count():
    fs = []
    for i in range(1, 4):
    def f():
    return i*i
    fs.append(f)
    return fs

    
    

    f1, f2, f3 = count()```
    每次循环都创建了一个新的函数,一共循环了三次,但因为没有调用,所以都只是一个函数名f,然后fs = [f,f,f] ,这时候的i= 3,因此f1,f2,f3赋值的时候都为f,调用都为3*3 = 9

    而以下代码中

    def count():
        def f(j):
            g = lambda j:j*j
            return g
        fs = []
        for i in range(1, 4):
            fs.append(f(i))
        return fs
    

    f(i)立刻被执行,因此i的当前值被调用

    匿名函数

    a = lambda m :b```
    相当于 
    

    def a(m):
    return b```

    装饰器

    接受一个函数作为参数,并返回一个函数,使得原来函数功能不变的情况下拓展函数功能
    经过我无数次的不同的尝试以后,有如下的总结。

    总结1:当装饰器只有函数名的时候,将装饰器下面的函数名作为其参数,如果装饰器有函数名加上参数,那么相当于一个带参数的函数返回了一个函数后,再将被装饰的函数名作为其参数。
    当装饰器的函数名不接受参数的时候,则会提示错误:
    TypeError: log() takes 0 positional arguments but 1 was given

    2.定义函数中,return作为一个函数定义的结束,return之后的print都不起作用,return之前的值都属于函数的一部分。调用的时候print语句会直接打印出来,return的储存在你赋值的变量中,如果不赋值给变量则没有意义,你用不了它。然后print变量的时候就会出来return的结果(不包括print后面的结果)
    因此如果要在前后加上东西,只能写在同一行利用占位符。

    def m(x):
        print('1')
        return 3*x
        print('6')
    
    a = m(10) #输出1
    print('分割')
    print(a) #输出30
    print('分割')
    m(10)  #输出1
    print('分割')
    print(m(10)) #输出 1 30
    

    练习:

    def log(func):
        def wrapper(x):
            print('begin call \n %s \n end call' % func(x))
        return wrapper
    
    def f(x):
         return x*x```
    

    f(10)
    begin call
    100
    end call

    
    另一个练习只要用一个条件判断即可,不再赘述。

    相关文章

      网友评论

        本文标题:[python]函数与函数式编程复习

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