Python急速入门——(第二章:变量和数据类型)
1.二进制与字符编码
1.字符集的演变
- 二进制0,1 -> ASCII -> GB2312 -> GBK -> GB18030。
- 其他国家也依据ASCII码,编写了自己语言的字符集。
- 随后出现的Unicode几乎包含了全世界的字符,由Unicode又衍生出了UTF-8(这是国际通用的字符集)。
2.Unicode是一张表,规定了哪个字符由哪个数字来表示
验证:(下面的代码跟着敲即可,先不用管为什么这样写)
# 二进制与字符编码
print(chr(0b100111001011000)) # 作用是根据所给二进制编码,打印对应的字符
print(ord('乘')) # 作用是打印对应字符的二进制编码的十进制值
输出结果:
乘
20056
2.Python中的标识符和保留字
1.保留字:
有一些单词被赋予了特定的含义,这些单词不能作为任何对象的名字。
查看保留字:
import keyword
print(keyword.kwlist)
输出结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def',
'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',
'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
2.标识符:
给变量、函数、类、模型和其他对象起的名字,就叫标识符(标识符包括变量的名字)。
规矩:
- 由字母、数字、下划线组成
- 不能以数字开头
- 不能是保留字
- 严格区分大小写
3.变量的定义和使用
1.变量由三部分组成
1)标识:
- 表示对象所存储的内存地址,使用内置函数
id()
来获取。
2)类型:
- 表示对象的数据类型,使用内置函数
type()
来获取。
3)值:
- 表示对象所存储的具体数据,使用
print()
可以将值进行打印输出。
例:
name = '玛利亚'
print(name)
print('标识', id(name))
print('类型', type(name))
print('值', name)
一个可能的输出结果:
玛利亚
标识 2143374109712
类型 <class 'str'>
值 玛利亚
2.内存分析图:
name
里存放的是玛利亚那一块空间的id
,就像C语言中的指针。
4.变量的多次赋值
一个变量可以多次赋值,但赋值后变量的标识会改变,之前标识指向的那块空间会被当做内存垃圾回收。
# 变量的多次赋值
a = 20
print('原标识', id(a))
a = 30
print(a)
print('赋值后的标识', id(a))
# id改变
输出结果:
原标识 140720842265992
30
赋值后的标识 140720842266312
5.Python中常见的数据类型
1.整数类型型 int
2.浮点数类型 float
3.布尔类型 bool(True,False)
4.字符串类型 str
5.1整数类型
1.英文为integer,简写为int,可以表示正数、负数和零
# 整型数据
a = 10
b = -98
c = 0
# 打印值
print(a)
print(b)
print(c)
# 打印类型
print(a, type(a))
print(b, type(b))
print(c, type(c))
输出结果:
10
-98
0
10 <class 'int'>
-98 <class 'int'>
0 <class 'int'>
2.整数的不同进制表示方式
1)十进制->默认的进制
2)二进制->以0b开头
3)八进制->以0o开头
4)十六进制->0x开头
# 不同进制的打印
print('十进制', 118) # 默认打印十进制
print('二进制', 0b10011) # 打印二进制开头用0b
print('八进制', 0o176) # 打印八进制开头用0o
print('十六进制', 0xA2F8) # 打印十六进制开头用0x
输出结果:
十进制 118
二进制 19
八进制 126
十六进制 41720
5.2浮点类型
浮点数由整数部分和小数部分组成,浮点数的存储有不精确性。
使用浮点数计算时,可能会出现小数位数不确定的情况:
# 浮点型
a = 3.14159
print(a, type(a))
# 浮点型的精度问题
n1 = 1.1
n2 = 2.2
n3 = 2.1
print(n1 + n2) # 会有精度问题
print(n1 + n3) # 并不是所有的浮点数相加都会出现精度问题
输出结果:
3.14159 <class 'float'>
3.3000000000000003
3.2
解决方案:
- 导入模版
deomal
# 解决精度问题
from decimal import Decimal
print(Decimal('1.1') + Decimal('2.2'))
输出结果:
3.3
5.3布尔类型
布尔类型是用来表示真假的值,True
表示真,False
表示假。
布尔值可以转化为整数:True
->1,False
->0
# 布尔类型
f1 = True
f2 = False
# 打印类型
print(f1, type(f1))
print(f2, type(f2))
# 布尔值可以转化成整数值进行计算
print(f1 + 1) # 结果是2
print(f2 + 1) # 结果是1
输出结果:
True <class 'bool'>
False <class 'bool'>
2
1
5.4字符串类型
字符串又被称为不可变的字符序列,可以使用单引号''
双引号""
三引号''' '''
或""" """
来定义。
单引号和双引号定义的字符串必须在一行,三引号定义的字符串可以分布在连续的多行。
#使用单引号或双引号括起来
str1 = '人生苦短,我用Python'
str2 = "人生苦短,我用Python"
#三引号——可以换行写
str3 = '''人生苦短,
我用Python'''
str4 = """人生苦短,
我用Python"""
#打印类型
print(str1, type(str1))
print(str2, type(str2))
print(str3, type(str3))
print(str4, type(str4))
输出结果:
人生苦短,我用Python <class 'str'>
人生苦短,我用Python <class 'str'>
人生苦短,
我用Python <class 'str'>
人生苦短,
我用Python <class 'str'>
6.类型转换str()函数与int()函数
为什么需要数据类型转换?
为了将不同数据类型的数据拼接在一起。
数据类型转换函数:
函数名 | 作用 | 注意事项 | 举例 |
---|---|---|---|
str() | 将其他数据类型转成字符串 | 也可以用引号转换 | str(123) 或 ‘123’ |
int() | 将其他数据类型转成整数 | 文字类和小数类字符串无法转成整数;浮点数转成整数,抹零取整 | int(‘123’) 或 int(9.8) |
float() | 将其他数据类型转成浮点数 | 文字类无法转成浮点数;整数转成浮点数,末尾为.0 | float(‘9.9’) 或 float(9) |
例:
name = '张三'
age = 20
print(type(name), type(age))#说明name和age的数据类型不同
#想把不同数据类型连接起来输出
#错误写法
#print('我叫'+name+',今年'+age+'岁')
#将str类型与int类型连接时报错,解决方案:类型转换
#正确写法
print('我叫'+name+',今年'+str(age)+'岁')
输出:
<class 'str'> <class 'int'>
我叫张三,今年20岁
1.str()函数
#str()函数
print('------str()将其他类型转化成str类型-------')
a = 10
b = 198.8
c = False
print(type(a), type(b), type(c))
print(str(a), str(b), str(c), type(str(a)), type(str(b)), type(str(c)))
输出:
------str()将其他类型转化成str类型-------
<class 'int'> <class 'float'> <class 'bool'>
10 198.8 False <class 'str'> <class 'str'> <class 'str'>
2.int()函数
#int()函数
print('------int()将其他类型转化int类型-------')
s1 = '125'
f1 = 98.7
s2 = '76.77'
ff = True
s3 = 'hello'
print(type(s1), type(f1), type(s2), type(ff), type(s3))
print(int(s1), type(int(s1))) #将str转成int类型,字符串必须为数字串
print(int(f1), type(int(f1))) #将float转成int类型,舍去小数部分,保留整数部分
#print(int(s2), type(int(s2))) #报错,因为字符串小数串
print(int(ff), type(int(ff))) #将bool转成int类型,True为1,False为0
#print(int(s3), type(int(s3))) #报错,将str转换成int时,字符串必须是数字串(整数),非字符串不允许转换
输出:
------int()将其他类型转化int类型-------
<class 'str'> <class 'float'> <class 'str'> <class 'bool'> <class 'str'>
125 <class 'int'>
98 <class 'int'>
1 <class 'int'>
3.float()函数
#float()函数
print('------float()将其他类型转化float类型-------')
s1 = '125.25'
s2 = '76'
ff = True
s3 = 'hello'
i = 98
print(type(s1), type(s2), type(ff), type(s3), type(i))
print(float(s1), type(float(s1))) #将str类型转换成float类型,字符串是数字串
print(float(s2), type(float(s2))) #将str类型的76转化成float类型后,后面加.0
print(float(ff), type(float(ff))) #True本质是1,转成float类型后,是1.0
#print(float(s3), type(float(s3))) #报错,将str转换成float时,字符串必须是数字串
print(float(i), type(float(i))) #将int类型转成float类型,后面加.0
输出:
------float()将其他类型转化float类型-------
<class 'str'> <class 'str'> <class 'bool'> <class 'str'> <class 'int'>
125.25 <class 'float'>
76.0 <class 'float'>
1.0 <class 'float'>
98.0 <class 'float'>
7.Python中的注释
1.有三种类型的注释
- 单行注释:以
#
开头,直到换行结束。 - 多行注释:并没有单独的多行注释标记,将一对三引号之间的代码称为多行注释。
- 中文编码声明注释:(一般不写)
在文件开头加上中文声明注释,用以指定源码文件的编码格式(Python的默认编码是UTF-8)
# coding:gbk
# 开发时间: 2023/4/20 15:28
# Python中的注释
# 单行注释
'''
嘿嘿,
我是多行注释
'''
"""
嘿嘿,
我是多行注释
"""
在文件的开头写上#coding:gbk
,就把源码文件的编码格式改成了gbk
。#coding:UTF-8
就把编码格式改成了UTF-8
。