# 内置函数和类型

Python 解释器内置了很多函数 (opens new window)类型 (opens new window),任何时候都能使用。

# 一、内置函数

# 输入输出

# 对象创建

数据类型转换或创建新对象。

  • int (opens new window)()

    返回一个基于数字或字符串构造的整数对象。

    • 如果参数定义了 __int__()int(x) 将返回 x.__int__()

    • 如果参数定义了 __index__(),则返回 x.__index__()

    • 如果参数定义了 __trunc__(),则返回 x.__trunc__()

    • 对于浮点数,它将向零舍入

    一个进制为 n 的整数包含 0n-1 的数,其中 a-zA-Z 表示 1035

    默认的 base10,允许的进制有 02-362816 进制的数字可以在代码中用 0b/0B0o/0O0x/0X 前缀来表示。

    进制为 0 将按照代码的字面量来精确解释,最后的结果会是 281016 进制中的一个。

    # 非法
    int('010', 0)
    
    # 合法
    int('010')
    int('010', 8)
    
    # 二进制转十进制
    int('0b_1111_0000', 2)
    
  • str (opens new window)()

    返回一个 str 对象。

    str(b'Hello', encoding="utf-8")
    
  • bytes (opens new window)()

    返回一个新的 bytes 对象,这是一个不可变序列,包含范围为 0 <= x < 256 的整数。

    bytes('Hello', encoding='utf8')
    

# 数学运算

数学计算和数值处理。

# 可迭代对象操作

生成、操作或处理可迭代对象。

  • enumerate (opens new window)()

    返回一个枚举对象,里面包含一个计数值和通过迭代获得的值。

    seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    headers = {value: idx for idx, value in enumerate(seasons)}
    # {'Spring': 0, 'Summer': 1, 'Fall': 2, 'Winter': 3}
    

# 函数式编程工具

支持高阶函数或函数式编程。

  • filter (opens new window)()

    使用 iterablefunction 返回真值的元素构造一个迭代器。

    numbers = [1, 6, 3, 8, 2, 7, 4]
    filtered_numbers = list(filter(lambda x: x < 5, numbers))
    
  • all (opens new window)()

    如果 iterable 的所有元素均为真值,或可迭代对象为空,则返回 True

    if not all([username, password]):
        raise ValueError('用户名或密码为空')
    

# 反射与自省

检查或操作对象属性/类结构。

# 文件与资源管理

文件操作或资源控制。

  • open (opens new window)()

    打开 file 并返回对应的 file 对象,如果该文件不能被打开,则引发 OSError (opens new window)

    可用模式如下:

    • r:读取,默认值。
    • w:写入。
    • x:排它性创建,如果文件已存在则失败。
    • a:打开文件用于写入,如果文件存在则在末尾追加。
    • b:二进制模式。
    • t:文本模式,默认。
    • +:打开用于更新,读取与写入。

# 二、内置类型

Python 解释器中内置的标准类型 (opens new window)涵盖了多种数据结构和对象类型,能够满足大多数编程需求。

# 数字类型

共有三种不同的数字类型 (opens new window)

整数和浮点数支持下列运算 (opens new window)

运算 结果
x + y xy 的和
x - y xy 的差
x * y xy 的乘积
x / y xy 的商
x // y xy 的商数
x % y x / y 的余数
-x x 取反
+x x 不变
abs(x) x 的绝对值
int(x) x 转换为整数
float(x) x 转换为浮点数
divmod(x, y) (x // y, x % y)
pow(x, y) xy 次幂
x ** y xy 次幂

商数也称为整数除法,结果值是一个整数,但结果的类型不一定是 int

运算结果总是向负无穷的方向舍入:

  • 1//20
  • (-1)//2-1
  • 1//(-2)-1
  • (-1)//(-2)0

# 序列类型

有三种基本序列类型 (opens new window)

# 列表

列表 (opens new window)是可变序列,通常用于存放同类项目的集合。

可以用多种方式构建列表:

  • 使用一对方括号来表示空列表:[]
  • 使用方括号,其中的项以逗号分隔:[a], [a, b, c]
  • 使用列表推导式:[x for x in iterable]
  • 使用类型的构造器:list()list(iterable)

列表推导式提供了一种简明扼要的方法来创建列表。

它的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,再然后是零个或多个 for 或者 if 语句。

返回结果将是一个新的列表,在这个以 iffor 语句为上下文的表达式运行完成之后产生。

列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。

例如:

[x * y for x in range(1, 5) if x > 2 for y in range(1, 4) if y < 3]

他的执行顺序是:

for x in range(1, 5):
    if x > 2:
        for y in range(1, 4):
            if y < 3:
                append(x * y)

# 元组

元组 (opens new window)是不可变序列,通常用于储存异构数据的多项集。

可以用多种方式构建元组:

  • 使用一对圆括号来表示空元组:()
  • 使用一个后缀的逗号来表示单元组:a,(a,)
  • 使用以逗号分隔的多个项:a, b, c(a, b, c)
  • 使用内置的 tuple()tuple()tuple(iterable)

# range

range (opens new window) 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。

range (opens new window) 构造器的参数必须为整数,可以是内置的 int (opens new window) 或任何实现了 __index__() (opens new window) 特殊方法的对象。

# 文本序列类型

在 Python 中处理文本数据是使用 str (opens new window) 对象,也称为字符串。字符串是由 Unicode 码位构成的不可变序列。

字符串字面值有多种不同的写法:

  • 单引号:'允许包含有 "双" 引号'
  • 双引号:"允许嵌入 '单' 引号"
  • 三重引号:'''三重单引号'''"""三重双引号"""

字符串格式化

字符串实现了所有一般序列的操作,还额外提供了以下列出的一些附加方法。

  • str.encode (opens new window)(encoding='utf-8', errors='strict')

    返回编码为 bytes 对象的版本。

  • str.format (opens new window)(args, **kwargs)

    执行字符串格式化操作。

    "The sum of 1 + 2 is {0}".format(1+2)
    # 'The sum of 1 + 2 is 3'
    
  • str.upper (opens new window)()

    返回原字符串的副本,其中所有区分大小写的字符均转换为大写。

  • str.join (opens new window)(iterable)

    调用该方法的字符串将作为元素之间的分隔。

    print("&".join(["1", "2"]))
    

# 二进制序列类型

操作二进制数据的核心内置类型是:

bytesbytearray 对象的下列方法可以用于任意二进制数据。

# 映射类型

目前仅有一种标准映射类型 dict (opens new window)

字典可用多种方式来创建:

  • 字面量

    body = {
        "data": self._data,
        "msg": self._msg,
        "code": self._code
    }
    
  • 字典推导式

    以上面的字面量 body 为基础,如果 valueNone,则删除。

    body = {k: v for k, v in body.items() if v is not None}
    

字典所支持的操作:

  • get (opens new window)(key[, default])

    如果 key 存在于字典中,则返回 key 的值,否则返回 default

  • keys (opens new window)()

    返回由字典键组成的一个新视图。

  • items (opens new window)()

    返回字典中所有键值对所组成的元组列表。

    my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
    
    for key, value in my_dict.items():
        print(key, value)
    
  • setdefault (opens new window)(key[, default])

    如果字典存在键 key,返回它的值。如果不存在,插入值为 default 的键 key,并返回 default

  • update (opens new window)([other])

    使用来自 other 的键值对更新字典,覆盖原有的键。update() (opens new window) 接受另一个字典对象,或者一个包含键值对的可迭代对象。如果给出了关键字参数,则会以其所指定的键值对更新字典。

    d.update(red=1, blue=2)
    
  • copy (opens new window)()

    返回原字典的浅拷贝。