美文网首页
python 随记(4)

python 随记(4)

作者: firewt | 来源:发表于2018-08-19 14:04 被阅读685次

    1. 匿名函数

    def f(x):
        return x*x
    c=lambda x: x*x
    print (f(2))
    >>> 4
    print (c(2))
    >>> 4
    

    匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
    用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数.

    2. 偏函数

    注意和数学中的偏函数不一样

    int()函数可以把字符串转为整数,默认情况下抓为十进制的整数

    print (int("100")) #123

    int()函数还可以接收第二个base参数,可以做到N(2<=N<=36)进制的转换

    print (int("100",base=2)) #4

    如果批量转换二进制,可以定义一个函数

    def int2(x,base=2):
        return int(x,base)
    

    而偏函数做的就是把函数的某些参数固定住,这样不需要额外的定义另一个函数,例如:

    import functools
    int2 = functools.partial(int, base=2) #注意这里的int是一个函数
    int2("1000") #8
    

    但是你又可以手动指定固定的参数,例如(接上代码):

    int2("1000",base=10) #1000

    3. 迭代器

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:
    一类是集合数据类型,如list、tuple、dict、set、str等;
    一类是generator,包括生成器和带yield的generator function。
    这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
    可以使用isinstance()判断一个对象是否是Iterable对象:

    from collections import Iterable
    from collections import Iterator
    isinstance([],Iterable) #True
    isinstance({},Iterable) #True
    isinstance("abc",Iterable) #True
    isinstance((1,2,3),Iterable) #True
    

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    可以使用isinstance()判断一个对象是否是Iterator对象:

    from collections import Iterable
    from collections import Iterator
    isinstance([],Iterator) #False
    isinstance({},Iterator) #False
    

    生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
    把list、dict、str等Iterable变成Iterator可以使用iter()函数:

    from collections import Iterable
    from collections import Iterator
    >>> isinstance(iter([]), Iterator)
    True
    >>> isinstance(iter('abc'), Iterator)
    True
    

    Iterator可作用与next()函数

    list=[1,2,3]
    a=iter(list)
    a.next() #1
    a.next() #2
    

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    迭代器只可以向前获取数据

    总结:

    函数式编程的优点:

    1. 在数学上验证一个程序的正确性,所以函数式编程在人工智能领域应用较多
    2. 模块化,把解决问题的方案划分为N个模块
    3. 组合和复用

    缺点:

    1. 有些难
    2. 比较倾向于某个适用方向

    相关文章

      网友评论

          本文标题:python 随记(4)

          本文链接:https://www.haomeiwen.com/subject/vveciftx.html