Python_day4:函数式编程

 

Python

PHP

函数式编程

允许把函数本身作为参数传入另一个函数,还允许返回一个函数

 

高阶函数

abs(),函数的调用不是函数本身

作为函数本身,函数名其实也是一个变量,可以改变指向,不过一般不这么做函数名可以对变量进行赋值使变量也指向函数

variable = abs

高阶函数:能够将函数作为参数的函数

x = -5

y = 6

f = abs

print(add(x,y,f))

$a = "abs";

function test($a){

           echo $a(-2);

}

test($a);

map()

将函数作用到一个可迭代对象上

map(function,Iterable)

def f(x):

    return x*x

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]

res = map(f,l)

print(list(res))

 

reduce()

从前两个开始,传入函数中,执行的返回值与第三个数继续传入,直到执行完毕

reduce(function,Iterable)

from functools import reduce

def p(x,y):

    return x*y

l = [1,2,3]

print(reduce(p,l))

最终结果是个数字

如果Iterable只有一个数,那直接返回该值

 

 

Python

PHP

filter()

筛选满足条件的Iterable元素

filter(function,Iterable)

def judge(x):

    return x % 2 == 0

l = [1,2,3,4]

res = filter(judge,l)

print(list(res))

 

sorted()

list进行排序

sorted(list)

l = sorted([36, 5, -12, 9, -21])

print(l)

可以传入第二个参数(函数),作为自定义排序的依据

sorted(list,key=function)

函数运算结果为排序标准

可以传入第三个参数进行反序排列

sorted(list,key=function,reverse=True)

 

 

 

 

 

Python

PHP

返回函数

将函数作为返回值的函数

def calc_sum(*args):

    def lazy_sum():

        sum = 0

        for i in args:

            sum = sum + i

        return sum

    return lazy_sum

res = calc_sum(*[1,2,3,4])

print(res())

使用闭包方式将函数名作为返回对象进行返回,执行函数后才能得到结果

 

闭包

返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量

def createCounter():

    l = [0]

    def counter():

        l.append(l[-1]+1)

        return l[-1]

    return counter

内部函数在引用外部参数,外部参数就不会被释放

 

global和nonlocal

在局部引用全局变量global

在局部引用非全局变量nonlocal

 

匿名函数

 

lambda variables:表达式

l = [1,2,3,4,5]

res = map(lambda x:x*x,l)

print(list(res))

匿名函数可以被使用在别的函数中作为参数或者返回值,但是不能在外部直接定义,需要定义的同时进行赋值

func = lambda x:x*x

 

 

Python

PHP

获取当前时间

import datetime

def now():   print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

now()

 

装饰器

定义wrapper()的前面加上@functools.wraps(func)

在函数运行阶段给函数添加附加功能

本质是一个以函数作为参数并返回附加功能函数的高阶函数

装饰器定义完成之后,使用方式为

在函数定义上方加入@装饰器名

import datetime

import functools

def log(func):

    @functools.wraps(func)

    def wrapper(*args, **kw):

        print('call %s():' % func.__name__)

        return func(*args, **kw)

    return wrapper

@log

def now():

    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

now()如果装饰器本身需要传入参数,那么就再写一层函数定义

def log(text):

    def decorator(func):

        @functools.wraps(func)

        def wrapper(*args, **kw):

            print('%s %s():' % (text, func.__name__))

            return func(*args, **kw)

        return wrapper

    return decorator

使用时:@log(参数)

 

一个检测函数运行时间的装饰器

import functools

import time

def metric(func):

    @functools.wraps(func)

    def wrapper(*args, **kw):

        start = time.time()

        result = func(*args, **kw)

        end = time.time()

        print('%s executed in %s ms' % (func.__name__, (end - start) * 1000))

        return result

    return wrapper

 

 

Python

PHP

进制转换

int(100,base=10)

int(100,base=2)

 

偏函数

import functools

把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数

import functools

int2 = functools.partial(int, base=2)

print(int2('111'))

也可以看成是为一个函数默认绑定一个参数

 

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值