• 廖雪峰python摘录4


    1、直接作用于for循环的对象统称为可迭代对象:Iterable。    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    2、生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

    listdictstrIterable变成Iterator可以使用iter()函数

    3、因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

    4、我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

    5、函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

    Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

    6、高阶函数英文叫Higher-order function。

    (1)变量可以指向函数 1 >>> f = abs 2 >>> f(-10) 3 10 说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同

    (2)把abs指向10后,就无法通过abs(-10)调用该函数了!因为abs这个变量已经不指向求绝对值函数而是指向一个整数10

    1 >>> abs = 10
    2 >>> abs(-10)
    3 Traceback (most recent call last):
    4   File "<stdin>", line 1, in <module>
    5 TypeError: 'int' object is not callable

    7、我们先看map。map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

     8、reduce()函数也是Python内置的一个高阶函数。

    reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

    9、

    1 >>> from functools import reduce
    2 >>> def fn(x, y):
    3 ...     return x * 10 + y
    4 ...
    5 >>> def char2num(s):
    6 ...     return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    7 ...
    8 >>> reduce(fn, map(char2num, '13579'))
    9 13579

    里面的char2num()依次把输入的单个str‘1’转换成1   

     10(例题)、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']

    list(map(lambda x:x.capitalize(),['mike','jack']))       

    map()传入的第一个参数是f,即函数对象本身。由于结果r是一个IteratorIterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

    感觉lambda运用更广,不但abs(),而且x.capitalize()

    11、和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    12、此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序

    13、高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

    14、我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。   返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

  • 相关阅读:
    HDU 3436 Queuejumpers
    POJ 3580 SuperMemo
    HDU 2871 Memory Control
    Android 实现显示文字的Gallery
    Android 使用地图
    Android 深入的研究一下蓝牙
    手机录制视频demo
    用android来实现图片的绘制以及旋转缩放案例分析
    TextView 自动滚动(跑马灯)
    Android腾讯微博客户端开发一:在下方的Tab的实现
  • 原文地址:https://www.cnblogs.com/xflqm/p/7466718.html
Copyright © 2020-2023  润新知