一、常量和表达式

这是 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

布尔的取值只有真和假.因此布尔类型主要用于逻辑判定.TrueFalse

注意!!在 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))

动态类型写法比较灵活,提高了语言的表达能力,但是“灵活”这个词往往是贬抑,代表更容易出错


更多推荐