*写在前面:为了更好的学习python,博主记录下自己的学习路程。本学习笔记基于廖雪峰的Python教程,如有侵权,请告知删除。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ *
目录
高阶函数
map( )函数
reduce( )函数
•【练习】字符串转为整数的函数实现
filter( )函数
•【应用】产生素数的函数实现
sorted( )函数
补充笔记
高阶函数
Higher-order function,即高阶函数。
事实上,变量是可以指向函数的。
>>>abs(-2)
2
>>>f = abs #f变量指向函数abs()
>>>f(-2)
2
而函数名也是变量。
>>>abs = 1
>>>abs(-1) #TypeError: 'int' object is not callable,此时abs不再是函数,而是整数1
注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10。
既然变量可以指向函数,那么函数也可以传入函数和返回函数,这种函数就叫高阶函数。
map( )函数
map( )是一种高阶函数,它接收两个参数,第一个是函数,第二个是Iterable,即可迭代对象。map( )将函数依次作用于Iterable的每个元素,并将结果以Iterator,迭代器的形式返回。这种方式类似构造出了数学中的映射过程。由于Iterator是惰性序列,可以用list( ) 将其转化为list输出。
>>>list(map(str,[1,2,3,4,5,6])) #str()可以将整数转化为字符串
['1', '2', '3', '4', '5', '6']
我们还能用列表生成器得到同样的结果,但要用到for语句:
>>>b = [str(x) for x in [1,2,3,4,5,6]]
['1', '2', '3', '4', '5', '6']
reduce( )函数
reduce( )函数同样接收一个函数和一个Iterable两个参数,不同的是所传入的函数必须要接收两个参数,而reduce是把函数作用的结果继续与序列中下一个元素做累计计算。
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
这个有什么用呢,举个简单的例子,可以把序列转化为相应的整数显示。
>>>from functools import reduce #加入内置函数reduce
>>>def fn(x, y):
... return(x * 10 + y)
...
>>>reduce(fn, [1, 2, 3, 4, 5])
12345
【练习】字符串转为整数的函数实现
from functools import reduce
d={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
def char2num(s): #将字符串的每个字符转化为对应的整数,并组成序列
return d[s]
def fn(x, y): #将一个序列转化为对应的整数
return x * 10 + y
return reduce(fn,map(char2num,s))
输出结果如下
>>>str2int('0110234')
110234
filter( )函数
filter,即过滤的意思,filter( )函数的作用是过滤序列。与上面两个函数一样,接收一个函数与一个序列,而在函数作用于序列的元素之后,根据返回值True或False来保留或移除该元素。如写一个保留奇数的函数:
>>>def odd(n):
... return n % 2 == 1
...
>>>list(filter(odd,[1, 2, 3, 4, 5, 6, 7, 8]))
[1, 3, 5, 7]
需要注意的是,filter( )函数返回的也是Iterator,惰性序列,需要用list( )来转化才能直接显示计算结果。
【应用】产生素数的函数实现
(以下代码转自廖雪芳的官方网站)
def _odd_iter(): #定义一个初始值为3,且不存在偶数的初始序列生成器
n = 1
while True:
n = n + 2
yield n
def _not_divesible(n): #定义筛选函数,不是n的倍数则返回True
return lambda x : x % n > 0
def primes(): #定义一个初始值为2,
yield 2
it = _odd_iter() #it为序列n的生成器,初始序列
while True:
n = next(it) #返回序列n的第一个值
yield n
it = filter(_not_divesible(n), it) #过滤序列中为n的倍数的值
for n in primes(): #for循环取值
if n < 100: #打印100以为的素数
print(n)
else:
break
sorted( )函数
sort,分类、排序的意思。在Python总sorted( )函数可以将list排序。
>>>sorted([5, 9, -55, 90, 1])
[-55, 1, 5, 9, 90]
sort( )函数还能接收一个key函数来自定义排序,也就是先把传入的函数作用于list,根据结果进行排序,把传入的初始序列按照结果的顺序进行排序。如接收一个abs( )函数
>>>sorted([5, 9, -55, 90, 1], key = abs)
[1, 5, 9, -55, 90]
还能加入第三个参数reverse=True,进行反向排序
>>>sorted([5, 9, -55, 90, 1], key = abs, reverse = True)
[90, -55, 9, 5, 1]
补充笔记
补充几个函数的用法,s.index('x')返回字符串中字符'x'的索引值;s.strip( )函数去除字符串首尾的空格或其他指定字符;s[::-1]把字符串s从尾到头顺序重新排列。
感谢你的阅读,有任何问题与想法欢迎评论与吐槽,和博主一起学习Python吧( ̄▽ ̄)~*
网友评论