Python3 基本数据类型

1、万物皆对象

Python 中有一个非常重要的概念——万物皆对象,无论是一个数字、字符串,还是列表、字典、集合、元组,在 Python 中都会以一个对象的形式存在。

a = 123

对于上面这行代码,在 Python 看来就是创建一个 PyObject 对象,值为 123,然后定义一个相当于指针 a,a 指向这个 PyObject 对象。

2、可变对象和不可变对象

可变数据类型:value值改变,id值不变;不可变数据类型:value值改变,id值也随之改变。 id() 函数用于获取对象的内存地址。

Python 中的对象分为两种类型,可变对象和不可变对象,例如:

a = [1, 2, 3]
print(id(a))  # 2587116690248
a += [4]
print(id(a)) # 2587116690248b = 1
print(id(b)) # 2006430784
b += 1
print(id(b)) # 2006430816

上面代码中我们分别定义了一个可变对象和一个不可变对象,并且对他们进行修改,打印修改前后的对象标识可以发现,对可变对象进行修改,变量对其引用不会发生变化,对不可变对象进行修改,变量引用发生了变化。

上图是一个可变对象,当修改对象时,假如删除列表中的一个元素,实际上把其中一个元素从对象中移除,对象本身的标识是不发生变化的。

改变一个不可变对象时,例如给一个 int 型加 2,语法上看上去是直接修改了 i这个对象,但是如前面所说,i 只是一个指向对象 73 的一个变量,Python 会将这个变量指向的对象加 2 后,生成一个新的对象,然后再让i指向这个新的对象。

3、Python 内置函数

https://www.runoob.com/python/python-built-in-functions.html

Python dir() 函数

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

Python id() 函数

id() 函数返回对象的唯一标识符,标识符是一个整数。
CPython 中 id() 函数用于获取对象的内存地址。

Python type() 函数

type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象。

isinstance() 与 type() 区别:

• type() 不会认为子类是一种父类类型,不考虑继承关系。
• isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

Python bool() 函数

bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。
bool 是 int 的子类。
sys.getrefcount() 函数,可以查看一个变量的引用次数。

标准数据类型

Python3 中有六个标准的数据类型:

•    Number(数字)
•   String(字符串)
•   List(列表)
•   Tuple(元组)
•   Set(集合)
•   Dictionary(字典)

Python3 的六个标准数据类型中:

•    不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
•   可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

一、数字类型 Number

Python3 支持 int、float、bool、complex(复数)。
当你指定一个值时,Number 对象就会被创建:

var1 = 1
var2 = 10

您也可以使用del语句删除一些对象引用。
del语句的语法是:

del var1[,var2[,var3[....,varN]]]

您可以通过使用del语句删除单个或多个对象。例如:

del var
del var_a, var_b

数字类型是不可变类型。数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象。

Python的变量和数据类型的关系,变量只是对某个对象的引用或者说代号、名字、调用等等,变量本身没有数据类型的概念。

1、整数 (int)

Python可以处理任意大小的整数,当然包括负整数。

>>> id(-1)
1868280832
>>> id(0)
1868280864
>>> id(1)
1868280896
>>> id(2)
1868280928

从上面的空间地址看,地址之间正好差 32。Python 在初始化环境的时候就在内存里自动划分了一块空间,专门用于整数对象的存取。当然,这块空间也不是无限大小的,能保存的整数是有限的,所以你会看到 id(0) 和 id(10000) 之间的地址差别很大。

>>> id(0)
1456976928
>>> id(10000)
45818192

小整数对象池:

Python 初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期重复生成!这是一个包含 262 个指向整数对象的指针数组,范围是 -5 到 256。也就是说比如整数 10,即使我们在程序里没有创建它,其实在 Python后台已经悄悄为我们创建了。
为什么要这样呢?在程序运行时,包括 Python 后台自己的运行环境中,会频繁使用这一范围内的整数,如果每需要一个,你就创建一个,那么无疑会增加很多开销。创建一个一直存在,永不销毁,随用随拿的小整数对象池,无疑是个比较实惠的做法。

下面我们来验证一下小整数对象池的存在。

>>> id(-6)
45818128
>>> id(-5)
1456976768
>>> id(-4)
1456976800
>>> id(255)
1456985088
>>> id(256)
1456985120
>>> id(257)
45818128

从 id(-6) 和 id(257) 的地址,我们能看出小整数对象池的范围,正好是 -5 到256。
除了小整数对象池,Python 还有整数缓冲区的概念,也就是刚被删除的整数,不会被真正立刻删除回收,而是在后台缓冲一段时间,等待下一次的可能调用。

>>> a = 1000000
>>> id(a)
45818160
>>> del a       # 删除变量a
>>> b = 1000000
>>> id(b)
45818160

