变量及变量类型

IT王小二2022年10月20日约 3066 字

变量及变量类型

变量

什么是变量呢,小二觉得很多人都回答不出来吧~

  • 量:是衡量(记录)现实世界中的某种特征(状态)。
  • 变:指的是记录的状态是可以发生变化的。

为什么要使用变量。

是为了让计算机能够像人一样去将一个事物的状态记忆下来,以后可以取出来进行使用。

Python中怎么使用变量呢。

例如定义一个变量,变量名称为name,值为itwxe,同时打印name这个变量。

name = 'itwxe'
print(name);

Python变量的参考命名规范。

  • 见名知意。即别人看到你的命名即使没有注释也知道这个变量是用来干啥的,为了更好的区分这一点,通常项目中会使用下划线拼接每一个单词(user_name),或者使用驼峰命名法(userName、UserName),目前小二见到的Python项目中下划线规范的比较多。
  • 变量名的第一个字符不能是数字。
  • 变量名只能是字母、数字或下划线组成,并且区分大小写。
  • 同时为了规范告诉其他人这个变量是常量不允许修改(只是规范,并不代表不可以修改),规范中通常会定义常量为全大写,单词之间使用下划线拼接,例如 USER_PASSWORD = 123456

变量几个特点。

变量的值是存在内存中的,可以使用id(变量名)获取该变量在内存中的地址。观察一下,可以发现name没有赋值为itwxe2之前内存中的地址是一直没有变的。

name = 'itwxe'
USER_PASSWORD = 123456
print(id(name))
print(id(name))
name = 'itwxe2'
print(id(name))
print(id(name))
print(id(USER_PASSWORD))

变量是有类型的,经常使用的类型有字符串、数字、布尔、列表、元组、字典、集合,使用type(变量名)来获取变量的类型。

name = 'itwxe'
# 输出结果 <class 'str'>,表示为字符串类型
print(type(name))

变量类型

每一个变量都会有变量类型,接下来就瞅瞅每种变量类型有什么作用,常用场景有哪些~

字符串

  • 字符类型 <class 'str'>
  • 作用:记录描述性质的数据,比如人的名字、性别、家庭地址、公司简介、提示信息等。
  • 定义:在引号内按照从左到右的顺序依次包含一个个字符,引号可以是单引号、双引号、三引号,通常情况下使用单引号。

字符串的定义

# 例如定义name
name1 = 'itwxe'
name2 = "itwxe"
name3 = '''itwxe'''

print(name1, name2, name3)

常用方法

字符串拼接。使用 + 拼接,* 重复打印多个字符串。

print('itwxe' + 'blog')
print('itwxe' * 10)

通过索引来取出字符串中对应位置上的字符,从左到右索引从0开始,从右到左索引从-1开始。

tips_str = 'abcdef'
# 取出第1个英文字符
print(tips_str[0])
# 取出第2个英文字符
print(tips_str[1])
# 取出倒数第1个英文字符
print(tips_str[-1])
# 取出倒数第2个英文字符
print(tips_str[-2])

从键盘输入。print是输出,那么需要从键盘输入使用input。

# 特别注意:input(提示用户的输入信息) 输入的数据都会变成字符串类型
# 例如需要输入用户名密码
user_name = input('请输入你的用户名:')
password = input('请输入你的:')
print('键盘输入的用户名为:' + user_name + ", 变量类型: " + type(user_name))
print('键盘输入的密码为:' + password + ", 变量类型: " + type(password))

字符串使用大量+拼接,显然不够优雅,这个时候就需要使用字符串格式化输出了。

需要格式化字符串和数字的情况下,同时不需要重复多次输出某个变量的时候,适合%格式化输出。

# %s占位符:可以接收所有数据类型
# %d占位符:可以接收整数类型,通常整数使用%s占位符即可
# %f占位符:可以接收数字类型,并且后面默认补充六个小数,没有则填充0;同时可以格式化保留多少小数。

# 比如要求用户输入用户名、性别,然后打印以下格式
name = input('请输入你的姓名: ')
sex = input('请输入你的性别: ')
# 单个占位符在%号后面加入需要填入的变量即可
print('我的姓名是%s' % name)
# 多个占位符在%号后面使用括号包裹,按顺序传入
print('我的姓名是%s,性别%s' % (name, sex))
# 需要格式化小数,保留指定位数小数时,需要使用%f,不足位数在填充0
# 不限定保留位数时,不足位数补充0,结果为3.141500
print('%f' % 3.1415)
# 保留2位小数,结果为3.1
print('%.1f' % 3.1415)
# 保留3位小数,结果为3.142
print('%.3f' % 3.1415)
# 保留5位小数,同样不足位数填充0,结果为3.14150
print('%.5f' % 3.1415)

