您的位置:首页 > 编程语言 > Python开发

python_学习笔记0824

2015-08-24 19:40 507 查看
今天是二零一伍年八月二十四日,今天主要是先回顾一下原来我们老师所谓的神奇的python函数,然后在学习一下新的python知识点。

1、python作为高级的动态语言,其中删去了很多原来静态语言里本不需要的规矩,提供了很多便利的函数,比如reduce函数:

# reduce.py
from functools import reduce

def add(x , y ):
return x + y

l = [ 1 , 2 , 3 , 4 , 5 ]
init_val = 0 ;
print( reduce( add  , l , init_val) )


结果是:
15

我们给我们的reduce函数传入了这样几个参数:第一、二元加法函数add();第二、一个包含多个内容的对象list;第三、一个初始值。那么reduce函数是做什么的呢,说白了,就是二元遍历。就是把我们传入reduce的那个对象,一个一个取出,按照add的方式,以init_val作为初始值,迭代出一个结果。在3.4以后,这个函数被放在了functools里面。

说完了reduce,介绍它的一个兄弟,叫做map。顾名思义,这个函数就是用来映射的。比如:

# map.py

def add_one(x):
return x + 1

l = [ 1 , 2 , 3 , 4 , 5 ]
print( list(map( add_one  , l)) )


结果是:

[2, 3, 4, 5, 6]

我定义了一个一元函数,叫做add_one,放在map里,于是map函数对list对象里的每一个元素都做出了映射,此时的list仿佛就成了我的一个定义域,而我的add_one就成了一种映射方法。当然,生成的对象是一个map对象,我们需要转换一下。而且别忘记我们还有三元映射:

>>> def add(x, y): return x+y
>>> map(add, range(8), range(8))
[0, 2, 4, 6, 8, 10, 12, 14]


我们还要介绍最后一个兄弟,叫做filter,相信大家对这个一定不陌生了:
# filter.py

def isEven(x):
return x % 2 == 0

l = [ 1 , 2 , 3 , 4 , 5 ]
print( list(filter( isEven  , l) ) )


结果是:

[2,4]

结果相信大家也知道了,就是返还参数函数返还true的内容。其实从一个意义上来说,也是一种映射,只不过我们还有一个筛选的功能。看了这么多函数,我们再来一个便捷函数,lambda。说白了,这个函数就是一个快捷定义函数的方法。

>>> g = lambda x : x * 2
>>> g(3)
6
>>> (lambda x : x * 2)(3)
6


我们还可以以上面的一个文件作为例子:
# reduce.py
from functools import reduce

l = [ 1 , 2 , 3 , 4 , 5 ]
init_val = 0 ;
print( reduce( lambda x , y : x + y  , l , init_val) )


lambda后面紧跟的就是我们需要的参数,而冒号后面就是我们的return。lambda这个句柄对我们往后书写简单的函数提供极大的便利。

2、上次我们说道有一个items函数,可以让我们遍历dict里面的key,value两个内容。当然要是想只遍历value,也可以使用dict.value()函数。

3、想要生成一个列表可以有很多方便的方法:

>>> [x + 1 for x in range(1,11)]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]


这像我们刚才所说的映射的模式,写列表生成式时,把要生成的元素表达式x * x放到前面,后面跟for循环,就可以把list创建出来。当然我们还可以使用双元来进行遍历。

>>> [x + m for x in range(1,5) for m in range(1,3)]
[2, 3, 3, 4, 4, 5, 5, 6]


细心的人可以发现,在列表生成式里面,如果有两个for循环,它的结构变化成c语言是这样:
for(int x = 1 ; x < 5 ;x ++ ){
for(int m = 1 ; m < 5 ; m ++){
//your code
}
}


当然,除了一味的循环,我们还可以添加一些if判断,比如

>>> [x + m for x in range(1,5) for m in range(1,3) if x % 2 == 0 ]
[3, 4, 5, 6]


我们甚至在其中还可以调用一个函数:
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息