上面,我给变量 a 赋值了整数 1000000,看了一下它的内存地址。然后我把 a删了,又创建个新变量 b,依然赋值为 1000000,再次看下b的内存地址,和以前 a 存在的是一样的。
这一段内容,可能感觉没什么大用,但它对于理解 Python 的运行机制有很大帮助。

2、浮点数(float)

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10 的9次方 和 12.3x10 的8次方 是完全相等的。

浮点数可以用数学写法,如 1.23,3.14,-9.01,但是对于很大或很小的浮点数,就必须用科学计数法表示,把 10 用 e 替代,1.23x10 9 就是1.23e9,或者 12.3e8,0.000012 可以写成 1.2e-5,即:使用字母 e 或E 作为幂的符号,以 10 为基数,格式如:

<a>e<b> 表示 a*10b

浮点数取值范围和小数精度都存在限制,但常规计算可忽略,取值范围数量级约 -10 的307次方 至 10 的308次方,精度数量级 10 -16。

3、复数(complex)

复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示,复数的实部 a 和虚部 b 都是浮点型。关于复数,不做科学计算或其它特殊需要,通常很难遇到。

4、数字类型转换

有时候,我们需要对数字的类型进行转换。Python 为我们提供了方便的内置的数据类型转换函数。
https://docs.python.org/zh-cn/3/library/functions.html

2、8、16 进制的数字可以在代码中用 0b/0B 、 0o/0O 、 0x/0X 前缀来表示。进制为 0 将安照代码的字面量来精确解释,最后的结果会是 2、8、10、16 进制中的一个。

Python 十进制转二进制、八进制、十六进制

bin()  转2进制方法
oct()  转8进制方法
hex()  转16进制方法
int()  转10进制方法


int():函数用于将一个字符串或数字转换为整型。

int([x])
int(x, base=10)

返回一个基于数字或字符串 x 构造的整数对象,或者在未给出参数时返回 0。
对于浮点数,它将向零舍入。
如果 x 不是数字,或者有 base 参数,x 必须是字符串、bytes、表示进制为 base 的 整数字面值 的 bytearray 实例。
x – 字符串或数字。
base – 进制数,默认十进制。
返回整型数据。


实例
以下展示了使用 int() 方法的实例:

>>>int() # 不传入参数时,得到结果0
>>> int(3) # 3
>>> int(3.6) # 3
>>> int(0x12) # 18
>>> int('12',16) # 如果是带参数base的话,12要以字符串的形式进行输入,12 为 16进制 18
>>> int('a',16) # 10
>>> int('0xa',16) # 10
>>> int('0xa',0) # 10
>>> int('10',8) # 8float(x):将x转换到一个浮点数。
complex(x):将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y):将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。

转换过程中如果出现无法转换的对象,则会抛出异常,比如 int(“haha”),你说我把字符串 “haha” 转换为哪个整数才对?

5、数学函数


以下是 math 模块 pow() 方法的语法:

import math
math.pow( x, y )

内置的 pow() 方法

pow(x, y[, z])

函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z
注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。

Python包含以下常用随机数函数:

choice(seq)

从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。

randrange ([start,] stop [,step])

从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1

random()

随机生成下一个实数,它在[0,1)范围内。

seed([x])

改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。

shuffle(lst)

将序列的所有元素随机排序

uniform(x, y)

随机生成下一个实数,它在[x,y]范围内。


6、数学常量

pi 数学常量 pi(圆周率,一般以π来表示)
e 数学常量 e,e即自然常数(自然常数)。

二、布尔类型(bool)

在 Python 语言中,布尔类型只有两个值,True 与 False。是 int 的子类型。

age = 16
if age >= 18:print("你是个成年人")
else:print("你还未成年")

Python 内置的 bool() 函数可以用来测试一个表达式的布尔值结果。
下面一些例子的结果,可能让你感到惊讶,但事实就是如此,请坦然接受。

>>> True  # True
>>> False  #   False
>>> 3 > 2  #     True
>>> 3 > 5  #    False
>>> 3 in [1,2,3]  #    True
>>> 3 == 9/3  #  True
>>> 3 is "3"  #  False

为什么3 is "3"是错误的呢?因为一个是整数一个是字符串,is运算符比较的是对象,当然是错误的。

>>> bool(1) #   True
>>> bool(0) #  False
>>> bool([]) # False
>>> bool(()) # False
>>> bool({}) # False
>>> bool(-1) # True
>>> bool('') #   False
>>> bool("False") #  True
>>> bool("True") #   True
>>> bool(0.0) #    False
>>> bool(1.0) #    True
>>> bool(-0.0) #   False

0、0.0、-0.0、空字符串、空列表、空元组、空字典,这些都被判定为False。而-1、"False"也被判断为True。
布尔类型可以进行 and、or 和 not 运算。
and 运算是与运算,只有所有都为 True,and 运算的结果才是True:

