Python

Python进阶笔记

2018-09-06  本文已影响8人  046ef6b0df68

文|Seraph

函数式编程

1 纯函数式编程:不需要变量、没有副作用、测试简单
2 Python不是纯函数式编程(允许有变量),支持高阶函数,支持闭包(有了闭包就能返回函数),有限度地支持匿名函数
3 变量可以指向函数,函数名其实就是指向函数的变量
4 高阶函数:能接收函数做参数的函数

map函数是Python内置的一个高阶函数,它接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回

reduce()函数接收一个函数f,一个list,但函数f必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值

filter()函数接收一个函数f,一个list,这个函数f的作用是对每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list

sorted()函数接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

5 返回函数,可以延时计算。

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g

例子:
普通写法

def g(x,y):
    return x*y
def calc_prod(lst):
    def calc():
        return reduce(g, lst)
    return calc
f = calc_prod([1, 2, 3, 4])
print f()

lambda表达式写法

def calc_prod(lst):
    def prod():
        return reduce(lambda x, y : x * y, lst)
    return prod
f = calc_prod([1, 2, 3, 4])
print f()

对比普通写法和lambda表达式写法,可以看见lamd表达式在表示简单计算函数很方便

7 在函数内部定义的函数和外部定义的函数式一样的,只是他们无法被外部访问
闭包:像以下这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum

注意:返回函数不要引用任何循环变量或后续会发生变化的变量

6 s.capitalize()首字母大写
s.strip(rm),删除s字符串中开头、结尾处rm序列的字符。当rm为空时,默认删除空白符(包括'\n','\r','\t',' ')

上一篇下一篇

猜你喜欢

热点阅读