-
get_grade是Person类的属性之一,指向匿名函数lambda,所以打印出为地址名。
get_grade()为调用lambda函数,函数返回字符'A',故能打印出A
查看全部 -
如果使用 from...import 导入 log 函数,势必引起冲突。这时,可以给函数起个“别名”来避免冲突:
from math import log from logging import log as logger # logging的log现在变成了logger
查看全部 -
__slots__是指一个类允许的属性列表,__slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存,Student类的__slots__只需要包含Person类不包含的score属性即可。初始化父类属性
super(Student, self).__init__(name, gender)
查看全部 -
类具有继承关系,并且子类类型可以向上转型看做父类类型。方法调用将作用在 x 的实际类型上。s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。
Python是动态语言,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可
Python提供了open()函数来打开一个磁盘文件,并返回 File 对象。File对象有一个read()方法可以读取文件内容。任何对象,只要有read()方法,就称为File-like Object,都可以传给json.load()。
查看全部 -
p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。
因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法。
直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self。
查看全部 -
只有以双下划线开头的"__job"不能直接被外部访问。
很多预定义的特殊属性使用"__xxx__"的形式定义,可以被外部访问了,通常不要把普通属性用"__xxx__"定义。
以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
查看全部 -
__init__() 方法的第一个参数必须是 self,创建实例时,就必须要提供除 self 以外的参数。每个Person实例在创建时,都会有 name、gender 和 birth 这3个属性,并且,被赋予不同的属性值,访问属性使用.操作符。
要定义关键字参数,使用 **kw;
除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = birth for k, v in kw.iteritems(): setattr(self, k, v)
查看全部 -
__int__.py
查看全部 -
利用匿名函数简化代码 lambda x: x * x 实际上就是:
def f(x): return x * x
匿名函数只能有一个表达式,不写return,返回值就是该表达式的结果。
查看全部 -
如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0
查看全部 -
from __future__ import division 在Python 2.7中引入3.x的除法规则:“/”除将得到浮点数,“//”除才仍是整数
from __future__ import unicode_literals 把Python 3.x的unicode规则带入Python 2.7中
查看全部 -
如果导入的模块不存在,Python解释器会报 ImportError 错误。
要提高Python代码的运行速度,最简单的方法是把某些关键函数用 C 语言重写。
try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句。
利用import ... as ...,可以动态导入不同名称的模块。
查看全部 -
导入系统自带的模块 math:
import math
给函数起个“别名”来避免冲突
from math import log from logging import log as logger # logging的log现在变成了logger print log(10) # 调用的是math的log logger(10, 'import from logging') # 调用的是logging的log
os.path模块可以以若干种方式导,每一种方式调用 isdir 和 isfile 都有所不同:
import os import os.path from os import path from os.path import isdir, isfile
查看全部 -
filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x): return x % 2 == 1
然后,利用filter()过滤掉偶数:
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
结果:[1, 7, 9, 17]
利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:
def is_not_empty(s): return s and len(s.strip()) > 0 filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
结果:['test', 'str', 'END']
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123' a.strip()
结果: '123'
a='\t\t123\r\n' a.strip()
结果:'123'
查看全部 -
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100)
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。
查看全部
举报