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

猜你喜欢

转载自blog.csdn.net/lengfengyuyu/article/details/84574013