廖雪峰教程笔记补遗
2016-02-17 18:02
232 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">教程在这里 http://www.liaoxuefeng.com/</span>[/code]
1. 关于中文字符串的处理(最后一次)#coding: utf-8显示,写入文件均正常。注意:如果你选择了from __future__ import unicode_literalfrom __future__ import unicode_literal则所有字符串均为unicode(即python 2.7里面的u'string')2. 高阶函数sorted() (升序)(对一个iterable对象的前两个元素进行操作,生成一个新元素,再向后继续),filter(传入一个返回bool值的函数,对一个iterable对象的每一个元素进行筛选)][Python这种原生的高阶函数还有map(对一个iterable对象的每一个元素进行一对一转换),reduce,filter]sorted()可以传入一个函数(返回值1,-1)对一个iterable进行排序通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。from __future__ import unicode_literaldef reversed_cmp(x, y): if x > y: return -1 if x < y: return 1 return 0 sorted(list2,reversed_cmp)其他高阶函数map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。reduce()把一个函数作用在一个序列[x1,
x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。4.
虽然list有下标,但是以后还是通过迭代的方式来遍历吧。5.
遍历大的List, 一定要记得用generator6.
偏函数,向原函数中添加默认值,生成新函数int2 = functools.partial(int, base=2)7. OOP注意python 有新式类和经典类的区别例如:class ClassicClass(): #经典类
passclass NewStyleClass(object):#新式类
passclass Student(object):def __init__(self, name, score):声明私有属性
self.name = name
self.score = scoredef print_score(self):
print '%s: %s' % (self.name, self.score)class Student(object):def __init__(self, name, score):
self.__name = name
self.__score = scoredef print_score(self):
print '%s: %s' % (self.__name, self.__score)def get_name(self):7(2)我们要判断class的类型,可以使用
return self.__namedef get_score(self):
return self.__scoredef set_score(self, score):
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')isinstance()函数。如果要获得一个对象的所有属性和方法,可以使用dir()函数,一些系统内部的类方法 比如__len__,是可以override的对类属性直接操作 / 也可以操作方法hasattr(obj,'attr_name')getattr(obj,'attr_name')setattr(obj,'attr_name')getattr可以指定default值,如果没有这个attr,则返回default值
例如: getattr(obj,'attr',404)通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息。如果可以直接写:sum = obj.x + obj.y就不要写:sum = getattr(obj, 'x') + getattr(obj, 'y')8. 给类实例绑定属性和方法(不影响同一个类的其他实例)
当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。然后我们也可以给一个类本身绑定属性和方法s = Student() s.name = 'Michael' # 动态给实例绑定一个属性 print s.name #Michaeldef set_age(self, age): # 定义一个函数作为实例方法 self.age = age ... from types import MethodType s.set_age = MethodType(set_age, s, Student) # 给实例绑定一个方法 s.set_age(25) # 调用实例方法 s.age # 测试结果 #25<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">Student.set_score = MethodType(set_score, None, Student)# 给类绑定一个方法</span>为了限制类的属性(可以绑定哪些属性)[注意这个限制只对当前类有效,对继承当前类得到的子类不起作用][如果子类也定义__slots__,则属性列表包含父类__slots__和子类__slots__]class Student(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
9. @property 装饰器就是把上面的getter 变为一个属性 setter改为属性赋值class Student(object):@property
def score(self):
return self._score@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
10. Python的多重继承class Dog(Mammal, RunnableMixin, CarnivorousMixin): passhttp://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868200511568dd94e77b21d4b8597ede8bf65c36bcd000
11. 定制类:1.__str__ 字符串for print , __repr__ 字符串for debug__repr__=__str__2. __iter__ 用于for ... in循环3.__getitem__ 可以用下标取出元素4. __getattr__当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, 'score')来尝试获得属性,这样,我们就有机会返回score的值class Student(object):def __getattr__(self, attr):返回函数也是完全可以的:
if attr=='age':
return lambda: 25
raise AttributeError('\'Student\' object has no attribute \'%s\'' % attr)class Student(object):def __getattr__(self, attr):
if attr=='age':
return lambda: 25
这样可以用__getattr__把所有的属性都实现动态调用
例如利用完全动态的__getattr__,我们可以写出一个链式调用:class Chain(object):def __init__(self, path=''):5. 直接调用实例__call__
self._path = pathdef __getattr__(self, path):
return Chain('%s/%s' % (self._path, path))def __str__(self):
return self._pathclass Student(object):
def __init__(self, name):
self.name = namedef __call__(self):
print('My name is %s.' % self.name)
相关文章推荐
- kylin-1.2 搭建
- 【deep learning学习笔记】Recommending music on Spotify with deep learning
- Hadoop 2.6.0 POM.xml
- jQuery 获取不到 kindeditor 内容 的解决方法
- 代码整洁之道之小处诚实非小事
- Android串口操作,简化android-serialport-api的demo的问题
- HashMap相关面试知识点
- Grails自动化测试
- CentOS 6.5下Redis安装记录
- php二维数组根据某字段排序(对查询结果集进行排序)
- 给文本设置下划线或者删除线
- SO_REUSEADDR和SO_REUSEPORT
- 监听android home键的实现方式
- C#循环测试题
- Sublime Text 3 —— 插件
- 初识LaTeX
- mysql优化---笔记
- Ubuntu下adb环境配置及常用命令
- # android 开发小问题 button
- MySQL中的SQL流程分析简述