-
因为Python提供的基本库builtinls.py中的object类定义好的函数,所有的类默认继承object类
查看全部 -
map(f, list)
reduce(f, list)
filter(f, list)
查看全部 -
python中reduce()函数
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例如,编写一个f函数,接收x和y,返回x和y的和:
def f(x, y): return x + y
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
先计算头两个元素:f(1, 3),结果为4; 再把结果和第3个元素计算:f(4, 5),结果为9; 再把结果和第4个元素计算:f(9, 7),结果为16; 再把结果和第5个元素计算:f(16, 9),结果为25; 由于没有更多的元素了,计算结束,返回结果25。
上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。
reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100)
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。
查看全部 -
有毒啊,没说初始化实例不能有返回值
查看全部 -
它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法
查看全部 -
实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身
查看全部 -
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
例如,编写一个f函数,接收x和y,返回x和y的和:
def f(x, y): return x + y
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
先计算头两个元素:f(1, 3),结果为4; 再把结果和第3个元素计算:f(4, 5),结果为9; 再把结果和第4个元素计算:f(9, 7),结果为16; 再把结果和第5个元素计算:f(16, 9),结果为25; 由于没有更多的元素了,计算结束,返回结果25。
查看全部 -
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
注意:map()函数不改变原有的 list,而是返回一个新的 list。
利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。
查看全部 -
f 可以被调用,所以,f 被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把 Person 类变成一个可调用对象:
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __call__(self, friend): print 'My name is %s...' % self.name print 'My friend is %s...' % friend
现在可以对 Person 实例直接调用:
>>> p = Person('Bob', 'male') >>> p('Tim') My name is Bob... My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著
查看全部 -
等你等你到家查看全部
-
__slots__是指一个类允许的属性列表 # __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存 '''假设Person类通过__slots__定义了name和gender, 请在派生类Student中通过__slots__继续添加score的定义, 使Student类可以实现name、gender和score 3个属性。''' class Person(object): __slots__ = ('name', 'gender') def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): __slots__ = ('score',) # Student类的__slots__只需要包含Person类不包含的score属性即可 def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score s = Student('lihong', 'male', 60) print(s.name, s.gender, s.score)
查看全部 -
class Student(object): def __init__(self, name, score): self.name = name self.__score = score @property # 用装饰器函数把get/set方法“装饰”成属性调用 def score(self): # get方法,用@property装饰 return self.__score @score.setter # @score.setter是前一个@property装饰后的副产品 def score(self, score): # set方法,用@score.setter装饰 if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score @property # 用@property修饰grade的get方法即可实现只读属性 def grade(self): if self.score >= 80: return 'A' elif self.score >= 60: return 'B' else: return 'C' s = Student('xiaohong', 60) s.score = 100 # 说明对score赋值实际调用的是 set方法 print(s.name) print(s.score) print(s.grade)
查看全部 -
用def是在类里边定义类的方法,而用def__init__是在类里边定义类的属性。
用def定义的类方法用实例名.方法名(x)的形式调用,而用def__init定义的类属性用实例名.属性名=x调用。
如果我想用调用类属性的形式调用类方法呢?那就加个@property就可以了。实际上@property就是把类方法变成了一个类属性。
查看全部 -
json.load 把字符串转换成字典
查看全部 -
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。
如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。
查看全部
举报