>>> True and True # True
>>> True and False #   False
>>> False and False #  False
>>> 5 > 3 and 3 > 1  #   True

or 运算是或运算,只要其中有一个为 True,or 运算结果就是True:

>>> True or True #  True
>>> True or False #    True
>>> False or False #   False
>>> 5 > 3 or 1 > 3 # True

not 运算是非运算,它是单目运算符,把 True 变成 False,False 变成 True:

>>> not True #  False
>>> not False #    True
>>> not 1 > 2 # True

再开下脑洞,布尔类型还能做别的运算吗?试试就知道了!

>>> True > False #   True
>>> True < False #  False
>>> True >=False # True
>>> True -1 #  0
>>> True + 1 #    2
>>> True *3 #  3
>>> False -1 # -1

真的可以!比较运算,四则运算都没有问题。并且在做四则运算的时候,明显把 True 看做 1,False 看做 0。

三、空值类型(NoneType)

空值是 Python 里一个特殊的值,用 None 表示(首字母大写)。None 不能理解为 0,因为 0 是整数类型,而 None 是一个特殊的值。None 也不是布尔类型,而是 NoneType。

>>> bool(None) #    False
>>> type(None) #   <class 'NoneType'>

我们平时最容易犯的错误就是获得了一个 None 值,却对它进行各种方法调用,例如:

list1 = ["a", "b", None]
for char in list1:print(char.join("A"))
######################################
Traceback (most recent call last):File "F:/Python/pycharm/201705/test.py", line 7, in <module>print(char.join("A"))
AttributeError: 'NoneType' object has no attribute 'join'

内置常量

有少数的常量存在于内置命名空间中。 它们是:

False

bool 类型的假值。 给 False 赋值是非法的并会引发 SyntaxError。

True

bool 类型的真值。 给 True 赋值是非法的并会引发 SyntaxError。

None

NoneType 类型的唯一值。 None 经常用于表示缺少值,当因为默认参数未传递给函数时。 给 None 赋值是非法的并会引发 SyntaxError。

逻辑值检测

任何对象都可以进行逻辑值的检测,以便在 if 或 while 作为条件或是作为下文所述布尔运算的操作数来使用。

一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 bool() 方法且返回 False 或是定义了 len() 方法且返回零。

下面基本完整地列出了会被视为假值的内置对象:

•    被定义为假值的常量: None 和 False。
•   任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
•   空的序列和多项集: '', (), [], {}, set(), range(0)

产生布尔值结果的运算和内置函数总是返回 0 或 False 作为假值,1 或 True 作为真值,除非另行说明。 (重要例外:布尔运算 or 和 and 总是返回其中一个操作数。)

布尔运算 — and, or, not

这些属于布尔运算,按优先级升序排列:

x or y       if x is false, then y, else x               (1)
x and y     if x is false, then x, else y               (2)
not x       if x is false, then True, else False    (3)

注释:

  1. 这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。
  2. 这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。
  3. not 的优先级比非布尔运算符低,因此 not a == b 会被解读为 not (a == b) 而 a == not b 会引发语法错误。

练习

1、描述不正确的是:

A:Python 中的变量不需要声明  B:每个变量在使用前都必须赋值
C:Python 是静态语言  D:Python 是动态语言

2、语句不正确的是:

 A:a = b = c = 1  B:x, y = "abc"  C:a, b, c = 1, 2, "abc"。 D:a,b = b,a

3、描述不正确的是:

 A:Python 中的一切都是对象  B:变量是对象的引用 C:a = "Jack", 其中 "Jack" 是一对象  D:执行语句 a=b="Jack",b="Tom",则 a也等于 "Tom"

4、描述不正确的是:

 A:123 是不可变对象  B:"abc" 是可变对象 C:对可变对象进行修改,变量对其引用不会发生变化。 D:对不可变对象进行修改,变量引用发生了变化。

5、描述不正确的是:

 A:dir(),id(),type()和strip() 都是内置函数 B:dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表。 C:type() 函数如果你只有第一个参数则返回对象的类型 D:id() 函数返回对象的唯一标识符,标识符是一个整数。

6、描述不正确的是:

 A:a=123,str(a) 值是 "123"  B:a,b=b,a  等价于 t=a;a=b;b=t C:a="123",int(a) 值是 123  D:"123" 是数字类型

7、描述不正确的是:

 A:Python中有六个标准的数据类型 B:1,"1",[1],(1),{1},{1:2}分别是 int, str, list, tuple, set, dict 类型 C:不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)D:可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

8、描述不正确的是:

 A:Python 支持 int、float、bool、complex(复数)。 B:bool 不属于数字类型 C:Python 可以处理任意大小的整数 D:小整数对象池范围是 -5 到 256

