1:整数数据类型

在 Python 中,整型(int)是用来表示整数的数据类型。整数可以是正整数、负整数和零。

整型的一些使用细节如下:

一:在 Python 3.x 中,整型的表示范围基本上是没有限制的。它可以表示非常大的整数。这是因为 Python 会根据整数的大小自动分配足够的内存空间来存储它。 而在 Python 2.x 中,有两种整数类型:int和long。int类型的范围是-2147483648到2147483647,如果超过这个范围,就需要使用long类型来表示,long类型的整数后面会带有一个L(例如12345678901234567890L)。不过在 Python 3.x 中,int类型已经能够处理任意大小的整数,不再区分int和long。

二:Python的整数有十进制,二进制(0B开头),八进制(0O开头),十六进制(0X开头)。Python程序在运算时都会将整数转化为十进制输出。

三:拓展知识点:Python中的整型占多少个字节?

【要回答这个问题,首要先知晓一些编程常识。字节(Byte)是计算机的基本存储单元,位(bit)是计算机的最小存储单位。他们之间的关系是:1字节 = 8位。知晓以上常识后,我们再来回答上面的问题。在Python中,整型占据的字节数是随着数字的增大而增大,每次的增量是4个字节。】

import sys
n1 = 0
n2 = 1
n3 = 2
n4 = 2 ** 15
n5 = 2 ** 30
n6 = 2 ** 128

print(sys.getsizeof(n1))
print(sys.getsizeof(n2))
print(sys.getsizeof(n3))
print(sys.getsizeof(n4))
print(sys.getsizeof(n5))
print(sys.getsizeof(n6))

2:浮点数据类型

Python 中,浮点型(float)用于表示带有小数部分的数字。它是基于 IEEE 754 标准的双精度浮点数(64 位)。例如,3.14、-2.5、0.0都是浮点型数据。浮点数可以用十进制表示法来书写,其中包括整数部分、小数点和小数部分。

Python 中的浮点数精度有限。由于其内部采用二进制来表示,有些十进制小数不能精确表示。例如,0.1在二进制下是一个无限循环小数,所以在计算机中存储的0.1是一个近似值。这可能会导致一些看似奇怪的现象,如:

 n =8.1/3
 print(n)

我们可能期望输出2.1,但实际上输出是2.6999999999999997。这是因为在计算机内部存储和运算过程中产生的微小误差积累导致的。要想解决此类问题,我们需要引入decimal模块。

decimal模块是 Python 标准库中的一个模块,主要用于进行高精度的十进制浮点数运算。由于 Python 内置的float类型在进行浮点数计算时可能会因为二进制和十进制的转换问题产生精度误差(如0.1 + 0.1 + 0.1实际结果可能不是精确的0.3),decimal模块可以有效避免这种情况,提供更精确的十进制计算。

我们可以通过多种方式创建Decimal对象,方法一是直接使用数字作为参数来创建

from decimal import Decimal

#由数字创建
n =2.7
print(Decimal(n))

需要注意的是,虽然这里传入了一个浮点数2.7,但实际上Decimal会将其转换为最接近的十进制表示。如果想要精确地表示2.7,最好传入字符串形式,如b = Decimal(‘2.7’),这样可以避免由浮点数转换带来的潜在精度损失。

所以第二种推荐的方式是

from decimal import Decimal

n = Decimal("8.1")/Decimal("3")
print(n)

3:布尔数据类型

在 Python 中,布尔(bool)类型是一种基本数据类型,用于表示真(True)或假(False)两种逻辑值。它是以英国数学家乔治・布尔(George Boole)命名的,是逻辑判断和条件控制的基础。例如,判断一个数是否大于另一个数,或者判断一个元素是否存在于一个列表中等情况都会用到布尔类型。

许多数据类型都可以转换为布尔类型。在 Python 中,以下情况会转换为False:False本身、0(包括0.0等所有零值)、空字符串""、空列表[]、空元组()、空集合set()、空字典{}和None。其他非零数值、非空字符串、非空容器等都会转换为True。例如,bool(0)等于False,bool(1)等于True,bool(“abc”)等于True,bool([])等于False。

if "奉旨而挥是网文大神":
    print("奉旨而挥666")

if :
    print("练假成真,横推诸天,道爷我成了")

4:字符串数据类型

在 Python 中,字符串(string)是一种不可变的有序字符序列。可以使用单引号(’)、双引号(")或三引号(’’’ 或""")来表示字符串。

text = """This is a
multi - line
string."""
print(text)

在字符串前面加个“r”可以使得整个字符串不会被转义

str = r"我是网文作者\n奉旨而挥"
print(str)

4.1:字符串驻留机制

定义和概念:

字符串驻留(String Interning)是 Python 中的一种优化机制。当创建新的字符串对象时,Python 会检查是否已经存在具有相同值的字符串对象。如果存在,就会直接返回已有的字符串对象的引用,而不是创建一个新的对象。这样可以节省内存空间并提高性能,特别是在处理大量相同字符串的情况下。

工作原理:

Python 内部维护了一个字符串驻留池(String Intern Pool)。这个池用于存储已经驻留的字符串。当创建一个新字符串时,Python 会首先检查这个字符串是否已经在驻留池中。

a ="网文作者奉旨而挥"
b ="网文作者奉旨而挥"
c ="网文作者奉旨而挥"

print(a is b)
print(id(a))
print(id(b))
print(id(c))

适用范围如下:

一是编译时确定的字符串常量:在 Python 代码中直接出现的字符串常量(如"abc"、“123"等),在编译阶段就会被放入驻留池。这包括在函数定义、类定义、模块级别等地方出现的字符串常量。

二是一定长度限制内的字符串:在 CPython(Python 的官方实现)中,通常只有较短的字符串会被驻留。具体的长度限制可能因 Python 版本等因素而有所不同,但一般来说,较短的字符串更有可能被驻留。例如,单个字符或者一些常见的短单词等很容易被驻留。

特殊情况和注意事项如下:

动态创建的字符串:通过拼接或者其他动态操作创建的字符串通常不会自动驻留。

不同编码的字符串:如果两个字符串的编码不同,它们不会被视为相同的字符串进行驻留。例如,一个 UTF - 8 编码的"你好"和一个 GBK 编码的"你好"不会被驻留为同一个对象。

5:数据类型转换

隐式类型转换:在 Python 的某些运算操作中,会自动进行隐式类型转换。比如int和float两者运算时会向高精度的float转换。

a = 10
b = 0.2
print(a*b) 

显式类型转换:将数据类型作为函数名字进行使用

a = 10.96
print(int(a))