30 12 2019

前言

本文主要学习 Python 的变量和数据类型。

变量

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的“类型”是变量所指的内存中对象的类型。

Python 中等号(=)用来给变量赋值,等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

变量赋值

name = '朝雾轻寒'

其中 name 是变量名,变量 name 的值为’朝雾轻寒’。

多个变量赋值

Python允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
也可以为多个对象指定多个变量。例如:

a, b, c = 1, 2, 'zwqh'

以上实例,两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 ‘zwqh’ 分配给变量 c。

数据类型

Python3 中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。

数字(Number)

Python 数字数据类型是用来存储数值的。

数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将会重新分配内存空间。

当你指定一个值时,Number对象就会被创建:

var1 = 1 
var2 = 10
var3 = 100

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

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

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

del var1
del var2, var3

Python3 支持 int、float、bool、complex(复数)。

注意:在Python2中是没有布尔型的,它用数字0表示False,用1表示True。到Python3中,把True和False定义成关键字了,但它们的值还是1和0,它们可以和数字相加。

Python 支持三种不同的数值类型:

  • 整形(int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
  • 浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 10^2 = 250)。
  • 复数(complex) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

数值类型实例

int float complex
10 0.0 3.14j
100 15.20 45.j
-786 -21.9 9.322e-36j
080 32.3+e18 .876j
-0490 -90. -.6545+0J
-0x260 -32.54e100 3e+26J
0x69 70.2-E12 4.53e-7j

字符串(String)

Python中的字符串是由数字、字母、下划线组成的一串字符,用单引号'、双引号"或三引号'''括起来,同时使用反斜杠\转义特殊字符。

取值顺序

python的字串列表有2种取值顺序:

  • 从左到右索引默认0开始的,最大范围是字符串长度少1
  • 从右到左索引默认-1开始的,最大范围是字符串开头
P y t h o n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1

如果要从字符串中获取一段子字符串的话,可以使用 [头下标:尾下标] 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。比如:

s = 'python'
print(s[1:5])

运行结果为:

ytho

加号(+)是字符串连接运算符,星号(*)是重复操作。以下是一些字符串的常见操作:

s = '我用Python'
print(s + '!!!')
print(s * 2)
切片
print(s[0])  # '我'
print(s[-1])  # 'n'
print(s[3:])  # 'ython'
print(s[:3])  # '我用P'
print(s[::-1])  # 'nohtyP用我'
替换,还可以用正则表达式替换
print(s.replace('Python', 'Java'))  # '我用Java'
查找
print(s.find('P'))  # 2 , 返回第一次出现的子字符串的下标
print(s.find('t', 2))  # 4 , 设定下标2开始查找
print(s.find('zwqh'))  # -1 , 查找不到返回-1
print(s.index('y'))  # 3 , 返回第一次出现的子串的下标
print(s.rfind('P'))  # 2 , 返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1
print(s.rindex('P'))  # 2 , 返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定可选参数[beg:end]设置查找的区间
# print(s.index('p'))  # 不同于find(), 查找不到会抛出异常
大小写转换
print(s.upper())  # '我用PYTHON' , 转大写
print(s.lower())  # '我用python' , 转小写
print(s.swapcase())  # '我用pYTHON' , 大小写互转
print('python'.capitalize())  # 'Python' , 把首字母大写
print(s.istitle())  # True , 检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
print(s.isupper())  # False , 检测字符串中所有的字母是否都为大写
print(s.islower())  # False , 检测字符串中所有的字母是否都为小写
去除指定字符
print('000Python000'.strip('0'))  # 'Python' , strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
print('   Python   '.strip())  # 'Python'
print('123Python321'.strip('123'))  # 'Python' , 字符序列为 '123'
print('123Python321'.lstrip('123'))  # 'Python321' , lstrip()方法用于截掉字符串左边的空格或指定字符
print('123Python32123'.rstrip('312'))  # '123Python'  ,rstrip()方法用于删除 string 字符串末尾的指定字符(默认为空格).
连接与分割,使用 + 连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,所以推荐使用join
ss = ['2020', '01', '01', '00:00']
x = '-'.join(ss)
print(x)  # '2020-01-01-00:00'
y = x.split('-')
print(y)  # ['2020', '01', '01', '00:00']
格式化
print('%s:%s' % ('年龄', 25))  # '年龄 25'
print('{}:{}'.format('年龄', 25))  # '年龄 25'  推荐使用format格式化字符串
print('{0},{1},{0}'.format('年龄', 25))  # '年龄,25,年龄'
print('{name}:{value}'.format(name='年龄', value=25))  # '年龄:25'
编码与解码
# encode 将字符转换为字节
print(s.encode())  # 默认编码是 UTF-8,输出: b'\xe6\x88\x91\xe7\x94\xa8Python'
print(s.encode('gbk'))  # 输出:b'\xce\xd2\xd3\xc3Python'
# decode s将字节转换为字符
print(s.encode().decode('utf8'))   # 输出 '我用Python'
print(s.encode('gbk').decode('gbk'))  # 输出 '我用Python'