当然如果需要一个变量的值输出多次,还可以使用format格式化,文章后面会提到。

数字

  • 数字类型,分为整型 <class 'int'> 和 浮点型 <class 'float'>
  • 作用:记录年龄,等级,QQ号,各种号码
  • 定义:age = 18
age = 18
# 结果为<class 'int'>
print(type(age))

# 浮点型 float
# 作用:记录身高、体重weight、薪资
weight = 151.2
# 结果为<class 'float'>
print(type(weight))

算数运算符的使用。

# 加 +
print(2 + 2)
# 减 -
print(2 - 2)
# 乘 *
print(2 * 7)
# 除 /
# 2.0
print(4 / 2)
# 1.6666666666666667
print(5 / 3)
# 整除 // 结果为2
print(4 // 2)
# 求余 % 结果为1
print(7 % 2)
# 乘方 ** 结果为16
print(4 ** 2)

比较运算符的使用,返回条件成立就是True,False就是条件不成立。

# 等于 ==
# False
print(3 == 4)
# True
print(3 == 3)

# 不等于 !=
# False
print(3 != 3)
# True
print(3 != 4)

# 大于 >
# True
print(3 > 2)

# 小于 <
# False
print(3 < 3)

# 大于等于 >=
# True
print(4 >= 4)

# 小于等于 <=
# True
print(4 <= 5)

# 类型为布尔类型,<class 'bool'>
print(type(4 <= 5))
# 当被单引号包裹时为字符串类型,不构成比较运算符关系,<class 'str'>
print(type('4 <= 5'))

布尔

  • 布尔类型 <class 'bool'>
  • 作用:用于条件判断,即判断一个条件成立时,用True标识,不成立则用False标识。
  • 定义:flag = True
# 判断条件是否成立
tag = 1 > 0
# 输出True
print(tag)
# <class 'bool'>
print(type(tag))

列表

前面提到的字符串、数字、布尔类型都是单个的值,那么需要保存多个值的时候就需要用到列表、元组、字典、集合了。

  • 列表类型 <class 'list'>
  • 作用:记录/存多个值,列表是有序的,可以方便地取出来指定位置的值,比如人的多个爱好,一堆学生姓名。
  • 定义:在[]内用逗号分隔开多个任意类型的值,当然在绝大多数情况下一个列表会记录同一种类型的数据,通常用于对这一列表中同一类型的数据进行逻辑处理。
# 定义列表,字符串、数字、元组混合
list = ['name', 'itwxe', 'age', 18, [1, 2, 3]]

# ['name', 'itwxe', 'age', 18, [1, 2, 3]]
print(list)
# <class 'list'>
print(type(list))

# 使用下标可以取出列表中对应位置的值
# 正向取值,下标从0开始,依次递增
# name
print(list[0])
# itwxe
print(list[1])
print(list[2])
print(list[3])
# [1, 2, 3]
print(list[4])
# 反向取值,下标从-1开始,依次递减
# [1, 2, 3]
print(list[-1])
# 取出列表中的列表第1个元素,1
print(list[-1][0])
# 取出列表中的列表第2个元素,2
print(list[-1][1])
# 18
print(list[-2])
# age
print(list[-3])

# 对列表中对应下标的值进行重新赋值,例如把'name'修改成'domain','itwxe'修改为'itwxe.com'
list[0] = 'domain'
list[1] = 'itwxe.com'
# ['domain', 'itwxe.com', 'age', 18, [1, 2, 3]]
print(list)

元组

  • 字典类型 <class 'tuple'>
  • 作用:与列表功能类似,区别在于元组定义好之后不能修改里面的值,适用于只读不修改的情况。
  • 定义: 在()内用逗号分隔开多个任意类型的值,当然在绝大多数情况下一个元组会记录同一种类型的数据,通常用于对这一元组中同一类型的数据进行逻辑处理。
# 定义元组,字符串、数字、列表混合
user_tuple = ('name', 'itwxe', 'age', 18, [1, 2, 3])

# ('name', 'itwxe', 'age', 18, [1, 2, 3])
print(user_tuple)
# <class 'tuple'>
print(type(user_tuple))

# 使用下标可以取出元组中对应位置的值
# 正向取值,下标从0开始,依次递增
# name
print(user_tuple[0])
# 1
print(user_tuple[-1][0])

# 修改元组的值会报错
# Traceback (most recent call last):
#   File "/Users/itwxe/PycharmProjects/python-hello/main.py", line 17, in <module>
#     user_tuple[0] = 'domain'
# TypeError: 'tuple' object does not support item assignment
user_tuple[0] = 'domain'

字典

  • 字典类型 <class 'dict'>
  • 作用:记录多个key : value值,优势是每一个值value都有其对应关系/映射关系key,而key对value有描述性的功能。
  • 定义: 在{}内用逗号分隔开多个key : value元素,其中value可以是任意的数据类型,而key通常应该是字符串类型。
# 定义元组
userDict = {'name': 'itwxe', 'password': 123456}

# {'name': 'itwxe', 'password': 123456}
print(userDict)
# <class 'dict'>
print(type(userDict))

# 取出key对应的value
# itwxe
print(userDict['name'])
# 123456
print(userDict['password'])

# 对字典类型的值进行修改
userDict['name'] = 'itwxe@qq.com'
# {'name': 'itwxe@qq.com', 'password': 123456}
print(userDict)

集合

  • 集合类型 <class 'set'>
  • 作用:通常用于关联操作,求交集、差集、并集。
  • 定义:在{}内用逗号分开个的多个元素,元素是无序的,元素的类型可以是字符串、数字、布尔、元组,不能包含列表、字典、集合类型类型,否则会报错,这点Python这么设计对于身为Java程序猿的小二真是疑惑,虽然绝大多数情况下都只会是同种类型数据做比较;同时元素不能重复,如果重复会对相同的值去重。
# 定义集合
user_set1 = {'name', 'itwxe', 'age', (1, 2, 3), 18}
user_set2 = {'name', 'itwxe', 'age', (1, 2, 3), 18, 18}
user_set3 = {'name', 'itwxe', 'age', (3, 2, 1), 18, 19}

# <class 'set'>
print(type(user_set1))

# 可以观察到三个集合输出每次的顺序可能都不一样,所以集合是无序的,也不能通过下标取出值来
print(user_set1)
print(user_set2)
print(user_set3)

print('--------------华丽的分割线--------------')

# 求交集,两个集合都存在的元素,是把集合里面的每个元素当做一个整体比较
# {'itwxe', 'name', (1, 2, 3), 'age', 18}
print(user_set1 & user_set2)
# {'age', 18, 'name', 'itwxe'}
print(user_set1 & user_set3)

# 求并集,把两个集合合并去重后的结果
# {'itwxe', 'name', (1, 2, 3), 'age', 18}
print(user_set1 | user_set2)
# {'itwxe', 'name', (1, 2, 3), 'age', (3, 2, 1), 18, 19}
print(user_set1 | user_set3)

# 求差集,A集合 - B集合的结果,即A集合不存在B集合中的元素
# {(1, 2, 3)}
print(user_set1 - user_set3)
# {(3, 2, 1), 19}
print(user_set3 - user_set1)

列表、元组、字典、集合的区别

  • 列表、元组是依靠索引取值;字典通过key来取值;集合通常用来取关系集合。
  • 列表、字典中的值可以修改,列表通过list[下标] = 值来修改值,字典通过dict[key] = 值来修改对应的值;元组不能修改,只能读;集合通常用来取关系集合不会单独读写。

总结来说,通常还会有以下分类~

  • 数值类型(整型 int , 浮点型 float)
  • 序列类型,可以按照一定顺序 排序的数据类型(列表 list , 元组 tuple , 字符串 str)
  • 散列类型,没有顺序,不可以通过下标来取值(字典 dict , 集合 set)

变量类型常用操作/方法

变量当然会有一些贴合业务操作常用的方法,如果什么都要自己封装方法,那么Python也不可能成为一门流行的语言,接下来就来瞅瞅和变量类型相关常用的方法。

字符串的常用操作

数字的常用操作

布尔的常用操作

列表的常用操作

元组的常用操作

字典的常用操作

集合的常用操作