Python函数式编程

作者:江苏福彩快三计算机网络

Python中有一点数不清函数式编制程序的方法,本文介绍的是最广大的几个函数

Python中有不菲函数式编制程序的主意,本文介绍的是最广大的多少个函数

兵器谱

 

①从参数方面来说:

注:本文基于python2.7.分裂的版本或然会促成差别

注:本文基于python2.7。分歧的本子大概会招致差距

if

1 使用%来格式字符串

map()函数:

Zip - 集资

Zip - 集资

行业内部格式zip(seq[, seq[, seq]])

举个栗子:

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9)

abc = zip(a, b, c)

abc的结果为[(0, 4, 7), (1, 5, 8), (2, 6, 9)]

所以zip函数的机能早就很分明了,它就好比abc三家融资,一家出一个.

那当c家很富,a家没那么富怎么办吧?

a = (i for i in range(2))

b = [4,5,6]

c = (7,8,9,10)

abc = zip(a,b,c)

abc三家融资的结果为[(0, 4, 7), (1, 5, 8)],说好的一家出叁个,你家没有了,那我也就不出了(你看,代码也那样具体…)

之所以举的板栗不全部是list,正是想说多美滋(Dumex)个小的注意点,zip接受的都以颇有迭代的属性的参数(__iter__),这些前边会讲

python未有三目运算符,笔者挺烦懑的,举个例子把多个整数非常大的丰盛复制给多个变量,有三目运算符的语言会这么写:

print("hello %s : %s" % ("AAA", "you are so nice"))

map()包蕴多少个参数,第3个是参数是二个函数,第贰个是类别(列表或元组)。个中,函数(即map的第三个参数地点的函数)能够接收三个或四个参数。

规范格式zip(seq[, seq[, seq]])

Filter - 审查

专门的职业格式filter(func, seq)

举个栗子:

a = [1,2,3]

b = [4,5,6]

c = [7,8,9]

result = filter(lambdax: sum(x)>14, [a, b, c])

result为[[4, 5, 6], [7, 8, 9]]

未来有三个档期的顺序,可是这么些类别要有个财力检查核对,需求资金财产满足lambda规范的小卖部才有身份加入招标(func是三个bool类型的函数)

a = 1b = 2c = a > b ? a : b

 

reduce()函数:

举个栗子:

Map - 招标

规范格式map(func, seq[, seq[, seq]])

举个栗子:

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9)

abc = map(lambdax,y,z: x y z, a, b, c)

abc的结果为[11, 14, 17]

要么那么些招标的门类lambda函数要求招三家(函数的参数个数)来涉足这几个项目,这几个连串分前中后三期的投入.

若果abc三家幸运的入选,而且三家都早已希图好了四个阶段的投入.所以先前时代a出0,b出4,c出7投入到lambda项目,项目中期再次回到收入11

种种类推,直到三家的投入全体甘休,所以返还的收益正是[11, 14, 17]

假如c有钱(c = [7,8,9,10,11]),c说:老子有钱,小编要加进投入. 那ab没钱怎么做?轻松!!ab就安安分分的说:老子没钱 就好了(a = [0,1,2,None,None], b = [4,5,6,None,None])

就此lambda项目就收到到如此的投入[None,None,10], [None,None,11],这里要留意管理这个None,因为非常大心他就能够报NoneType的问题

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9,10,11)

abc = map(lambdax,y,z: str(x) str(y) str(z), a, b, c)

故而abc的结果为['047', '158', '269', 'NoneNone10', 'NoneNone11']

map接受的也都是具备迭代的习性的参数

静心,当func为None的时候,map的功用就类似与zip了.谈起底map也正是先集资(zip)再干事(func),func空头支票的时候就剩集资(zip)了

新兴意识Python的if语句能够写成一行实现上述成效:

2 使用zip来将多个list构造为一个dict

reduce() 首个参数是函数,第四个是 连串(列表或元组)。但是,其函数必得接受多个参数。

a = (i for i in range(3))
b = [4, 5, 6]
c = (7, 8, 9)
abc = zip(a, b, c)

Reduce - 一次投入

正式格式reduce(func, seq[, init])

举个栗子:

a = (i for i in range(3))

result = reduce(lambdax,y: x y, a)

result为3

reduce的干活流程为:

1.func(seq[0], seq[1]) ->seq的率先和第二要素接纳到func

2.func(func(seq[0], seq[1]), seq[2]) ->上一步func的结果作为func的第叁个参数,seq第三个参数作为func的第贰个因素

……

n.func(...func(func(seq[0], seq[1]))...,seq[n]) ->上一步func的结果作为func的率先个参数,seq第n个参数作为func的第贰个成分

下图能够很好的验证那些历程:

江苏福彩快三 1

上述是init子虚乌有的时候,当init存在的时候,第一步的func的率先个参数为init,seq的率先个成分为func的第二参数,前面流程就同样了

那就好比把第一品级的渔利充任二回投资的本金在开展投资。

c = a if a > b else b

names = ['jianpx', 'yue']   
ages = [23, 40]   
m = dict(zip(names,ages)) 
print (m)

 

abc的结果为[(0, 4, 7), (1, 5, 8), (2, 6, 9)]

结语

在python中等高校函授数式编制程序能异常的大程度上节约我们的支出时间,利用好了就可以是友好的第一次全国代表大会利器

文中涉及的好比在大概会有不当,毕竟不是占低价职业的….海涵

That's all,Thank you

越多请参阅4coding

<<<<<<<< 原创 转载请申明出处 >>>>>>>

with

 

②从对传进去的数值效率来说:

