python学习之路(2)

1、python中的高阶函数

  • 变量可以指向函数
  • 函数的参数可以接收变量
  • 高阶函数:能够接受函数做参数的函数

    2、python中的匿名函数

def f(x):
    return x * x
  • lambda x: x * x ,关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。
  • 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
  • 使用匿名函数,可以不必定义函数名,直接创建一个函数对象

    3、python中的面向对象编程

  • 在Python中,类通过 class 关键字定义

  • 按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的
  • 当创建实例时,init()(init是前后是双下划线)方法被自动调用,
  • init() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),第一个参数self被Python解释器传入了实例的引用,后续参数则可以自由指定,和定义函数没有任何区别。
    相应地,创建实例时,就必须要提供除 self 以外的参数
  • 如果一个属性以”xxx“(xxx前后是双下划线)的形式定义,那它又可以被外部访问了,以”xxx“定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用”xxx“定义。
  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问
class Person(object):
    address = 'Earth'
    def __init__(self, name):
        self.name = name
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问
  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的
  • 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用

    4、python中的包和模块

  • 一个文件夹下包含init.py(init前后有双下划线)则被视为包

  • 模块名与文件名相同

    5、python中的继承

  • 子类的init()函数中一定要用 super(子类类名 , self).init(父类属性,。。。) 去初始化父类。
    函数super(子类类名 , self)将返回当前类继承的父类,然后调用init()方法,注意self参数已在super()中传入,在init()中将隐式传递,不需要写出(也不能写)。

  • 函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型
  • 一个子类可以继承多个父类

6、python中的特殊方法

  • 定义在类中
  • 如果要把一个类的实例变成 str,就需要实现特殊方法str(),因为 Python 定义了str()和repr()两种方法,str()用于显示给用户,而repr()用于显示给开发人员。,repr = str
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__
  • 要让 len() 函数工作正常,类必须提供一个特殊方法len(),它返回元素的个数
  • 要让int()函数正常工作,只需要实现特殊方法int(),同理,要让float()函数正常工作,只需要实现特殊方法float()。
  • 如果要让某个类进行+运算,需要正确实现add(),减法运算:sub
    ,乘法运算:mul
    ,除法运算:div
class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
    def __sub__(self, r):
        return Rational(self.p * r.q - self.q * r.p, self.q * r.q)
    def __mul__(self, r):
        return Rational(self.p * r.p, self.q * r.q)
    def __div__(self, r):
        return Rational(self.p * r.q, self.q * r.p)
    def __str__(self):
        g = gcd(self.p, self.q)
        return '%s/%s' % (self.p / g, self.q / g)
    __repr__ = __str__
  • slots是指一个类允许的属性列表,slots的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用slots也能节省内存。
class Student(object):
    __slots__ = ('name', 'gender', 'score')
    def __init__(self, name, gender, score):
        self.name = name
        self.gender = gender
        selfe = score
  • 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法call()
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值