Python函数式编程(把函数作为参数传入)

map:接受两个参数(函数,Iterable),map将传入的函数依次作用于Iterable的每个元素,并且返回新的Iterable

def f(x):
    return x*x
r = map(f,[1,2,3,4])    #此时的r为惰性求值——可用next()和for...in取值
#通过list()返回全部
print(list(r))  #[1, 4, 9, 16]

reduce:接受两个参数(函数,序列),reduce把一个函数作用于序列上,返回的结果继续和序列的下一个元素做累积计算,其效果为:reduce(f,[x,y,z])=>f(f(x,y),z)

from functools import reduce
def add(x,y):
    return x+y
reduce(add,[1,3,5,7,9]) #25

filter:过滤序列。接受两个参数(函数,序列),filter把函数作用于序列上,根据返回值是否为True,决定是否放弃该元素

def is_odd(x):
    return x%2==1
list(filter(is_odd,[1,2,3,4,5,6,7,8,9]))    #filter惰性求值[1, 3, 5, 7, 9]

sorted:排序,可排序对象包括数字list、字符串list、dict等,可接受三个参数,后两个为可选

# sorted([],key=express,reverse=True) key:对每个元素的处理方法   reverse:是否反向排序
sorted([0,1,-2,-1,6,3,8],key=abs,reverse=True) #[8, 6, 3, -2, 1, -1, 0]

匿名函数 lambda:匿名函数关键字 :前的元素表示匿名函数的参数 匿名函数不用谢return表达式,返回值就是该表达式的值

m = list(map(lambda x: x*x,[1,2,3,4]))
print(m)    #[1, 4, 9, 16]

装饰器:代码运行期间动态增加功能

#在now函数运行前自动打印日志
import functools
def log(func):
    @functools.wraps(func)
    def wrpper(*args,**kw):
        print("call %s()" % func.__name__)
        return func(*args,**kw)
    return wrpper
# 调用装饰器
@log
def now():
    print("hello")

now()   #call now() hello

偏函数:functools.partial 把函数的某些参数固定住,返回一个新的函数,使调用更简单

import functools
int2 = functools.partial(int,base=2)
print(int2("1000000"))  #64
时间: 2024-10-16 12:19:21

Python函数式编程(把函数作为参数传入)的相关文章

Python进阶之函数式编程(把函数作为参数)

什么是函数式编程? 什么是函数式编程? 函数:function 函数式:functional,一种编程范式 函数式编程是一种抽象计算的编程模式 函数≠函数式,比如:计算≠计算机 在计算机当中,计算机硬件是最底层的,而越往上语言越高级 低--------------------------------->高计算机硬件-->汇编语言-->c语言-->Python语言 ↓ ↓ ↓ 指令 函数 函数式计算机------------------------>计算(数学) ○ 函数式编程

1.python函数式编程-map函数

编程方法论 面向过程 函数式 面向对象 面向过程 将编程过程拆分成多个步骤,在函数中按照每个步骤进行编程: 函数式编程 编程语言定义的函数+数学意义的函数 1.不可变,不用变量保存状态,不修改变量: 2.第一类对象,函数即变量---------高阶函数:把函数当做参数传递给另外一个函数:返回值中包含函数.(装饰器) 3.尾调用:在函数的最后一步调用另外一个函数(最后一行不一定是函数的最后一步) 调用栈:在系统调用递归函数的时候不是最后一步(区别最后一行),则需要保留当前层的状态.如果是最后一步进

python函数式编程-偏向函数

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数

Python 函数式编程--返回函数

1.1   返回函数 1.1.1   函数作为返回值 >>> def lazy_sum(*args):    #可变参数 ...    def sum(): ...        ax = 0 ...        for i in args:    #调用外部函数的参数 ...             ax = ax + i ...        return ax ...    return sum       --这里返回的是个函数 ... >>> >>

Python 函数式编程--匿名函数Lambda

1.1   匿名函数 有些时候,不需要显式地定义函数,直接传入匿名函数更方便. >>> list(map(lambda x:x*x, (1, 2, 3, 4, 5))) [1, 4, 9, 16, 25] 冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. >>> f = lambda x: x * x >>> f(2) 4 >>> def build(x, y): ..

python函数式编程-匿名函数

>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81] 关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果.

python函数式编程-返回函数

一:函数作为返回值 >>> def lazy_sum(*args): ... def sum(): ... ax = 0 ... for n in args: ... ax = ax + n ... return ax ... return sum ... >>> f=lazy_sum(1,2,3,4,5) >>> >>> f <function sum at 0x7fd1b3eccaa0> >>> f(

python之函数式编程与函数闭包

防伪码:忘情公子著 Python函数式编程: 函数式编程: 也称作泛函编程,是一种编程范型,说白了就是实现可以把函数当参数传递给另一个函数: 它将电脑运算视为数学上的函数计算,并且避免状态以及可变数据: 函数式编程语言最重要的基础是lambda演算,而且lambda演算的函数可以接受函数当作输入和输出 Python支持有限的函数式编程功能: filter(func,seq): 调用一个布尔函数func来迭代遍历每个seq中的元素:返回一个使func返回值为true的元素的序列 In [1]: d

Python中将函数作为另一个函数的参数传入并调用

在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除,以function(*args, **kwargs)进行替代,所以也不应该再使用apply方法 示例代码: def func_a(func, *args, **kwargs): print(func(*args, **kwargs)) def func_b(*args): return args i

深入浅出 Python 函数式编程

1.函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编程). 这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态.函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算