【原】Python学习笔记——进阶篇

python的高阶函数

一个函数作为另外一个函数的参数、map()、reduce()、filter()、自定义排序函数、一个函数返回另外一个函数作为返回值

闭包

匿名函数

装饰器 类似于java的aop

1.利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用
2.如果要让调用者看不出一个函数经过了@decorator的“改造”,就需要把原函数的一些属性复制到新函数中,Python内置的functools可以用来自动化完成这个“复制”的任务

import functools
def log(f):
    @functools.wraps(f)
    def wrapper(*args, **kw):
        print 'call...'
        return f(*args, **kw)
    return wrapper

偏函数

functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85

包、模块

模块:python文件
包:多个python文件的文件夹,必须有一个init.py文件

# from 模块 import 函数
from math import pow, sin, log #可以直接引用 pow, sin, log 这3个函数
from logging import log as logger   # logging的log现在变成了logger,别名

future

当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到future中,以便旧的代码能在旧版本中测试新特性。

python面向对象

按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的

class Person(object):
    pass

python面向对象 __init()方法

python定义的类中如果一个属性由双下划线开头(__),该属性就无法被外部访问

python定义的类中如果一个属性由双下划线开头(__),该属性就无法被外部访问,但是,如果一个属性以 "__xxx__"  的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。

类属性

当实例属性和类属性重名时,实例属性优先级高

实例属性

实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的;
在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度;

python中定义类方法

通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

class Person(object):
    count = 0
    @classmethod
    def how_many(cls):
        return cls.count
    def __init__(self, name):
        self.name = name
        Person.count = Person.count + 1

print Person.how_many()
p1 = Person('Bob')
print Person.how_many()

python 继承、多态、多重继承

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
>>> isinstance(p, Person)
True    # p是Person类型

python中获取对象信息

dir()、filter()、getattr()、setattr()函数

python中特殊方法

str()、repr()、cmp() 用与自定义实体类比较器、len()、类型转换、限制属性slots()、call()

面向对象常见的get、set方法():@property

#注意:
#第一个score(self)是get方法,用@property装饰,
#第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.__score = score
    @property
    def score(self):
        return self.__score
    @score.setter
    def score(self, score):
        if score < 0 or score > 100:
            raise ValueError('invalid score')
        self.__score = score

你可能感兴趣的:(【原】Python学习笔记——进阶篇)