9、描述不正确的是:

 A:布尔类型只有两个值,true 与 false。 B:bool() 函数可以用来测试一个表达式的布尔值结果 C:整数是可以任意大小的 D:浮点数取值范围和小数精度都存在限制

10、描述不正确的是:

 A:0、0.0、-0.0、空字符串、空列表、空元组、空字典,这些都被判定为False。 B:or 运算是或运算,只要其中有一个为 True,or 运算结果就是 True。 C:bool(-1) 为 Flase D:and运 算是与运算,只有所有都为 True,and 运算的结果才是 True。

Python 教程说明
Python 1-00 简介
Python 1-01 开发环境搭建
Python 1-02 基础语法
Python 1-03 输入与输出
Python 1-04 变量与常量
Python 1-05 数字

Python 1-05 数字相关推荐

  1. Python的各种数字格式化方式(保留小数)

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...

  2. Python 接受输入数字,并求和 (异常,跳出死循环换)

    Python 接受输入数字,并求和 (异常,跳出死循环换) 参考文章: (1)Python 接受输入数字,并求和 (异常,跳出死循环换) (2)https://www.cnblogs.com/buer ...

  3. python表示数字6_【Python 1-6】Python教程之——数字

    > 数字是一种用来表示数的书写符号: 中文数字写作三十七.卅七 罗马数字写作XXXVII 阿拉伯数字二进制写作100101 [文章首发地址](http://fulade.me/python-nu ...

  4. python获取输入数字_python获取从命令行输入数字的方法

    本文实例讲述了python获取从命令行输入数字的方法.分享给大家供大家参考.具体如下: #---------------------------------------- # Name: numeri ...

  5. python基础05

    python基础05 昨日内容回顾及作业讲解 列表:增  append  insert  extend 删 remove pop clear del 改  li[索引] = '被修改的内容'  li ...

  6. 初学__Python——Python数据类型之数字

    目录 一.整型和浮点型 二.运算符 数据类型是程序的基础,程序设计的本质就是对数据进行处理.Python有设计良好的数据类型,以及丰富的内置函数. 数字是程序需要处理的最基本的数据类型,任何编程语言都 ...

  7. python中的数字类型格式与运算_Python中的数字类型格式与运算

    出品 Python中的数字(Digital)与数学中的数字相同,可以通过各种各样的运算符实现各种计算,在Python中数字类型的数据格式分为以下几种: 1.整数型(integer) 2.浮点数(flo ...

  8. python找与7相关的数字_C++和python实现阿姆斯特朗数字查找实例代码

    1.题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数. 例如1^3 + 5^3 + 3^3 = 153. 1000以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, ...

  9. Python语言数据类型-----数字和字符串

    Python语言的数字类型 整数类型 浮点数类型 复数类型 整数类型与数学中的整数类型概念一致,没有取值范围. 十进制数为 1010,99,-217 十六进制为 0x9a, -0x89 (0x,0X开 ...

  10. Python学习day02_数字类型 与 布尔类型 短路逻辑和运算符优先级

    目录 一.数字类型 1.1 整数 integers 1.2 浮点数 floating point numbers 1.3 复数 complex numbers 1.5 数字运算 二.布尔类型 Bool ...

最新文章

  1. 科技部部长:基础研究是科技创新“总开关”
  2. word2vec安装以及使用
  3. Latex注释快捷键
  4. 强化学习2——有模型强化学习MDP(搬砖马尔科夫,贝尔曼等式)
  5. boost::log::sources::severity_channel_logger_mt用法的测试程序
  6. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例
  7. 网络攻防第十一周作业
  8. vue加百度统计代码(亲测有效)
  9. Sublime text 2下alignment插件无效的解决办法
  10. C#如何使用httpwebrequest通过代理访问网页
  11. 如何对web.config进行加密和解密
  12. thinkpad10平板 linux,联想ThinkPad 10平板亮相官网 或售8445
  13. elasticsearch如何使用?
  14. 为什么现在我最终推荐内存OLTP
  15. java case 语句_Java switch case 语句
  16. Nero8刻录引导系统光盘镜像图文教程
  17. 虚拟光驱 安装深度linux,手把手教你如何用虚拟光驱安装深度WIN7
  18. Tomcat热部署问题
  19. Factory模式(工厂模式)
  20. Adaptive AUTOSAR 简介 (2021版)

热门文章

  1. 360安全,3Q大战一夜爆红
  2. 入职中企动力一月有感
  3. windows下使用jdbc读写excel文件
  4. Google C++每周贴士 #10: 分割字符串,不必拘小节
  5. 基于异构信息网络的元学习冷启动推荐
  6. (八)Listener
  7. 3.9 字节跳动 朝夕光年 游戏服务器 一面
  8. Win10 1803卡顿怎么解决?
  9. python100行代码实现的整蛊小游戏
  10. 词频分析--字典树的应用