内置类型
完整的官方英文文档在这里: 点我。现将其中重点的部分摘出来。
不断更新中…
1.真值测试
默认情况下,对象被视为true,除非其类定义了__bool__()
方法并且返回False或者__len__()
方法返回零(使用对象调用)。 以下是大多数被认为是False的内置对象:
- 常量定义为False:None和False。
- 任何数值类型的零:
0
,0.0
,0j
,Decimal(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
字符串很重要,分成了三章进行介绍:
- 字符串的定义、所有方法,格式化字符串,请访问 Python 3.7.1 基础-数据类型-字符串
- 序列的通用操作包含了一部分字符串操作,请访问 Python 3.7.1 基础 数据类型 列表 元组 字符串
- string模块也隶属于字符串,里面也有些内容需要了解,请访问 Python 3.7.1 模块 string
7. 集合类型 set,frozenset
已经单独成章,请访问 Python 3.7.1 基础 数据类型 集合 set