python_函数式编程

Posted shaoqizhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_函数式编程相关的知识,希望对你有一定的参考价值。

函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability)。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。 

闭包,这个东东有点像OC的block,封装的一个函数。,表现形式

def outer(x):
    def inner(y):
        return x+y
    return inner

result = outer(2)(3)
print(result ,result)
打印:
result 5

使用闭包需要注意到遏地方

1.闭包无法修改外部函数的局部变量

def outer():
    c = 0
    print(out c1 , c)
    def inner():
        c = 5
        print(inner c, c)
    inner()
    print(out c2, c)

outer()
 打印:
out c1  0
inner c 5
out c2 0

2.闭包无法直接访问外部函数的局部变量

 

装饰器:代码运行期间动态增加功能的方式,称之为“装饰器”。OC的runtime?

特点:1.参数是一个函数   2.返回值是一个函数

表现形式 - 及调用

#装饰器
def my_decorator(func):
    def wraper(*args, **kwargs):
        print(hello world)
        func(*args, ** kwargs)

    return wraper

@my_decorator
def run():
    print(run)

run()
打印:
hello world
run

装饰器如果不加限制,就会偷换调用者的方法名,这是很不安全的操作,如下

#装饰器
def my_decorator(func):
    def wraper(*args, **kwargs):
        print(hello world)
        func(*args, ** kwargs)

    return wraper

@my_decorator
def run():
    print(run)

func_name = run.__name__
run()
print(吊梁换柱后的函数, func_name)
打印:
hello world
run
吊梁换柱后的函数 wraper

需要导入个框架限制

from functools import wraps

并在内部函数定义前加上@wraps(函数名),这样就好了。如下

#装饰器
def my_decorator(func):
    @wraps(func)
    def wraper(*args, **kwargs):
        print(hello world)
        func(*args, ** kwargs)

    return wraper

@my_decorator
def run():
    print(run)

func_name = run.__name__
run()
print(吊梁换柱后的函数, func_name)
打印:
hello world
run
吊梁换柱后的函数 run

 

以上是关于python_函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

Python函数式编程,范围和变量。我哪里错了?

python-函数式编程,反射,random,md5,pickle,json,re,time

Python-17-函数_06_函数式编程

Python语法练习_函数式编程

函数式编程——匿名函数

18Python函数式编程