Python 修仙修炼录 02:变量筑基,筑牢编程道基
目录
一、常量和表达式
这是 Python 最基础的两个核心概念,常量是固定不变的数据,表达式是用来计算的式子
举个简单的算术运算例子:
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3) # 1.6666666666666665
- 形如
1+2-3称为表达式 - 这个表达式的运算结果,称为表达式的返回值
123这样的数字,称为字面值常量+-*/称为运算符/操作符
不知道你有没有发现一个疑问:print(1 + 2 / 3) 的结果并不是 0 ,而在Java / C 中整数 除以 整数 结果还是整数! 并且会把小数部分直接舍弃!不是 0 就算了,居然还是 1.6666666666666665?
其实这就是Python与其他语言的差别:
/代表 【真除法】,结果永远是小数(浮点数),如果你想要 2 除以 3 等于 0,必须用//整除符号;- 1.6666666666666665 不是 1.6666666666666667 是因为 Python 一般没有“四舍五入”这样的规则,浮点数在IEEE754标准这套规则下,在内存中表示浮点数的时候,可能会存在微小的误差
二、变量和类型
变量是什么
有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用到 变量
举个简单例子:
给定四个分数,67.5, 89.0, 12.9, 32.2, 编写代码, 求这四个分数的方差.
PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
# ** 在 Python 中表示乘方运算. ** 2 即为求平方.
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg)
result = total / 3
print(result)
在这个代码中, 就需要先计算这四个数字的平均值, 然后再计算方差. 这就需要把计算的平均值使用 变量 保存起来.
其中 avg, total, result 均为变量.
变量的语法
1. 定义变量
语法格式:
变量名 = 值
在 python 中不用声明类型,直接赋值就是定义变量
示例:
a = 20
# 批量定义
# 一行多个
a, b, c = 1, 2, 3
# 同值赋值
m = n = 100
首次使用 = 对 a 进行设置值,这个过程是创建变量(初始化)
2. 使用变量
定义后直接用、参与运算:
a = 10
print(a)
# 修改变量的值
a = 20
print(a)
变量的类型
变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 “类型” 这样的概念
1. 整数 int
a = 10
# 可以使用type来查看任意变量的类型
print(type(a)) # <class 'int'>
注意: 在 Python,int 能够表示的数据范围,是“无穷"的.Python 的 int 是可以根据要表示的数据的大小,自动扩容因此 Python 这里就没有 long 这样的类型了像 byte,short 这些类型在 Python 中也不存在, 而 Java int 最大就能表示到-21亿->+21亿
2. 浮点数(小数) float
a = 0.5
print(type(a)) # <class 'float'>
注意 :Python 中的 float 就是双精度浮点数.等同于 C++ / Java 里的 double
而像 C++ 和 Java 里面,float 是四个字节的.也叫做 “单精度浮点数”,double 才是八个字节的,叫做"双精度浮点数”
3. 字符串 string
单引号和双引号
字符串:把一个个字符,放到一起。Python 中要求使用引号把一系列的字符引起来就构成了字符串,引号使用'或者"都是可以的
a = 'hello'
b = "hello"
print(type(a)) # <class 'str'>
print(type(b)) # <class 'str'>
为什么两个引号都可以呢,这边举个例子:
e = "My name is "hr" "
print(e)
当运行时会发现出现错误,那是因为 Python 把["My name is "hr" "] 视为字符串了,[" "] 这部分也视为字符串了,那就导致 "hr" 这部分是个啥 Python 不认识了!!
这时候单引号就发挥作用了
e = "My name is 'hr' "
print(e) # My name is 'hr'
相反如果字符串里面包含了双引号,表示字符串就可以用单引号引起来;如果字符串里面包含了单引号,表示字符串就可以使用双引号引起来
三引号
如果同时有单引号,和双引号,咋办??
Python 中还有一种字符串,使用 三引号 表示 ''' 或者 """
e = """My "name" is 'hr' """
print(e) # My "name" is 'hr'
Python 的定义方式还是比较灵活的,使用那种引号表示所创造的字符串都是等价的关系,哪个方便使用哪个就可以了
计算字符串长度
在 Python 可以使用 len() 来计算字符串长度
e = "12345"
print(len(e)) # 5
字符串拼接
字符串可以直接进行拼接,也就是把后面的字符串拼接到前一个字符串的末尾,得到了一个更大的字符串
e1 = 'hello'
e2 = ' world'
print(e1+e2) # hello world
对于原来的 e1 e2 是没有影响的,但是不能字符串和数字,混合相加!
4. 布尔 bool
布尔的取值只有真和假.因此布尔类型主要用于逻辑判定.真为 True、假为False
注意!!在 Java / C++ 中 真假为true/false 注意是小写
c1 = True
c2 = False
print(type(c1)) # <class 'bool'>
print(type(c2)) # <class 'bool'>
5. 其他
除了上述类型之外, Python 中还有 list, tuple, dict, 自定义类型 等等
动态类型特性
在 Python 中, 一个变量是什么类型, 是可以在 “程序运行” 过程中发生变化的. 这个特性称为 “动态类型”
# 程序运行过程中,变量的类型可能发生改变
a = 10
print(type(a)) # <class 'int'>
a = 'hello'
print(type(a)) # <class 'str'>
a = True
print(type(a)) # <class 'bool'>
a 的类型随着程序的运行,就发生改变;
与之对应的就是静态类型:程序运行过程中,变量的类型始终不变,像
Java / C++
Java 中的[int a= 10];a这个变量在程序运行的整个过程中,始终都是 int .如果尝试[a = "hello”],编译阶段就会报错
注意!!一个编程语言,是否是动态类型,只是取决于运行时,类型是否发生改变.不取决于变量定义的时候是否声明类型!
比如 python 中也可以进行变量定义时声明类型
例如:
a:int = 10
print(type(a))
动态类型写法比较灵活,提高了语言的表达能力,但是“灵活”这个词往往是贬抑,代表更容易出错
更多推荐

所有评论(0)