《Python 简明教程》读书笔记系列二 —— 从 「运算符与表达式」「控制流」「函数」可以看出什么

运算符与表达式

通常你写出的程序语句(逻辑行)会包含若干 表达式 。如 2 + 3 即为一个简单的表达式。

表达式由运算符与操作数构成。

运算符

常用的运算符:

  • +
  • -
  • *
  • **(乘方)
  • /
  • //(除且取整)
  • %(取模)
  • <<(左移)
  • >>(右移)
  • &(按位与)
  • |(按位或)
  • ^(按位异或)
  • ~(按位取反)
  • <
  • >
  • <=(小于或等于)
  • >=(大于或等于)
  • ==
  • !=(不等于)
  • not(布尔非)
  • and(布尔与)
  • or(布尔或)

数学运算和赋值的快捷方式

对一个变量进行数学运算,然后将运算结果赋回给变量,这个过程很有用。于是,对于这样的表达方式有一个快捷方式:

a = 2
a = a * 3
# 上下两部分对比,发现差异
a = 2
a *= 3

计算顺序

下表给出了 Python 的优先级表,从最低优先级(最小约束)到最高优先级(最大约束)。

Operator Description
:= Assignment expression
lambda Lambda expression
ifelse Conditional expression
or Boolean OR
and Boolean AND
not x Boolean NOT
in, not in, is, is not, <, <=, >, >=, !=, == Comparisons, including membership tests and identity tests
` `
^ Bitwise XOR
& Bitwise AND
<<, >> Shifts
+, - Addition and subtraction
*, @, /, //, % Multiplication, matrix multiplication, division, floor division, remainder
+x, -x, ~x Positive, negative, bitwise NOT
** Exponentiation
await x Await expression
x[index], x[index:index], x(arguments...), x.attribute Subscription, slicing, call, attribute reference
(expressions...),[expressions...], {key: value...}, {expressions...} Binding or parenthesized expression, list display, dictionary display, set display

具有 相同优先级 的操作符在上表中的同一列中列出。例如 +- 具有相同的优先级。

改变计算顺序

我们可以使用括号,使表达式更加具有可读性。而且,利用括号可以帮助我们改变计算的顺序。例如你想在一个表达式中先算加法后算乘法,那么你可以写成 (1 + 2) * 3

关联性

一般而言,操作符从左到右进行关联。这意味着具有相同优先级的操作符按照从左到右的方式进行计算。例如, 2 + 3 + 4 计算顺序为 (2 + 3) + 4

表达式

示例:

length = 5
breadth = 2

area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))

输出

Area is 10
Perimeter is 14

它的工作原理:
矩形的长和宽分别保存在变量 length 和 breadth 中。在表达式的帮助下,我们使用长和宽来计算矩形的面积和周长。我们将表达式 length * breadth 的计算结果保存到变量 area 中,然后用 print 函数将其打印输出。第二种情况是,我们直接在 print 函数中使用表达式 2 * (length + breadth) 的值。

控制流

我们可以通过控制流语句来实现一些功能。在 Python 中,有 ifforwhile 三个控制流语句。

if 语句

if 语句用于检查一个条件:如果条件是真的,我们运行一个语句块(称为 if-block ),否则我们执行另一个语句块(称为 else-block )。else 语句是可选的。

while 语句

while 语句可以让你重复执行一个语句块,只要条件为真。一个 while 语句就是所谓的 循环 语句的一个例子。一个 while 语句可以有一个可选的 else 从句。

for 循环

for...in 语句是另一种循环语句,它会 迭代 对象序列,即会遍历序列中的每个项。序列只是一个有序的项的集合。

continue 语句

continue 语句用来告诉 Python 跳过当前循环语句块中的其余部分,然后 继续 执行循环的下一个迭代。

总结

我们已经了解了如何使用三个控制流语句 —— ifwhilefor 以及和它们相关的 breakcontinue 语句。这些是 Python 中最常见的部分,因此我们要对他们非常熟悉。

函数

函数是程序中可以复用的部件。它允许你为一个语句块取一个特定的名字;通过这个特定的名字,你就可以随时随地地 调用 这个语句块了。

我们用 def 关键字来定义函数。示例如下:

def say_hi():
    # 属于该函数的语句块
    print('hello world')
# 函数结束

say_hi()   # 调用函数
say_hi()   # 再次调用函数

输出:

hello world
hello world

函数参数

参数在函数定义时在圆括号内指定,并用逗号分隔,def func_name(para1, para2)。当我们调用函数时,我们用同样的方式提供值。注意到我们使用的术语 —— 函数定义时括号中的参数叫做 形参,而调用函数时提供的参数叫 实参

局部变量

当你在一个函数中声明变量时,这些变量与函数外部使用的重名的其他变量没有任何关系 —— 即,变量名对于函数来讲是 局部的 (只在函数内部有效)。我们称之为变量的 作用域 。从变量名被定义的地方开始,所有变量都具有作用域,即声明变量时所处的语句块。

示例:

x = 50

def func(x):
    print('x is', x)
    x = 2
    print('Changed local x to', x)

func(x)
print('x is still', x)

输出:

x is 50
Changed local x to 2
x is still 50

它的工作原理:

当我们在函数体的第一行中,第一次打印输出变量名为 x 的 的时候,Python 会将主语句块(位于函数定义的上面)中声明的参数值打印输出。

接下来,我们将值 2 赋给 x 。对于我们定义的函数来讲,x 是局部的。因此,当我们改变函数中 x 的值时,主语句块中定义的 x 不会受到任何影响。

程序的最后一个 print 语句,我们用它来显示主语句块中定义的 x 的值,从而确定它实际上不会受到前面调用的函数中局部赋值的影响。

global 语句

不在任何函数或类的定义内的变量也叫做程序的顶级 top level 变量,如果你要在函数内给这种变量赋值,你需要告诉 Python 这个变量并非本地变量,它是一个 全局变量 。为此我们需要使用 global 语句。不使用 global 语句你就不可能给在函数外定义的变量赋值。

默认参数值

对于某些函数,你可能想让某些形参是 可选的 ,并在用户没有指定这些形参的值时,使用默认值。你可以通过默认形参值来实现这个功能。在函数定义时给某些形参名后加上赋值操作符 = 与对应形参的默认值,这样就为形参指定了默认值。

注意,形参的默认值必须是常数。更确切地说,默认值是不可改变的。

关键字参数

如果你的一些函数需要许多参数,而你只想指定其中的一部分。那么你可以通过为这些参数命名来给它们赋值,这叫做 关键字参数 。我们使用名字(关键字)而不是位置来给函数指定实参。

这样做的两个优势:

  1. 给函数传递参数时更加简单,因为我们不需要担心参数的位置;
  2. 可以只给我们想要改变的参数赋值,让其他参数使用默认值。

可变参数

有时候你可能想要定义一个能接受 任意个数参数 的函数。例如定义一个参数个数可变的函数,你可以通过使用星号 * 来实现这个功能。

return 语句

return 语句用于从一个函数 返回 ,即跳出这个函数。我们也可以从函数跳出时 返回一个值 ,返回值是可选的。

文档字符串 —— DocStrings

Python 有一个十分美妙的特性:文档字符串 (documentation strings),通常简称为 DocStrings 。Docstrings 是一个十分重要的工具,它能让程序变得更加简单易懂。神奇的是,在程序运行时,我们也能查看 DocStrings。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!