python函数式编程

  • 函数做参数

  • map,filter,reduce

  • lambda

函数第一个单词小写,后面所有单词首字母大写

类的首字母大写

变量用下划线分开

lambda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
# coding: utf-8
#copyRight by heibanke

# filter 选择字母
a = "aAsmr3idd4bgs7Dlsf9eAF"
b = list(filter(str.isalpha,a))

# 排序

c = sorted(b,cmp=lambda x,y:1 if (x.upper()>y.upper() or x>y) else -1,reverse=False)

# b.sort(lambda x,y:1 if (x.upper()>y.upper() or x>y) else -1)

print ''.join(c)
print ''.join(b)
  • 回调函数 : 函数作为参数

  • 闭包: 绑定外部变量的函数

    • 嵌套结构的函数
    • 内部函数用到了外部变量
    • 外部函数返回内部函数
    1
    2
    3
    4
    def a(num):
    def b(num1):
    return num1 * num
    return b # 返回了一个绑定了num的函数
    • 内部函数不能改变外部变量

    • 可以修改外部list变量的值

      用来维护游戏中不同角色的状态

  • 装饰器 把函数作为参数而后返回当前函数

    • 当然不返回函数但是在装饰器中使用也是可以的
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def decorator(f):
    return f
    def myfun1():
    ...
    decorator(myfunc1())

    @decorator
    def myfunc2():
    ...
    • 二层嵌套装饰器
      • 使用闭包
    • 三层嵌套..是的装饰器可以自带参数=.=
  • [fib(i) for i in range(100)] 这个样子可以生成

    • next 迭代器 优化

    • 惰性计算

    • 1
      2
      3
      4
      5
      6
      7
      def fib():
      a,b = 0,1
      while(True): yield b
      a,b = b,a+b

      A = fib()
      [A.next() for i in range(100)]

  • send 应用 产生static变量…

  • send给generator的value会成为当前yield的结果 并且send的返回结果是下一个yield的结果

    1
    2
    3
    4
    5
    6
    7
    def func():
    input = []
    while True:
    a = yield
    ...

    ptr = func.send(...)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> def double_inputs():
    ... while True:
    ... x = yield
    ... yield x * 2
    ...
    >>> gen = double_inputs()
    >>> gen.next() #run up to the first yield
    >>> gen.send(10) #goes into 'x' variable
    20
    >>> gen.next() #run up to the next yield
    >>> gen.send(6) #goes into 'x' again
    12
    >>> gen.next() #run up to the next yield
    >>> gen.send(94.3) #goes into 'x' again
    188.5999999999999
  • itertools

    1
    2
    3
    4
    itertools.permutations([...])
    itertools.product([...],[...])
    itertools.repeat([...], n)
    itertools.chain(a,b,c)

文章目录
  1. 1. lambda