Python函数式编程

Python函数式编程

也称泛函编程,是一种编程泛型,它将电脑运算视作数学上的函数计算,并且避免状态以及可变数据;

函数式编程语言最重要的基础是lambda演算,而且lambda演算的函数可以接受函数当做输入和输出;

Python支持有限的函数式编程功能

1)、filter(func,seq):

调用一个布尔函数func来迭代遍历每个seq中的元素,返回一个是func返回值为true的元素的序列

filter()使用示例:

In [1]:def f1(x):

  ...:    if x > 10:

  ...:        returnTrue

  ...:    else:

  ...:        return False

  ...:    

In [2]: l1= [1,2,44,55,22]

In [3]:filter(f1,l1)

Out[3]:[44, 55, 22]

In [4]: l2= [1,2,11,22]

In [5]:filter(f1,l2)

Out[5]:[11, 22]

2)、映射器:map()

map()将函数调用“映射”到每个序列的对应元素上并返回一个含有所有返回值的列表

map(func,seq1[,seq2...]):将函数func作用于给定序列(s)的每个元素,并用一个序列提供返回值;

如果func为none,func表现为一个身份函数,返回一个含有每个序列中元素集合的n个元组的列表

map()使用示例:

In [1]: l1= [0,1,2,3,4,5,6];l2 =["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]

In [2]:map(None,l1,l2)

Out[2]:

[(0,'Sun'),(1, 'Mon'),(2, 'Tue'),(3, 'Wed'),(4, 'Thu'),(5, 'Fri'),(6,'Sat')]

In [3]: l1= [0,1,2,3,4,5,6];l2 =["Sun","Mon","Tue","Wed","Thu","Fri"]

In [4]:map(None,l1,l2)

Out[4]:

[(0,'Sun'),(1, 'Mon'),(2, 'Tue'),(3, 'Wed'),(4, 'Thu'),(5, 'Fri'),(6,None)]

In [5]:def f1(x): return x*2

In [6]:map(f1,l1)

Out[6]:[0, 2, 4, 6, 8, 10, 12]

In [7]:map(f1,l2)

Out[7]:['SunSun', 'MonMon', 'TueTue', 'WedWed', 'ThuThu','FriFri']

In [8]:def f2(x,y): return x*2,y*2

In [9]: l1= [0,1,2,3,4,5,6];l2 =["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]

In [10]:map(f2,l1,l2)

Out[10]:

[(0,'SunSun'),(2, 'MonMon'),(4, 'TueTue'),(6, 'WedWed'),(8,'ThuThu'),(10, 'FriFri'),(12, 'SatSat')]

In [11]:map(f2,l2,l1)

Out[11]:

[('SunSun', 0),('MonMon', 2),('TueTue', 4),('WedWed',6),('ThuThu', 8),('FriFri', 10),('SatSat', 12)]

3)、reduce(func,seq[,init]):

将二元函数作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列元素),连续地将现有的结果和下一个值作用在获得的随后结果上,最后减少我们的序列为一个单一的返回值;如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素

reduce()使用示例:

In [12]:def f3(x,y): return x+y

In [13]:l1

Out[13]:[0, 1, 2, 3, 4, 5, 6]

In [14]:reduce(f3,l1)

Out[14]:21

In [15]:reduce(f3,l1,10)

Out[15]:31

练习:

使用filter函数,返回/etc/passwd中包含了/bin/bash字串的所有用户名为一个列表

[root@test0527]# vim test4.py

#!/usr/bin/python27

#

importre

filename ='/etc/passwd'

f1 =open(filename,'r')

flist =f1.readlines()

ush =[]

user =[]

 

for i inflist:

   j = [(i.split(':')[0]),(i.split(':')[6])]

   ush.append(j)

 

deffunc(x):

   if x[1] == "/bin/bash\n":

       return True

   else:

       return False

 

userbash=filter(func,ush)

for k inuserbash:

   user.append(k[0])  

f1.close()

printuserbash

printuser

#printflist

[root@test0527]# ./test4.py

[['root','/bin/bash\n'], ['field', '/bin/bash\n'], ['mysql','/bin/bash\n']]

['root','field', 'mysql']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值