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_函数式编程的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- [学习笔记]JavaScript之函数式编程
欢迎指导与讨论:) 前言 函数式编程能使我们的代码结构变得简洁,让代码更接近于自然语言,易于理解. 一.减少不必要的函数嵌套代码 (1)当存在函数嵌套时,若内层函数的参数与外层函数的参数一致时,可以这 ...
- 函数式编程之柯里化(curry)
函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. var add = function(x) { return function(y) { retur ...
- 关于Java8函数式编程你需要了解的几点
函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...
- Haskell 函数式编程快速入门【草】
什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Hask ...
- java1.8函数式编程概念
有关函数式编程 ·1 函数作为一等公民 特点:将函数作为参数传递给另外一个函数:函数可以作为另外一个函数的返回值 ·2 无副作用 函数的副作用指的是函数在调用过程中,除了给出了返回值外,还修改了函数外 ...
- python_面向对象编程
一.编程范式 程序员通过特定的语法+数据结构+算法告诉计算机如果执行任务,实现这个过程有不同的编程方式,对这些不同的编程方式进行归纳总结得出来的编程方式类别,即为编程范式 编程范式:面向过程编程.面向 ...
- 让JavaScript回归函数式编程的本质
JavaScript是一门被误会最深的语言,这话一点不假,我们看下它的发展历史. 1995年,Netscape要推向市场,需要一门脚本语言来配套它.是使用一门已有的语言,还是发明一门新的语言,这也不是 ...
- python基础-函数式编程
python基础-函数式编程 高阶函数:map , reduce ,filter,sorted 匿名函数: lambda 1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层 ...
随机推荐
- SetProcessWorkingSetSize减少内存占用
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] public stat ...
- 【javascript】定时器组件
'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...
- 我们在学习JDBC的时候会过度到J2EE。
我们在学习JDBC的时候会过度到J2EE. 在Swing的组件中,基本上都是在AWT组件的名称前面加“J”. 一般情况下,除了Choise等组件: import javax.swing.*;好要加 ...
- PHP读取文本文件(TXT)
<? header("content-type:text/html;charset=utf-8"); $file = "demo.txt"; ###判断该 ...
- C#中 Excel和其他文件类型的Content-Type/mime-type
C#中 Excel和其他文件类型的Content-Type/mime-type For BIFF .xls files application/vnd.ms-excel For Excel2007 a ...
- adb logcat查看某个进程的输出日志
adb logcat查看某个进程的输出日志 adb logcat 默认是没有这个功能的,我实现了一个小bash函数,添加到你$HOME/.bashrc 文件中: # 作用:能够通过进程名显示log # ...
- Window应急响应(五):ARP病毒
0x00 前言 ARP病毒并不是某一种病毒的名称,而是对利用arp协议的漏洞进行传播的一类病毒的总称,目前在局域网中较为常见.发作的时候会向全网发送伪造的ARP数据包,严重干扰全网的正常运行,其危害甚 ...
- osg shader 相机观察矩阵逆矩阵 求顶点世界坐标
uniform mat4 osg_ViewMatrixInverse;//osg内置uniform void main() { vec4 posWorld = osg_ViewMatrixInvers ...
- 异步任务神器 Celery-入门
一.Celery入门介绍 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务.比如,在 Web 开发中,对新用户的注册,我们通常会给他 ...
- (二)区块链的共识算法:PoS 及其 例子 代码 实现
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...