Python 3.7.1 内置类型


完整的官方英文文档在这里:点我。现将其中重点的部分摘出来。
不断更新中…


1.真值测试

默认情况下,对象被视为true,除非其类定义了__bool__()方法并且返回False或者__len__()方法返回零(使用对象调用)。 以下是大多数被认为是False的内置对象:

  • 常量定义为False:None和False。
  • 任何数值类型的零:00.00jDecimal(0)Fraction(0, 1)
  • 空序列和集合:''()[]{}set()range(0)

除非另有说明,否则具有布尔结果的操作和内置函数始终对false返回0 或False;对true返回 1或True。(重要的例外:布尔运算or并and始终返回其中一个。)

def fun01_tf():
    flag = True
    from decimal import  Decimal
    from fractions import Fraction
    zl = [0,0.0,0j,Decimal(0),Fraction(0,1),'',(),[],set(),range(0)]

    for x in zl:
        if x:
            flag = False
            break

    print(flag)

if __name__ == "__main__":
    fun01_tf()
# 输出结果
True

2.布尔运算

  • and 短路运算 ( 按顺序,一假则假,跳过后续)
  • or 短路运算 ( 按顺序,一真则真,跳过后续)
  • not 优先级低

3.比较运算符

>, >=, <, <=, !=, ==, is, is not 8个

  • 不同类型(除了不同的数值类型),永远不会相等。
  • 此外,某些类型 (例如,函数对象) 的任何两个对象都是不相等的。
  • 同一个类中的不同对象,通常会被判定为不相等,除非该类定义了__eq__()方法
class A:
    def __init__(self,val):
        self.val = val
    def __eq__(self, other):
        return self.val == other.val

def fun01_eq():
    a = A(7)
    b = A(5)
    c = A(7)
    print(a == b,a == c)
if __name__ == "__main__":
    fun01_eq()
# 输出结果
False True

(1)既然==运算符可以通过__eq__()来实现,剩下的也可以自定义比较函数

比较运算符 对应的内置函数名
== __eq__()
!= __eq__()
>= __ge__()
> __gt__()
<= __le__()
< __lt__()

(2)is和is not运算符不能自定义;它们也可以应用于任何两个对象,并且不会引发异常。

(3)in 和 not in 有相同的语法优先级操作, 只支持序列类型。

4.数值类型

int, float, complex
(1)Python有以下三种的数值类型: 整型(integers), 浮点型(floating point numbers), 以及 复数(complex numbers).另外,布尔是一个整数的子类型。
(2) 标准库包括了额外的数值类型,如分数(fractions) (包含了有理数)和 小数(decimal) (包含了自定义精度的浮点型)。

4.1 操作运算符

+ - * / % -(一元) +(一元) // **
abs() int() float() divmod() pow() complex()
注意:int,float,complex接收所有Nd类型的数字,有关Nd类型,参见 文档

4.2 整数的一些方法

int.bit_length()

功能:返回表示二进制整数所需的位数,不包括符号和前导零。
版本:Python 3.1中的新方法。

def fun01_opt():
   n = -37
   print(bin(n),int.bit_length(n))
# 输出结果
-0b100101 6

int.to_bytes(length, byteorder, *, signed=False)

功能:返回一个表示整数的字节数组。
版本:Python 3.2中的新功能。

>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'
>>> (1024).to_bytes(10, byteorder='big')
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
>>> (-1024).to_bytes(10, byteorder='big', signed=True)
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
>>> x = 1000
>>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little')
b'\xe8\x03'

(1)使用length表示字节长度。如果长度不够,则会引发OverflowError。

print((4096).to_bytes(1,byteorder='big'))
#输出结果
Traceback (most recent call last):
  File "xx/lea-dt-normal.py", line 53, in fun01_opt
    print((4096).to_bytes(1,byteorder='big'))
OverflowError: int too big to convert

(2)byteorder参数确定用于表示整数的字节顺序。如果byteorder为“big”,则最高有效字节位于字节数组的开头。如果byteorder为“little”,则最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。

(3)signed参数确定二进制补码是否用于表示整数。如果signed是False且给出了负整数,则会引发OverflowError。signed的默认值为False。

classmethod int.from_bytes(bytes, byteorder, *, signed=False)

功能:返回由给定的字节数组表示的整数。

>>> int.from_bytes(b'\x00\x10', byteorder='big')
16
>>> int.from_bytes(b'\x00\x10', byteorder='little')
4096
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
-1024
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
64512
>>> int.from_bytes([255, 0, 0], byteorder='big')
16711680

4.3 float上的一些方法

float类型实现了numbers.Real(虚基类)
功能:返回一对整数,其比率与原始浮点数完全相等,并带有正分母。在无限大数字上报错OverflowError,在NaN数字上报ValueErrors错误。

def dt_float():
    print(float.as_integer_ratio(6.9999999999999999))
    print(float.as_integer_ratio(7.0000000000000000))
    print(float.as_integer_ratio(0.53))
# 输出结果
(7, 1)
(7, 1)
(2386907802506363, 4503599627370496)

5. 序列类型 list,tuples,range

序列类型有很多共同特性,还有自己特殊之处,已经单独成章,请访问
Python 3.7.1 基础 数据类型 列表 元组 字符串

6. 文本序列类型 str

字符串很重要,分成了三章进行介绍:

  1. 字符串的定义、所有方法,格式化字符串,请访问 Python 3.7.1 基础-数据类型-字符串
  2. 序列的通用操作包含了一部分字符串操作,请访问 Python 3.7.1 基础 数据类型 列表 元组 字符串
  3. string模块也隶属于字符串,里面也有些内容需要了解,请访问 Python 3.7.1 模块 string

7. 集合类型 set,frozenset

已经单独成章,请访问 Python 3.7.1 基础 数据类型 集合 set

8. 映射类型 字典 dict

已经单独成章,请访问 Python 3.7.1 数据类型 字典 dict

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章