数据类型

说明

什么是数据类型

数据类型是对数据的分类,例如:整数类型、浮点类型、字符串类型等等。
任何数据都有明确的数据类型,例如:18属于整数类型,'18'属于字符串类型,5.6属于浮点类型。

如何获取数据的数据类型

调用内置函数type可以获取数据的数据类型

a = '18'
b = 18
c = 5.6
d = 'Hello'
print(type(a))
print(type(b))
print(type(c))
print(type(d))

返回结果如下:

<class 'str'>
<class 'int'>
<class 'float'>
<class 'str'>

整型

整数具有不同进制的表示方式

  1. 10进制:默认的进制
  2. 2进制:0b开头
  3. 8进制:0o开头
  4. 16进制:0x开头
print(118)				 # 118
print(0b101101)		# 45
print(0o155)		   # 109
print(0x96)             # 150

整数转换为不同进制的字符串

通过调用内置函数将10进制整数转换为不同进制的字符串:

  1. bin():将10进制整数转换为2进制(binary)字符串
  2. oct():将10进制整数转换为8进制(octal)字符串
  3. hex():将10进制整数转换为16进制(hexadecimal)字符串
print(bin(115))	# 0b1110011
print(oct(115))	# 0o163
print(hex(115)	# 0x73

运算符

什么是运算符

运算符是一种特殊的符号。通过运算符对相应数据类型的运算数进行运算。

常见的运算符

  • 标准算术运算符
  • 整数除运算符
  • 取余运算符
  • 幂运算符
  • 布尔运算符
  • 比较运算符
  • 赋值运算符

标准算术运算符

标准算数运算符包括加减乘除四个运算符,分别为:+、-、*、/

print(3 + 5)    # 8
print(7 - 2)    # 5
print(3 * 2)    # 6
print(3.2 / 8)  # 0.4

整数除运算符

整数除运算符:// 对两个数值进行运算时,运算结果只保留整数部分。

print(13 // 8)      # 1
print(8.2 // 2.7)   # 3.0

取余运算符

取余运算符:% 表示整除后,多出来的部分,这部分就是余数。

print(13 % 8)         # 5
print(8.2 % 2.7)     # 0.09999999999999876

幂运算符

幂运算符用于实现幂运算,用两个**表示

print(13 ** 8)       # 815730721
print(8.2 ** 2.7)    # 293.29009851932244

内置函数pow也可以实现幂运算
print(pow(13, 8)) # 815730721

布尔运算符

布尔运算符用于对布尔值进行运算,运算结果仍然是一个布尔值

and

当两个运算数都为True时,运算结果才为True

print(True and True)    # True
print(True and False)   # False
print(False and False)  # False
print(False and True)   # False

or

只要有一个运算数为True,运算结果就为True。

print(True or True)    # True
print(True or False)   # True
print(False or False)  # False
print(False or True)   # True

not

用于对运算数取反。

print(not True)     # False
print(not False)    # True

赋值运算符和变量

变量

在Python中,一切皆为对象。变量相当于标签。
变量是没有数据类型的,只有对象才有数据类型,通常情况下,一个变量只引用一种数据类型的对象。

什么是赋值运算符

赋值运算符用=表示,=的左边是变量,=的右边是对象。
在某一时刻,一个标签只能贴在一个对象上,一个对象上可以贴上多个标签。

a = 11
print(a)    # 11
a = 'Hello'
print(a)    # Hello

链式赋值

如果想让多个变量同时引用同一个对象,可以使用链式赋值。

a = b = c = 11
print(a)    # 11
print(b)    # 11
print(c)    # 11

参数赋值

可以在赋值运算符的左边添加其他运算符,从而实现参数赋值:

  • a += b 相当于:a = a + b
  • a -= b 相当于:a = a - b
  • a *= b 相当于:a = a * b
  • a /= b 相当于:a = a / b
  • a //= b 相当于:a = a // b
  • a %= b 相当于:a = a % b

比较运算符

比较运算符的作用

比较运算符用于比较两个运算符,比较结果是一个布尔值。
比较运算符包括:

  • <:小于
  • <=:小于等于
  • >:大于
  • >=:大于等于
  • ==:用于比较两个运算数是否相等,用于“相等性”测试。
  • !=:不等于
  • is:用于比较两个运算数是否是同一个对象,用于“同一性”测试。
  • is not:不是同一对象
print(3 < 5)
print(3 <= 5)
print(5 > 3)
print(5 >= 3)
print(5 == 5.0)
print(5 != 5.0)
a = b = [1, 2, 3]
c = [1, 2, 3]
print(a == b)
print(a == c)
print(a is b)
print(a is c)

返回结果如下:

True
True
True
True
True
False
True
True
True
False

不可变类型对象的is比较

对于不可变类型的对象,其内存可能会被重用,比如数值较小的整数对象。
可以通过内置函数id进行验证,内置函数id用于返回对象的唯一标识(对象在内存中的地址)。

a = 15
b = 15
print(id(a))    # 2266793378480
print(id(b))    # 2266793378480
print(a is b)   # True

链式比较

age = 18
# 相当于print(0 < age and age < 100)
print(0 < age < 100)    # True
# 相当于print(1 == 2 and 2 < 3)
print(1 == 2 < 3)       # False

关键字和标识符

关键字

关键字就是Python语言定义的、具有特殊用途的词。

通过内置函数help()可以查看所有关键字。
image-1661848645479
通过导入模块keyword并使用keyword.kwlist可以查看所有关键字。

import keyword
# 输出是一个list
print(keyword.kwlist)

标识符

标识符就是给程序中的变量、函数、方法、类命名的名字。
标识符的命名规则:

  • 区分大小写
  • 不能是关键字
  • 不能以数字开头
  • 不能包含空格、制表符、数学符号、中划线、箭头等

推荐的命名规范:

  • 见名知意,有一个或多个有意义的单词组合
  • 所有单词全部小写,单词之间用下划线进行分隔

对象None

用于表示数据值的不存在。
对象None是占据内存空间的,并不是空或没有定义。
对象None主要用于变量的初始化或者将变量重置为“数据值不存在”的状态。

a = None
print(a)        # None
print(type(a))  # <class 'NoneType'>

运算符的优先级

每个运算符都有固定的优先级。
当表达式中包含优先级不同的运算符时,高优先级的运算符先参与运算。
优先级如下:

运算符描述
**指数 (最高优先级)
~ + -按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //乘,除,取模和取整除
+ -加法减法
>> <<右移,左移运算符
&位 'AND'
^
<= < > >=比较运算符
<> == !=等于运算符
= %= /= //= -= += *= **=赋值运算符
is 、is not身份运算符
in 、not in成员运算符
not and or逻辑运算符

对于包含多个运算符的复杂表达式,可以通过如下两种方式来提高可读性:

  • 在复杂表达式中使用小括号来指定运算顺序。
  • 将复杂表达式拆分成几步来完成。

星霜荏苒 居诸不息