语句 —— Python教程

252 阅读6分钟

本节教程将讲解 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 控制台的交互模式下进行,因为控制台有好的记忆功能,所以能加快测试效率。