2017/06/05 Python 相关概念(二)

map/reduce
- map的格式是map(f,[a,b,c]),就是把a,b,c依次的代入到f函数中直行,并且返回一个list类型的结果。其目的是将函数的作用抽象化
- 返回的结果是一个list,所以需要先y = list(map(f,[])),然后再print(x)
- reduce的作用是把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
- 使用reduce的时候需要from functools import reduce

filter
- 也是接收两个参数,其中一个是函数,另一个输入是序列。但是不同于map的点在于,输入函数的返回值要求是bool型的。比如,删掉序列中的不是5的倍数的元素

# -*- coding:utf-8

def is_5(x):
    return x % 5 == 0

x = list(filter(is_5,[1,2,3,5,10,7,8,15,4,20]))
print(x)

廖雪峰的网站上的讲解题目是“埃氏算法”寻找序列中的素数,其中用到了lambda,还需要理解,尤其是如何将变量序列传递进去,因为

# -*- coding: utf-8 -*-
#判断是否可除尽
def is_divisible(n):
    return lambda x : x % n != 0

def jud(x):
    return list(filter(is_divisible(x[0]),x))

def find_prime(x):
    L = []
    while( len(x) > 1 ):
        L.append(x[0])
        x = jud(x)
    L.append(x[0])
    return L

# 测试
a = range(2,1000,1)
a = list(a)
b = find_prime(a)
print(b)

运行结果

sorted
也是一个高阶函数,可以接收一个key函数进行检索,格式如下:sorted(list,key = func_name),表示对list进行函数func_name的变换之后,再进行排序。甚至可以传入多个函数
比如sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True),表示先将首字母小写之后排序,并且是逆序

返回函数
就是定义在函数内部的函数,并且通过return返回该函数以及该函数的一些引申。但是,如果不加括号(),就可以不得到函数的运算值,加了括号()就可以获得函数的值。
要注意的是:在函数中不要代入会改变的值,比如循环的值,因为只会得到最后的代入值结果。

匿名函数
lambda应该就是匿名函数。我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
所以这样就可以解释前面提到的使用lambda的地方了?(还是不能解释为什么没有传递,X就进入到里面共调用了)

装饰器
之前讲过函数可以赋值给变量,那么可以通过调用变量的__name__属性来查看函数的名字。(注意是两个下划线)
装饰器:在函数定义之前放置@装饰器的名称,这样在调用函数的时候,首先会执行装饰器的内容,然后执行函数本身
不想看装饰器的后面部分了

偏函数
就是在有的时候传入的变量数目太多,而且有有一些固定的时候,可以使用偏函数创建新函数,固定住一些函数。比如int2 = functools.partial(int,base = 2)就是固定住传进去的base,然后重新生成一个函数。使用的时候需要import functools

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值