python进阶之学习笔记_【原】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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值