目录
变量
1.1 变量的概念
1.2 变量的使用步骤
1.3.格式化输出
1.4 加号使用
1.5. 数据类型
1.5.1 注意:
1.5.2 整数类型
1.5.3. 浮点类型
1.5.4. 布尔类型(bool)
1.5.5. 字符串(str)
变量
1.1 变量的概念
1)变量相当于一个数据存储空间的表示
2)你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。
3)变量指向一个空间,空间里面存放了数据
1.2 变量的使用步骤
定义变量:a = 60 使用: print(a)
提示:需要先定义变量,才能使用,否则会提示 not defined
1.3.格式化输出
# 格式化输出案例
# 定义变量
name = "mary" # 字符串
age = 21 # 整型
score = 99.9 # 浮点型
gender = "女" # 字符串# %操作符输出 好处:方便在变量之间进行格式上的编辑
print("个人信息:%s - %d - %s - %.2f" % (name, age, gender, score)) # .2f保留两位小数# format()函数 好处:不用在意变量的类型了,统一使用{}占位
# {} > 参数个数:报错 {} < 参数个数:不影响,只输出{}个数的参数,多的不输出
print("个人信息:{} {} {}".format(name, age, gender))# f-strings(推荐) f:f就算format,有了f,则{}里面的是变量,编译器会去前面寻找这样的变量
print(f"个人信息: {name} {age} {score} {gender}")
1.4 加号使用
-
左右两边都是数值型时,则做加法运算。
-
左右两边都是字符串时,则做拼接运算。
name = "one"
score = 60.5print(score + 90) # 150.5
print(name + " hi") # one hi
print("100" + "98") # 10098 不是198,是两个字符串的拼接
print(34.5 + 100) # 134.5
1.5. 数据类型
1.5.1 注意:
-
python中的变量在使用前都必须赋值,变量赋值以后该 变量才会被创建
-
我们说的“类型”是变量所指的内存数据的类型
1.5.2 整数类型
1.在python中,int可以表示很大的数,限制最多存放4300个数字长的值,(官方:the limit(4300 digits) for integer)
2.python整数有十进制、十六进制、八进制、二进制
# Python的整数有10进制,16进制(0x前缀 0~9 A~F),8进制(0o 0~7),2进制(0b 0~1),运行时会自动转换成十进制输出
print(10) # 10
# 十六进制
print(0x10) # 16(十六进制10对应的是十进制16)
# 八进制
print(0o10) # 8
# 二进制
print(0b10) #2
3.Python中整型占多少字节?
-
字节数随着数字增大而增大,python整型是变长的(java中int固定4字节),最小28个字节,每次增量4个字节。
-
可通过sys.getsizeof((object))返回对象的字节大小
字节(byte):计算机中基本存储单位 位(bit):计算机中最小存储单位 1byte = 8bit
1.5.3. 浮点类型
-
十进制:5.12, .512
-
科学计数法:5.12e2 (5.12*10^2), 5.12E -2 (5.12/(10^2))
-
浮点数有最大值最小值限制(max=1.7976931348623157e+308,min=2.2250738585072014e-308);
-
浮点数型计算后,存在精度的损失,可以使用Decimal类进行精确计算
# 浮点数表示形式
print(4.2)
print(-2.1)
print(.41) # 0可以省略 0.41# 科学计数法形式:如:5.12e2, 5.12E-2 e/E不区分大小写
n5 = 5.12e2 # 5.12乘以10的2次方
n6 = 5.12E-2 # 5.12除以10的2次方
print("n5=", n5)
print("n6=", n6)# 浮点数型计算后,存在精度的损失,可以使用Decimal类进行精确计算(导入Decimal类)
b = 8.1/3 # 2.7
print("b=", b) # b= 2.6999999999999997 精度丢失# 解决方法
# 导入Decimal类
from decimal import Decimalb = Decimal("8.1") / Decimal("3")
print("b=", b) # b=2.7
1.5.4. 布尔类型(bool)
-
取值True和False,通常用于逻辑运算,一般用于程序流程控制(条件控制语句,循环控制语句)
-
布尔类型可以和其他数据类型进行比较,比如数字、字符串,比较时python将True视为1,将False视为0
-
非0被视为真值,0被视为假值
b1 = False b2 = Trueprint(b1 + 10) # 10 print(b2 + 10) # 11# == 比较 = 赋值 if b1 == 0:print("b1 == 0") if b2 == 1:print("b2 == 1")# 非0被视为真值,0被视为假值 if 0:print("哈哈") if -1:print("嘻嘻") if 1.1:print("1.1") if "one":print("hi one")
1.5.5. 字符串(str)
-
可以用 " " 或者 ' '来引用
-
通过+连接字符串
-
python不支持单字符类型,同样被视为字符串;
-
三引号( ‘ ’ ' 或 " “ ” )可使内容原样输出;
-
字符串前加 r 可使字符串不被转义;
# 单引号和双引号可以用于嵌套,而不适用转义字符表示引号; print("他说:'你好'")# python不支持单字符类型,同样被视为字符串; str = 'a' print("a的类型是:", type(str))# 三引号(‘’'或"“”)可使内容原样输出,适用于输出复杂的内容 content = """你好,哈哈‘’ “”aaaaffvss ' '" dda ho''"" 帮""" print(content)# 字符串前加 r 可使字符串不被转义; str1 = r"one\ntom\tmary" print(str1)
-
字符串驻留机制:字符串池,节省空间提高效率(PyCharm对字符串进行了优化处理都可以实现驻留)
意义:python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同的字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
好处:当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提示效率和节约内存
# 字符串驻留机制:字符串池,节省空间提高效率
str2 = "hello"
str3 = "hello"# id()函数是可以返回对象/数据的内存地址
print("str2的地址:", id(str2))
print("str3的地址:", id(str3))# 驻留机制的几种情况 :PyCharm做了优化,可以全部驻留,使用cmd原生的交互模式下是下面的情况采用驻留
# 1) 字符串是由26个英文字母大小写,0-9,_组成(需在交互模式win+R -> python)
x = "abcABC_123"
y = "abcABC_123"
print("x=", id(x), "y=", id(y)) # 相同a = "abc#"
b = "abc#"
print(id(a) == id(b)) # False 不同# 2)字符串长度为0或1时(空串或者长度为1)发生驻留
m = ""
n = ""
print("m=",id(m),"n=",id(n))
m1 = "!"
n1 = "!"
print("m1=",id(m1),"n1=",id(n1))# 3)字符串在编译时进行驻留,而非运行时(字符串在没有确定变量内容是什么前,可以发生驻留)
a = "abc"
b = "".join(["a", "bc"]) # 运行后确定内容"abc"
print(id(a) == id(b)) # False# 4) [-5, 256]的整数数字
num1 = 3
num2 = 3
print(id(num1) == id(num2))# 强制2个字符串指向同一个对象
s1 = "abc#"
s2 = sys.intern(s1) # s2的地址与s1本来不同,现在我们强制让s2指向s1的地址
print(s1 is s2) # True# pycharm对字符串进行了优化处理,不受驻留机制情况限制
驻留原理图: