• 学习python的日常4


    偏函数:

    偏函数是functools模块提供的一个功能,偏函数可以通过设定参数的默认值,降低函数调用的难度

    其中设定的参数默认值实际上是可以被传入为其他值的,最后创建偏函数时可接收函数对象、*args、

    **kw三个参数

    import functools
    functools.partial(int,*args/**kw)
    

    Python模块章节:模块是一组python代码的集合,可以使用其他模块,也可以被其他模块使用。

    常见自己的模块时要注意:模块名要遵循Python变量命名规范,不要使用中文、特殊字符;

    模块名不要和系统模块名冲突,可以在python交互环境执行import abc,若是成功则说明系统存

    在这个模块。(模块实际上就是一个.py文件)

    使用模块:知道导入模块,然后就可以调用模块中的函数了,模块中的函数有些是不想公开的,

    不应该被直接引用,类似_xxx和__xxx这样的函数就是非公开的,所以在定义函数的时候可以将

    私有函数,实际上python也没有一种确定方法来显示函数的引用,所以只能从变成习惯上来控制

    所以可以在定义函数时通过在模块中利用公开函数去调用私有函数,这样外部使用的时候就不用

    关心私有函数细节,形成一种封装的效果,一般的习惯是外部不需要的函数全部定义为private,

    只有外部需要的函数才定义为public。

    安装第三方模块:下载安装就可以了,Anaconda比较好。

    面向对象编程:类和实例,举一个例子就是鸟是一个类,但是一只鸟就是一个实例,每个实例

    数据互相独立,方法是和实例绑定的函数,方法可以直接访问实例的数据。定义好一个类之后,

    可以创建实例,依靠类名+()实现。

    访问限制:在class内部的方法和属性,可以被外部代码自由修改,为了避免,可以让内部的属性

    私有化,在实例属性前加上双下划线,属性就变成仅供内部访问,外部不能访问,此时就要利用

    get和set方法去访问和操作属性。python中变量名类似__xxx__的,是特殊变量。一个下划线开头

    的实例变量名是可以被外部访问的,但是这种表达方式本身的意义就是虽然自身可以被访问,但

    是请不要随意访问并希望被视为私有变量。不能访问的__xxx是因为python解释其把变量名修改成

    _(类名)__xxx,所以依然是可以被访问的,所以python是没有机制去阻止的,一切都靠自己自觉。

    继承和多态:大概意思和java中类似,然后的话有一个不同点就是,多态在python中的体现跟java

    里面不一样,比如定义一个run(x)函数,x在java中是需要指定数据类型的,但是在python中是

    没有一个确定的数据类型的,x可以是任意的数据类型,只要该类中定义了run中的方法,就可以调用

    run()方法并使用。

    获取对象信息:有三种方法,使用type(),返回参数相应的类型;使用isinstance(),用来判断一个class

    是否为某一特定类型;使用dir(),可以获得一个对象的所有属性和方法,配合getattr(obj,'xxx',404)、setattr()、hasattr()

    方法可以直接操作一个对象的状态。obj为对象,xxx是需要确认的东西,404为返回值,在setattr中第三

    个为个人设定值。

    实例属性和类属性:实例属性是属于各自的,互不干扰;类属性是类共有的,所有实例共享一个属性。

    面向对象高级编程:使用__slots__:由于python语言的动态性,可以给一个实例绑定任何属性和方法,

    也可以给类绑定方法,为了避免这种情况,就可以使用__slots__变量,在类中定义gg

    class Student(object):
        __slots__ = ('name','age') #用tuple定义允许绑定的属性名称
    

       这样就可以指定绑定的属性,但是这样对子类是没有影响的,如果子类也定义了子类就共享父类的绑定

    使用@property:在类中,为了限制一个参数的输入范围可以在setter方法中添加限制条件,这样参数

    的赋值就不能那么随意了,但是直接操作会使得代码没那么美观优雅,用@property可以变得简单,

    class Student(object):
    
        @property
        def birth(self):
            return self._birth
    
        @birth.setter
        def birth(self, value):
            self._birth = value
    
        @property
        def age(self):
            return 2015 - self._birth
    

    用@property可以把一个getter()方法变成属性,另一个@score.setter装饰器把setter方法变成属性赋值,

    如果只定义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
    
    
    >>> s = Student()
    >>> s.score = 60 # OK,实际转化为s.set_score(60)
    >>> s.score # OK,实际转化为s.get_score()
    60
    >>> s.score = 9999
    Traceback (most recent call last):
      ...
    ValueError: score must between 0 ~ 100!
    

    多重继承:感觉类似java接口,可以实现不同的功能,不过不同的是这个是利用一个继承的方式来实现功能

    ,MixIn是一种常见的设计,选择组合不同的类功能,可以快速构造出符合需求的子类。

  • 相关阅读:
    运算符优先级口诀
    [转] 从最大似然到EM算法浅解
    推荐系统实践整体化总结
    Python-函数
    Python-dict/set
    Python-条件、循环、
    Python-list and tuple
    优先级顺序表
    8.1python类型注解
    9.redis-CacheCloud
  • 原文地址:https://www.cnblogs.com/zzy0306/p/7955054.html
Copyright © 2020-2023  润新知