• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
demoFootman
博客园    首页    新随笔    联系   管理    订阅  订阅

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

 

这不是开往幼儿园的车~
posted @ 2018-08-06 13:29  demoFootman  阅读(175)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3