Python基础教程(五),(六)和(七):语句,抽象和更加抽象

语句

  • 模块导入:

          import somemodule       #导入模块
          from somemodule import somefunction     
          from modele1 import open as op      #导入模块open为op
    
  • ==判断两个对象是否相等,is判断两者是否等同(同一个对象)

  • 断言assert:确保程序中的某个条件一定为真才让程序正常工作

          assert 0<age<100
          assert 0<age<100, 'The age is realistic'
    
  • zip函数:将两个序列压缩在一起,进行并行迭代,返回一个元组的列表

          zip(names, ages)        #返回[('age', 12), ('both', 45)]
    
  • eval:执行一系列Python语句,而exal会计算Python表达式(以字符串形式书写),且返回结果值

  • 本章新函数

    • chr(n) 当传入序列号为n时,返回n所代表的包含一个字符的字符串
    • eval(source[, globals[, locals]]) 以字符串作为表达式计算,并且返回值
    • enumerate(seq) 产生 用于迭代的(索引,值)对
    • ord(c) 返回单字符字符串的int值
    • rang([start, ] stop[, step]) 创建整数的列表
    • reversed(seq) 产生seq中值排序后的列表
    • sorted(sed[, cmp][, key][, reverse]) 返回seq中值排序后的列表
    • xrange([start, ] stop[, step]) 创建xrange对象用于迭代
    • zip(seq1, seq2, …) 创造用于并行迭代的新序列

抽象

  • 位置参数和关键字参数:避免混合使用位置参数和关键字参数

  • 收集参数:参数前的星号表示将所有值放置在同一个元组中,*表示收集为元组( ),**表示收集为字典{ }

          store(name1, name2, name3)'
          def store(*name)        #用name列表收集输入参数    
    
  • 参数收集的逆过程:星号只在定义函数或者调用时才使用,形式相同

          params=(1,2)
          add(*params)
    
  • 本章新函数:

    • map(func, seq [, seq, …]) 对序列中的每个元素应用函数
    • filter(func, seq) 返回其函数为真的元素的列表
    • sum(seq) 返回seq中所有元素之和
    • apply(func[, args[, kwargs]]) 调用函数,可以提供参数

更加抽象

  • 多态:根据对象(或类)类型的不同而表现出不同的行为

  • isinstance进行类型/类检测,其一般并不是什么好办法,能不用则不用;能毁掉多多态的就是使用函数显示地检查类型,比如type, isinstance以及issubclass函数等

  • 封装:不用关心对象是如何构建的,而是直接进行使用

  • 在新版本Python3.0中,没有继续使用旧式类的必要;使用新式类,需要在模块或脚本开始处, 添加_metaclass=type

  • 类定义中,self参数是对于对象自身的引用,没有其作用,成员方法就没法访问它们要对其特性进行操作的对象本身了;self参数是方法很函数的区别

  • 在方法或者特性之前加上双下划线,表示其为私有的;在类的内部定义中,所有以双下划线开始的名字都被翻译为,前面加上单下划线和类名的形式

          s.__inaccessible()      #真正形式为s._Secretive_inaccessible
    
  • 指定超类:

          class Filter()
          class SPAMFilter(Filter)        #SPAMFilter是Filter的子类
    
  • 检查继承:

          issubclass(SPAMFilter, Filter)      #返回True
          SPAMFilter._bases_      #返回基类Filter
          s=SPAMFilter()      #实例化SPAMFilter类      
          isinstance(s, Filter)       #返回True
    
  • 多个超类:即多重继承;在继承顺序中,先继承的方法会重写后继承的类中的方法,其后继承类的同名方法失效

  • 本章新函数:

    • callable(object) 确定对象是否可调用(比如函数或者方法)、
    • getattr(object, name[, default]) 确定特性的值,可选择提供默认值
    • hasattr(object, name) 确定对象是否具有给定的特性
    • isinstance(object, class) 确定对象是否是类的实例
    • issubclass(A, B) 确定A是否为B的子类
    • random.choice(sequence) 从非空序列中随机选择元素
    • setattr(object, name, value) 设定对象的给定特性为value
    • type(object) 返回对象的类型