函数式编程
1.高阶函数
1.map()函数:接收两个参数,一个是函数(也可以是内部函数),另一个是数值序列(列表),map()将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回。
def f(x):
a=x*x
return a
r = map(f,[1,2,3,4,5,6,7,8,9])
print(r)
#输出结果
[1, 4, 9, 16, 25, 36, 49, 64, 81]
2.reduce()函数:也是必须接收两个参数(类型与map一样),把结果和下一元素做累积运算。即最后返回值是一个数。
#函数解析:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
form functools import reduce #必须要导入的
def add(x, y):
return x + y #也可以换成累加,累乘,或者说是将几个数字合成整数。
reduce(add, [1, 3, 5, 7, 9])
#输出结果
25
3.filter():函数:filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果:
[1, 5, 9, 15]
4.sorted()函数:可以对字符串,数组,列表,字典…排序
>>>sorted([6,5,4,3,2]) #默认由小到大排
[2,3,4,5,6]
>>>sorted([2,-3,5,6,1],key=abs)
[1,2,-3,5,6]
>>>sorted([‘bob’,’about’,’Zoo’,’Credit’]) #根据ASCII码排序,由小到大
[’Credit’, ’Zoo’, ’about’, ‘bob’]
>>>sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
2.返回函数
一般函数的返回值都是一个数,或者数组什么的,返回函数的返回值是一个函数。也叫做闭包。
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
#调用
f = lazy_sum(1, 3, 5, 7, 9)
f()
#输出结果
25
但是,闭包用起来却不简单,容易出错。
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
#fs.append(f())
return fs
f1, f2, f3 = count()
#调用
f1()
9
f2()
9
f3()
9
在上面的例子中,每次循环,都创建了一个新的函数,然后,把创建的3个函数都返回了。也就是说fs里面是三个可以调用f函数的东西,但是函数引用了变量i,i已经变成了3,因此最终结果为9。将f后面添加一个括号就可以解决问题。此时fs里面是三个数。
3.匿名函数
1.lambda()函数:有时候创建一个简单的函数过于麻烦,用匿名函数会简单很多。
f=lamba x:x*x #这样就定义了一个函数f,作用是计算数的平方
调用:f(5)
结果:25
你如果是需要定义那种复杂函数的话,还是老老实实的用def吧
简单实用的进制转换代码:
>>>int('12345')
12345
>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565

浙公网安备 33010602011771号