随笔分类 - Python
摘要:初始化实例属性 虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办? 在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法
阅读全文
摘要:面向对象编程 什么是面向对象编程 面向对象是一种编程范式 把程序看做不同对象的相互调用 对现实世界建立对象模型 面向对象编程的基本细想 类和实例 类用于定义抽象类型 实例根据类的定义被创建出来 class person: pass xiaoming = person() xiaojun = pers
阅读全文
摘要:模块和包的概念 在文件系统中,包就是文件夹,模块就是xxx.py,包可以有多级,包和普通目录的区别就是包下面必须有个__init__.py,每一层都必须有 py文件名即模块名,模块的上一级为包,不同模块允许同名变量函数等,不同包允许同名模块 在一个模块引用其他模块: import math prin
阅读全文
摘要:这两个都是可变参数,可以传入任意个数的参数 *args是非关键字参数,用于tuple,**kw是关键字参数,用于dict 同时使用*args和**kwargs时,必须*args参数列要在**kwargs前 代码 def foo(*args, **kw): print ('args = ', args
阅读全文
摘要:偏函数 当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。 比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10。
阅读全文
摘要:decorator装饰器 什么是装饰器 问题: 定义了一个函数 想在运行时动态增加功能 又不想改变函数本身的代码 解决: 利用高阶函数,接收一个函数并对其进行包装,然后返回一个函数 代码 def f1(x): #被装饰函数 return x * x def new_fn(f): #装饰器函数 def
阅读全文
摘要:匿名函数 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算 f(x)=x2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> map(lambda x: x * x,
阅读全文
摘要:闭包 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: def g(): print 'g()...' def f(): print 'f()...' return g 将 g 的定义移入函数 f 内部,防止其他代码调用 g: def f(): print 'f()...' d
阅读全文
摘要:返回函数 Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()..
阅读全文
摘要:自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x,
阅读全文
摘要:filter()函数 filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新li
阅读全文
摘要:reduce()函数 reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值
阅读全文
摘要:map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个元素都作平方,
阅读全文
摘要:什么是函数式编程 函数:function,之前已经谈到 函数式:functional,一种编程范式 函数式编程特点 把计算视为函数而非指令 纯函数式编程:不需要变量,没有副作用,测试简单 支持高阶函数,代码简洁 python支持的函数式编程 不是纯函数式编程:允许有变量 支持高阶函数:函数可作为变量
阅读全文
摘要:生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?
阅读全文
摘要:什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。 在Python中,迭代是通过 for ... in 来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代
阅读全文
摘要:对list或者tuple进行切片 取一个list的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素,应该怎么做? 笨办法: >>> [L[0], L[1], L[2]] ['Adam', 'Lisa',
阅读全文
摘要:什么是函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = 73.1 s1 = 3.14 * r1 * r1 s2 = 3.14 * r2 * r2 s3 =
阅读全文
摘要:什么是set dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。 set 持有一系列元素,这一点和 list
阅读全文
摘要:什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] 但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。 如果把名字和分数关联起来,组成类似
阅读全文