本节教程将讲解 Python 的语句、表达式以及它们之间的区别。
之后,还将说明 Python 编程中使用多行语句和缩进。
语句
什么是一个语句?
Python 中的语句是 Python 解释器可以读取和执行的逻辑指令。它可以是表达式或赋值语句。
指定叙述/赋值语句是 Python 的基础,它定义了表达式创建对象和保留对象的方式。
什么是一个表达式?
表达式是一种持有 Python 类型的语句,其中包括数字、字符串、对象和运算符的逻辑序列。因为值本身也是一个表达式,所以变量也属于。
使用表达式,我们可以执行加、减和串联操作等,也可以调用具有返回结果的函数。
例如:
# 算数表达式
>>> ((10 + 2) * 100 / 5 - 200)
40.0
# 表达式中调用函数
>>> pow(2, 10)
1024
# 表达式中调用 eval 函数
>>> eval( "2.5+2.5" )
5.0
简单的赋值语句
在简单的赋值操作中,我们需要创建新变量、赋值和更改值。例如将一个表达式和一个变量名作为标签,然后保留该表达式的值。
# 语法
variable = expression
# LHS <=> RHS
现在我们来看看这个赋值操作中发生了什么。
一、右侧(Right-Hand Side)是一个有值的基础表达式。
可以把它看成一个简单的赋值操作:
>>> test = "Learn Python"
Python 将在内存中创建一个字符串"Learn Python",并为其赋值给名称"test"。我们可以使用 id() 内置函数来确认内存地址:
>>> test = "Learn Python"
>>> id(test)
4480231600
该数字就是数据存储到内存中的地址。所以我们就得出了一些有趣的结论。
1、当创建一个具有同样值的字符串时,Python 会创建一个新对象并将其分配到内存中的另一个位置。注意:该规则适合绝大多数情况。
>>> test1 = "Learn Python"
>>> id(test1)
4480232048
>>> test2 = "Learn Python"
>>> id(test2)
4480232176
2、但是,在以下两种情况下,Python 是会分配到相同的内存地址:
- 字符串没有空格,并且少于 20 个字符。
- 整数值介于 -5 和 +255 之间。
这种做法称为字符串驻留(String Interning),Python 这样做是为了节省内存空间。
所以下面的例子就好理解了:
>>> s1 = 'learnpython'
>>> id(s1)
4480231152
>>> s2 = 'learnpython'
>>> id(s2)
4480231152
>>> s3 = 'learn python'
>>> id(s3)
4480232304
>>> s4 = 'learn python'
>>> id(s4)
4480232432
>>> s5 = -5
>>> id(s5)
4476639696
>>> s6 = -5
>>> id(s6)
4476639696
>>> s7 = -6
>>> id(s7)
4480009680
>>> s8 = -6
>>> id(s8)
4480009616
二、右侧(Right-Hand Side)是当前的变量。
需要知道的是,右侧的表达式是当前的变量。
>>> another_test = test
上面的操作在内存中不会分配新的内存空间。两个变量都指向相同的内存地址。它就像是创建了一个别名去指向存在的对象。我们可以用 id() 函数来看下:
>>> test = "Learn Python"
>>> id(test)
4480232752
>>> another_test = test
>>> id(another_test)
4480232752
三、右侧(Right-Hand Side)是可操作的。
要确定一条语句的类型是什么取决于操作的结果。我们来看看下面这种例子:
>>> test = 2 * 5 / 10
>>> print(test)
1.0
>>> type(test)
<class 'float'>
上面这种赋值操作将创建一个 "float" 类型的变量。
>>> test = 2 * 5
>>> print(test)
10
>>> type(test)
<class 'int'>
这种将创建一个 "int" 类型的变量。
重复赋值语句
可以在赋值操作中组合运算符以形成重复的赋值语句。
例如像这样:
x += y
上面这种操作就等于这样的简写:
x = x + y
下面我们提供一个更清晰的例子,其中我们将新元素添加到元组中:
>>> my_tuple = (10, 20, 30)
>>> my_tuple += (40, 50,)
>>> print(my_tuple)
(10, 20, 30, 40, 50)
下面我们添加一个元音列表,例子也是添加新元素:
>>> list_vowels = ['a', 'e', 'i']
>>> list_vowels += ['o', 'u',]
>>> print(list_vowels)
['a', 'e', 'i', 'o', 'u']
多行语句
通常每个 Python 语句都以换行符结尾。但是,我们可以使用换行符(\)将其扩展成多行语句。
Python 提供了两种方式扩展多行语句。
显式写法(粗暴写法)
使用换行符(\)拆分成多行。
例如:
# 使用多行语句初始化一个列表
>>> my_list = [1, \
... 2, 3\
... ,4,5 \
... ]
>>> print(my_list)
[1, 2, 3, 4, 5]
# 使用多行语句执行一个表达式
>>> eval ( \
... " 2.5 \
... + \
... 3.5")
6.0
隐式写法
隐式写法是使用括号 (),方括号 [],大括号 {} 的任何一个拆分语句时,在开头和结尾处将结构括起来。
>>> result = (10 + 100
... * 5 - 5
... / 100 + 10
... )
>>> print(result)
519.95
>>> subjects = [
... 'Maths',
... 'English',
... 'Science',
... ]
>>> print(subjects)
['Maths', 'English', 'Science']
>>> type(subjects)
<class 'list'>
缩进
很多高级的编程语言例如 C、C++、C# 都使用大括号 { } 来标记代码块。但是 Python 是通过缩进来完成。
代表函数或循环体的代码以缩进开始,一直到一条未缩进的行结束。
Python用多少空格表示缩进?
Python 的代码风格标准(PEP 8)规定 4 个空格表示缩进。然而,Google 的程序员表示用 2 个空格更好些。当然,任何人都可以按照自己的风格编码,但是我建议大家都遵循 PEP 8 的代码规范。
为什么缩进在 Python 中如此重要?
大多数编程语言都提供缩进以展示更好的代码格式,但是都不强制缩进。
然而,在 Python 中代码被要求必须遵循缩进规则。通常,在代码块中每行缩进 4 个空格。
因为,在创建复合语句时缩进变得非常重要:
def demo_routine(num):
print('I am a demo function')
if num % 2 == 0:
return True
else:
return False
num = int(input('Enter a number:'))
if demo_routine(num) is True:
print(num, 'is an even number')
else:
print(num, 'is an odd number')
现在我们来看一个缩进导致的错误:
>>> 6*5-10
File "<stdin>", line 1
6*5-10
^
IndentationError: unexpected indent
小结
如果想在编码中让代码更加干净整洁,那么了解 Python 的语句、表达式和缩进是很有必要的。
本节所有例子都是在 Python 控制台的交互模式下进行,因为控制台有好的记忆功能,所以能加快测试效率。