内建类型

string

string与bytes

  • python3将文本数据和二进制数据做了明确的区分。文本总是使用unicode编码,以string类型表示;二进制数据以bytes类型表示
  • python3中不能以任何隐式方式将string和bytes混用。不可以将string和bytes类型进行拼接,不能在string中搜索bytes数据(反之亦然),也不能将string作为参数传入需要bytes类型参数的函数(反之亦然)。
  • string可以被encode()为bytes,bytes可以被decode()为string
  • 使用str()直接将bytes转化为string会导致字符串带前缀b
  • 带小数点的字符串不能直接转化为int类型,需要先转为float类型再转int类型

    元组

  • 元组是可以按序存储特定数量其他对象的对象,元组是不可变的

    命名元组

  • 含有属性的元组,没有行为的对象

  • 命名元组对许多只含有数据的表示来说是更好的选择,但是元组是不可变的,对于需要修改的情况下并不适用

    1. from collections import namedtuple
    2. # namedtuple需要两个参数,第一个含有对该命名元组的标识符,
    3. # 第二个参数是一个可以用空格隔开的字符串用来指定命名元组含有的属性
    4. Stock = namedtuple('Stock', 'symbol current high low')
    5. stock = Stock('GOG', 613.30, high=625.86, low=610.50)

    字典

  • get(key): 返回键对应的值

  • setdefault(key, default_value):仅当键值不存在的时候,在字典中设置该键的值。返回键值
  • keys(): 返回键的迭代器(不是列表,需要显示使用list进行转化)
  • values(): 返回值的迭代器
  • items(): 返回键值对构成的元组的迭代器
  • 字典的键应该是一个可哈希的对象,且其值不应该发生变化

    列表

  • 自定义对象在列表中进行排序时,需要自定义lt方法

    集合

  • 集合中可以容纳任何可哈希的对象,且每个对象只可以出现一次

  • 集合必须通过set()构造或{}
  • 集合和字典是无序的,不能依赖创建时的的顺序去访问

    内置函数

    repr函数

  • 将对象转化为string格式

    len函数

  • 对一个对象调用len时,该对象必须在自己的命名空间中查找该方法,并且特殊的getattribute方法(每次对象的属性或方法被调用时都要调用该函数)也被定义,那么它也会被调用,甚至可能会拒绝我们对某些特殊函数的访问。

    Reversed

  • 输入任意一个序列,返回其倒序后的副本

    Enumerate

  • 创建一个元组列表,每个元组的第一个对象是索引,第二个对象是原始条目内容

    Zip

  • 将两个或两个以上的序列创建为一个新的元组序列

    对象操作

    特殊函数

    repr函数

  • repr函数显示实例化对象的属性,当使用print显示实例化对象时,调用就是该函数

  • 默认该函数返回当前对象的“类名+object at+内存地址”

    异常处理

  • 通过raise抛出一个异常对象

  • 当一个异常抛出时,它会立即停止程序的执行,在这个异常之后应该被执行的代码都没有被执行,并且除非处理这个异常,否则程序会伴随一条错误信息退出
  • python中大部分异常都继承于Exception,而所有异常都继承于BaseException或其子类,其中SystemExit和KeyboardInterrupt直接继承与BaseException

    • 无论程序是否正常退出,SystemExit异常都会被触发,通常有代码调用sys.exit函数,设计该异常是为了能允许我们在程序退出前清理代码
    • KeyboardInterrupt通常用于命令行程序,当使用ctrl+c显示打断程序执行时,抛出该异常
    • 当使用except: 语句而不指定捕获任何异常类型时,将捕获除了上述两个特殊异常外的所有异常

      面向对象编程

  • property关键字,将对类属性的访问操作函数包装成对公共属性的访问和操作 ```python class Silly: def _get_silly(self):

    1. print("You are getting silly")
    2. return self._silly

    def _set_silly(self, value):

    1. print("You are making silly {}".format(value))
    2. self._silly = value

    def _del_silly(self):

    1. print('Whoa, you killed silly!')
    2. del self._silly

    silly = property(_get_silly, _set_silly, _del_silly, ‘This is a silly property’)

if name == ‘main‘: s = Silly() s.silly = ‘funny’ print(s.silly) del s.silly

  1. - 装饰器实现property
  2. ```python
  3. class NewSilly:
  4. def __init__(self):
  5. self._silly = None
  6. # 通过property装饰一个方法,使其称为getter,然后再设置其setter和deleter属性
  7. @property
  8. def new_silly(self):
  9. print('You are getting new silly')
  10. return self._silly
  11. @new_silly.setter
  12. def new_silly(self, value):
  13. print('You are making new silly {}'.format(value))
  14. self._silly = value
  15. @new_silly.deleter
  16. def new_silly(self):
  17. print('Whoa, you killed new silly')
  18. del self._silly
  • 属性和property属性之间的唯一区别是,在property属性被检索、赋值或者删除时可以自定义一些操作