列表(List)

List(列表) 是 Python 中使用最频繁的数据类型,类似 Java List 集合。

列表是写在方括号 [] 之间、用逗号分隔开的元素列表,列表可以完成大多数集合类的数据结构实现。

列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套),列表中的元素是可以改变。

示例:

list1 = ['name', 'zwqh', 'height', 175, 'weight', 65.5]
list2 = ['name', 'zwqx', 'age', '25']
print(list1)  # 输出完整列表
print(list1[1])  # 'zwqh'
print(list1[2:4])  # ['height', 175] 输出第三个至第四个元素
print(list1[2:])   # ['height', 175, 'weight', 65.5] 输出从第三个开始至列表末尾的所有元素
print(list2 * 2)  # ['name', 'zwqx', 'age', '25', 'name', 'zwqx', 'age', '25']  输出列表两次
print(list1 + list2)  # ['name', 'zwqh', 'height', 175, 'weight', 65.5, 'name', 'zwqx', 'age', '25']  打印组合的列表
# 搜索
print(list1.index('zwqh'))  # 1,获取指定元素的下标
# 增加元素
list1.append('!!!')
print(list1)  # ['name', 'zwqh', 'height', 175, 'weight', 65.5, '!!!']
# 删除元素
list1.remove('!!!')
print(list1)  # ['name', 'zwqh', 'height', 175, 'weight', 65.5]

元组(Tuple)

元组是另一个数据类型,类似于 List(列表)。

元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

示例:

tuple1 = ('name', 'zwqh', 'height', 175, 'weight', 65.5)
tuple2 = ('name', 'zwqx', 'age', '25')
print(tuple1)  # 输出完整列表
print(tuple1[1])  # 'zwqh'  输出元组的第一个元素
print(tuple1[2:4])  # ('height', 175) 输出第三个至第四个元素
print(tuple1[2:])  # ('height', 175, 'weight', 65.5) 输出从第三个开始至列表末尾的所有元素
print(tuple2 * 2)  # ('name', 'zwqx', 'age', '25', 'name', 'zwqx', 'age', '25') 输出元组两次
print(tuple1 + tuple2)  # ('name', 'zwqh', 'height', 175, 'weight', 65.5, 'name', 'zwqx', 'age', '25') 打印组合的元组
print(tuple1.index('zwqh'))  # 1 获取指定元素的下标
print(tuple1.count('age'))  # 0 获取元素出现的次数
print(tuple1.__len__())  # 6 获取元组长度

集合(Set)

集合(set)是一个无序不重复元素的序列,类似 Java Set 集合,使用大括号 {} 或者 set() 函数创建集合

注意:创建一个空集合必须用 set() 而不是 {} ,因为 {} 是用来创建一个空字典。

集合不能被切片也不能被索引。

示例:

set1 = {'name', 'zwqh', 'height', 175, 'weight', 65.5}
set2 = {'name', 'zwqx', 'age', '25'}
print(set1)  # 输出完整集合
# 添加
set1.add('!!!')
print(set1)  # {65.5, 'name', 'zwqh', 'weight', 175, '!!!', 'height'} 这个输出是无序的,再次执行顺序就可能变了
# 删除
set1.remove('!!!')   # 用于移除指定的集合元素
print(set1)  # {65.5, 'height', 'weight', 175, 'name', 'zwqh'}
set2.discard('age')  # 用于移除指定的集合元素,该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会
print(set2)   # {'zwqx', 'name', '25'}

字典(Dictionary)

字典是一种映射类型,它的元素是键值对,类似 Java Map 集合,字典的关键字必须为不可变类型,且不能重复。创建空字典使用 {} 。

示例:

userInfo = {
    'username': '朝雾轻寒',
    'qq': '466595865',
    'gender': '男'
}
print(userInfo)  # {'username': '朝雾轻寒', 'qq': '466595865', 'gender': '男'}
print(userInfo['username'])  # '朝雾轻寒'  输出键为 'username' 的值
print(userInfo.keys())  # dict_keys(['username', 'qq', 'gender'])   输出所有键
print(userInfo.values())  # dict_values(['朝雾轻寒', '466595865', '男'])  输出所有值
print(len(userInfo))  # 3 输出字段长度

小结

这篇文章学习了 Python 的变量和六种数据类型,通过示例演示了变量的使用,以及六种数据类型的常用操作。

示例源码

variableAnddataType.py

延伸阅读
  1. Python 3.8 (二):python 基础语法
  2. Python 3.8 (一):python 入门
  3. Python 3.8 (三):变量与数据类型
  4. Python 3.8 (四):运算符
发表评论