函数式编程

参考网站

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
posted @ 2019-08-25 11:35  lcyok  阅读(140)  评论(0)    收藏  举报