-
Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。
偷懒的定义__repr__的方法:
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__
查看全部 -
type() 函数获取变量的类型,它返回一个 Type 对象
dir() 函数获取变量的所有属性
getattr()获取对象属性,
getattr(s, 'name') # 获取name属性
getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20
setattr()设置对象属性
查看全部 -
Python是动态语言,json.load()并不一定要从一个File对象读取内容。任何对象,只要有read()方法,就称为File-like Object,都可以传给json.load()。
Python是动态语言,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可
import json
class Students(object):
def __init__(self,strlist):
self.strlist=strlist
def read(self):
return self.strlist
s = Students('["Tim", "Bob", "Alice"]')
print json.load(s)
查看全部 -
-10 python中匿名函数
收藏
第1章 课程介绍
第2章 函数式编程
第3章 模块
第4章 面向对象编程基础
第5章 类的继承
第6章 定制类
第7章 课程总结
章节
问答
笔记
评论
占位
占位
python中匿名函数
高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。
在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算 f(x)=x2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:
>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
通过对比可以看出,匿名函数 lambda x: x * x 实际上就是:
def f(x): return x * x
关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码:
>>> sorted([1, 3, 9, 5, 0], lambda x,y: -cmp(x,y)) [9, 5, 3, 1, 0]
返回函数的时候,也可以返回匿名函数:
>>> myabs = lambda x: -x if x < 0 else x >>> myabs(-1) 1 >>> myabs(1) 1
查看全部 -
types.MethodType() 把一个函数变为一个方法:
查看全部 -
python中返回函数
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!
例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:
def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: return g
仔细观察上面的函数定义,我们在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。
调用函数 f,我们会得到 f 返回的一个函数:
>>> x = f() # 调用f() call f()... >>> x # 变量x是f()返回的函数: <function g at 0x1037bf320> >>> x() # x指向函数,因此可以调用 call g()... # 调用x()就是执行g()函数定义的代码
请注意区分返回函数和返回值:
def myabs(): return abs # 返回函数 def myabs2(x): return abs(x) # 返回函数调用的结果,返回值是一个数值
返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:
def calc_sum(lst): return sum(lst)
调用calc_sum()函数时,将立刻计算并得到结果:
>>> calc_sum([1, 2, 3, 4]) 10
但是,如果返回一个函数,就可以“延迟计算”:
def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum
# 调用calc_sum()并没有计算出结果,而是返回函数:
>>> f = calc_sum([1, 2, 3, 4]) >>> f <function lazy_sum at 0x1037bfaa0>
# 对返回的函数进行调用时,才计算出结果:
>>> f() 10
由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。
查看全部 -
for k, v in kw.iteritems(): setattr(self, k, v)
任意关键字参数
查看全部 -
isinstance()判断变量类型,如str、list、dict,自定义的类本质上都是数据类型。
查看全部 -
p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。
查看全部 -
Python动态语言:类属性也是可以动态添加和修改的;
实例属性每个实例各自拥有,相互独立,类属性有且只有一个
查看全部 -
属性权限:双下划线开头(__),属性无法被外部访问,但如果属性以"__xxx__"的形式定义,那它又可以被外部访问
查看全部 -
__init__():当实例创建时会自动调用__init__()方法,__init__()方法第一个参数必须是self(习惯用法)
查看全部 -
Python是动态语言:对每一个实例,都可以直接给他们的属性赋值
查看全部 -
类名大写字母开头,(object)表示继承自object类,创建实例类名+()
查看全部 -
Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数。要在Python 2.7中引入3.x的除法规则,导入__future__的division
在Python 3.x中,字符串统一为unicode,不需要加前缀 u,而以字节存储的str则必须加前缀 b,__future__的unicode_literals
查看全部
举报