进而zip函数的意义早就很理解了,它就好比abc三家融资,一家出一个.
那当c家很富,a家没那么富如何是好呢?

我们平常以如下情势操作文件:

3 不采用不经常变量来交流三个值

map()是将盛传的函数依次功效到行列的各类成分,各样元素都是独自被函数“效能”一回;(请看上面包车型地铁尖栗)

a = (i for i in range(2))
b = [4, 5, 6]
c = (7, 8, 9, 10)
abc = zip(a,b,c)

try: f = open('/path/to/file', 'r')

a,b = b,a

reduce()是将传人的函数功用在种类的率先个要素获得结果后,把这些结果再三再四与下多个成分功用(积存总括),

abc三家融资的结果为[(0, 4, 7), (1, 5, 8)],说好的一家出一个,你家未有了,那自身也就不出了(你看,代码也这么具体…)
之所以举的栗子不全是list,便是想证多美滋(Beingmate)个小的注意点,zip接受的都以兼具迭代的性质的参数(__iter__),那些后边会讲
Filter - 审查

print f.read()

 

末尾结果是富有的成分相互功能的结果。(请看上边包车型大巴栗子)

正式格式filter(func, seq)

finally:

4 使用str.join来连接字符串

 

举个栗子:

if f:

fruits = ['apple', 'banana']   
result = ''.join(fruits) 

举个栗子:

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
result = filter(lambda x:sum(x)>14, [a, b, c])
result为[[4, 5, 6], [7, 8, 9]]

f.close()

 

map()函数:

现行反革命有三个体系,可是那一个项目要有个基金调查,必要资金财产满意lambda标准的小卖部才有资格加入招标(func是贰个bool类型的函数)
Map - 招标

历次那样写太烦琐,来试试with的威力:

5 使用in dict.keys()来判断dict中是或不是含有内定的key

 

专门的学问格式map(func, seq[, seq[, seq]])

with open('/path/to/file', 'r') as f:

d = {1:"v1", 2:"v2"}
if 1 in d.keys():
  print("d dict has the key 1")

[python] view plain copy

举个栗子:

print f.read()

 

  1. # 传入三个参数  
  2. def one_p(x):  
  3.     return x * x  
  4. print 'map1.1:', map(one_p, range(1, 5))   
  5. #结果:map1.1: [1, 4, 9, 16]  
  6. print 'map1.2:', map(one_p, [1, 2, 3, 4, 5, 6])  
  7. #结果:map1.2: [1, 4, 9, 16, 25, 36]  
  8.   
  9. # 传入八个参数  
  10. a = [1, 2, 3, 4, 5]  
  11. b = [1, 1, 6, 2, 3]  
  12. c = [1, 2, 3, 4, 5]  
  13. s = map(lambda (x, y, z): x * y * z, zip(a, b, c))  
  14. print 'map2:', s  
  15. #结果:map2: [1, 4, 54, 32, 75]  

a = (i for i in range(3))
b = [4, 5, 6]
江苏福彩快三,c = (7, 8, 9)
abc = map(lambda x,y,z: x y z, a, b, c)

代码更佳简洁,何况不必调用f.close()方法。

6 利用set来去除list中的重复成分

reduce()函数:

abc的结果为[11, 14, 17]

with利用了上下文管理公约,那玩意聊起来太复杂,直接上代码。

l = [1,2,2,3]
l2 = set(l)
print(l2)

 

要么那几个招标的品类lambda函数供给招三家(函数的参数个数)来参预这么些类型,这一个类型分前中后三期的投入.
只要abc三家幸运的入选,并且三家都早就妄想好了多少个级次的投入.所以中期a出0,b出4,c出7投入到lambda项目,项前段时间期重返收入11

自定义多个支撑上下文管理左券的类, 类中完成enter方法和exit方法。

 

 

各样类推,直到三家的投入全体甘休,所以返还的收益正是[11, 14, 17]

class MyWith(object):

7 对此in操作,set要快于list,因为set是应用hash来存款和储蓄和探求的

[python] view plain copy

假如c有钱(c = [7,8,9,10,11]),c说:老子有钱,作者要扩展投入. 那ab没钱如何做?轻松!!ab就安安分分的说:老子没钱 就好了(a = [0,1,2,None,None], b = [4,5,6,None,None])

def __enter__(self):

 

  1. r1 = reduce(lambda x, y: x * y, (2, 2, 6, 2))  #运算进度:(((2*2)*6)*2)  
  2. r2 = reduce(lambda x, y: x * y, (2, 2, 6), 2)  #<span >运算进度:(((2*2)*6)*2)</span>  
  3.   
  4. print 'r1:', r1  # 结果:r1: 48  
  5. print 'r2:', r2  # 结果:r2: 48 

因而lambda项目就接受到那般的投入[None,None,10], [None,None,11],这里要小心管理这个None,因为相当大心他就能够报NoneType

print "Enter with"

8 使用with来读写文件,保险file对象的获释

a = (i for i in range(3))
b = [4, 5, 6]
c = (7, 8, 9, 10, 11)
abc = map(lambda x,y,z: str(x) str(y) str(z), a, b, c)
所以abc的结果为['047', '158', '269', 'NoneNone10', 'NoneNone11']

return self  # 再次回到对象给as后的变量

  with open("myfile.txt") as f:
     for line in f:
         print (line)
  f.readline() #f is cleanup here, here will get ValueError exception

map接受的也都以具有迭代的属性的参数

def __exit__(self, exc_type, exc_value, exc_traceback):

 

本文由江苏福彩快三发布,转载请注明来源

关键词: 江苏福彩快三