就像在数学中一样,Python 等编程语言也有运算符。您可以将它们视为计算机科学的基础——极其简单但至关重要的“函数”。这是计算机程序可以被分解到的最简单操作。对于立志成为数据科学家或软件工程师的人而言,这是必备知识。
在本教程中,您将学习:
如果您想进一步学习 Python 编程语言的基础知识,欢迎查看我们的免费课程 Intro to Python for Data Science 。
Artithmetic Operators
这些您很可能已经很熟悉了,因为它们来自基础数学。
算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)、幂(**)、整除(//)和取模(%)。前四个相当简单;分别是加、减、乘、除,您应该已经很熟悉。
print ( 5 + 2 )
print ( 5 - 2 )
print ( 5 * 2 )
print ( 5 / 2 )
技术支持
7
3
10
2.5
技术支持
另外三个稍微复杂一些。幂运算符表示“乘方”。例如,2 ** 3 表示将 2 自身相乘 3 次,因此 2 ** 3 等同于 2 * 2 * 2,结果为 8。
整除与普通除法类似,但结果总是向下取整。在下面的示例中,5 除以 2 的结果是 2.5。但由于这里是整除,2.5 会被向下取整为 2。
最后,取模是除法后的余数。在 5%2 的情况下,2 在 5 里只能放进两次,因此余数为 1。
print ( 5 ** 2 )
print ( 5 // 2 )
print ( 5 % 2 )
技术支持
25
2
1
技术支持
在 Python 中,加号运算符还可用于连接字符串。这意味着它们会被拼接为一个字符串,例如:
firstName = "Théo"
introduction = "Hi, my name is " + firstName + "."
print ( introduction)
技术支持
Hi, my name is Théo.
技术支持
Assignment Operators
如果您有一些编程经验,肯定用过赋值运算符。它们用于将某个值赋给变量。最常用的是 =。使用时,只需输入要赋新值的变量名、=,以及要赋的值。例如,如果您想将值 100 赋给变量 balance,可以这样做:
balance = 100
print ( balance)
技术支持
100
技术支持
如果您想让 balance 增加 10,可以使用 balance += 10。这等价于 balance = balance + 10,但要简短得多。
balance += 10
print ( balance)
技术支持
110
技术支持
-= 也一样,balance -= 10 等同于 balance = balance - 10:
print ( balance)
balance -= 10
print ( balance)
技术支持
110
100
技术支持
其他赋值运算符的用法完全相同。包括:
Comparison Operators
您可以使用比较运算符来——没错,就是——比较变量的值。它们总是返回布尔值,即 True 或 False。总共有六种:
相等:==
不相等 :!=
大于:>
小于:<
大于等于:>=
小于等于:<=
以下是一些比较示例:
a = 3
b = 5
print ( a == b)
print ( a != b)
print ( a > b)
print ( a < b)
print ( a >= b)
print ( a <= b)
技术支持
False
True
False
True
False
True
技术支持
== 和 != 也可用于比较字符串,而不是数字。其他运算符不适用于字符串,因为字符串并不存在谁“大于”谁的说法。
print ( "Hello" == "World" )
print ( "Python" != "R" )
技术支持
False
True
技术支持
Logical Operators
这些您也许已经很熟悉了!在逻辑学中,它们被称为逻辑联结词。在自然语言中也被广泛使用。包括:and、or 和 not。
and 仅在两个操作数(您正在比较的两个布尔对象)都为 True 时才返回 True。例如:
print ( True and True )
print ( True and False )
print ( False and False )
技术支持
True
False
False
技术支持
要理解该逻辑运算符的行为,您可以使用真值表:
a b a and b True True True True False False False True False False False False
or 只要任一(一个或多个)操作数为 True,就为 True。
print ( True and True )
print ( True and False )
技术支持
True
False
技术支持
a b a or b True True True True False True False True True False False False
请注意 ,这些运算符也适用于两个以上的操作数,例如:
print ( True and True and True and True )
print ( True and True and True and False )
print ( False or False or False or False )
print ( False or False or False or True )
技术支持
True
False
False
True
技术支持
not 会返回其操作数的相反值,因此给定 False 时返回 True,反之亦然。
print ( not True )
技术支持
False
技术支持
运算符重载
还记得之前您看到 + 既可以相加数字,也可以连接(合并)字符串吗?因此 + 的行为会根据所作用的对象类型而不同。但并非总是如此。有时,您使用的运算符并不支持想要作用的对象类型。
来看一个例子。假设您有两个 Dog 对象,ozzy 和 filou。它们属于下面的 Dog 类。您可以将类视为对象应当具备的外观和行为的蓝图。在本例中,Dog 对象有姓名、年龄和身高。定义类之后,您可以实例化对象。其中一个是 Ozzy,3 岁,身高 30 厘米。另一个是 Filou,5 岁,身高 65 厘米。
该示例使用了面向对象编程的概念。如果您想进一步了解,请阅读我们的教程 Object-Oriented Programming in Python
假设您想用大于号 > 来比较两只狗。这将无法工作。您会得到一个错误:'>' not supported between instances of 'Dog' and 'Dog'。这意味着 > 不知道如何比较 Dog 类的对象。
class Dog :
def __init__ ( self, name, age, height) :
self. name = name
self. age = age
self. height = height
ozzy = Dog( "Ozzy" , 3 , 30 )
filou = Dog( "Filou" , 5 , 65 )
print ( filou > ozzy)
技术支持
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
TypeError Traceback ( most recent call last)
< ipython- input- 96 - 428069ab24cc> in < module> ( )
9 filou = Dog ( "Filou" , 5 , 65 )
10
-- - > 11 print ( filou > ozzy)
TypeError : '>' not supported between instances of 'Dog' and 'Dog'
技术支持
幸运的是,通过运算符重载,您可以为 Dog 对象定义该运算符的行为。本例中,需要定义一个名为 __gt__(表示“大于”)的方法,接收两个参数。由于我们想按身高比较两只狗,该方法返回 self.height > other.height。
class Dog :
def __init__ ( self, name, age, height) :
self. name = name
self. age = age
self. height = height
def __gt__ ( self, other) :
return self. height > other. height
ozzy = Dog( "Ozzy" , 3 , 30 )
filou = Dog( "Filou" , 5 , 65 )
print ( filou > ozzy)
print ( ozzy > filou)
技术支持
True
False
技术支持
优先级
当您组合许多运算符时,事情可能会变得复杂。请看下面的示例:
a = 2
b = 3
c = 9
a ** b > 5 and c - a // b >= 9 or b ** 2 == c
技术支持
True
技术支持
您怎么知道哪个会先执行?当代码里有很多这些符号时,该如何阅读?是从左到右执行,还是有特定顺序?
这就是优先级发挥作用的地方。Python 运算符按非常明确的顺序执行,且某些运算符优先于其他运算符。
在下表中,您可以看到运算符的优先级,从上到下排列。规则与数学中相同:公式里某些计算必须先于其他计算执行。
优先级 运算符 说明 1 ** 幂 2 *, /, %, // 乘、除、取模、整除 3 +, - 加、减 4 >, <, >=, <= 比较 5 ==, != 相等性 6 = %= /= //= -= += *= **= 赋值 7 and, or, not 逻辑
结合性
您已经看到优先级很重要!但对于同一优先级的运算符(例如乘法和除法)该怎么办?它们会同时执行吗?不会。*、\、% 和 \\ 按从左到右执行,而 ** 则从右到左执行。这称为结合性。
看下面的示例。在这种情况下,运算符将从左到右执行,输出为 3。
print ( 5 * 2 // 3 )
技术支持
3
技术支持
不过,通过添加括号,您可以更改运算符的执行顺序。这就是结合性,它与数学中的结合性相同。括号内的内容会优先计算。本例中,会先执行整除,然后再进行乘法。
print ( 5 * ( 2 // 3 ) )
技术支持
总结
您现在已经了解了什么是运算符、如何使用以及它们的工作方式。您还学习了重载、优先级和结合性。离成为 Python 大师又近了一步!如果您还想学习更多内容,欢迎查看我们的课程 Intermediate Python for Data Science 。
就像在数学中一样,Python 等编程语言也有运算符。您可以将它们视为计算机科学的基础——极其简单但至关重要的“函数”。这是计算机程序可以被分解到的最简单操作。对于立志成为数据科学家或软件工程师的人而言,这是必备知识。
在本教程中,您将学习:
如果您想进一步学习 Python 编程语言的基础知识,欢迎查看我们的免费课程 Intro to Python for Data Science。
Artithmetic Operators
这些您很可能已经很熟悉了,因为它们来自基础数学。
算术运算符包括加法(
+)、减法(-)、乘法(*)、除法(/)、幂(**)、整除(//)和取模(%)。前四个相当简单;分别是加、减、乘、除,您应该已经很熟悉。另外三个稍微复杂一些。幂运算符表示“乘方”。例如,
2 ** 3表示将2自身相乘3次,因此2 ** 3等同于2 * 2 * 2,结果为 8。整除与普通除法类似,但结果总是向下取整。在下面的示例中,5 除以 2 的结果是 2.5。但由于这里是整除,2.5 会被向下取整为 2。
最后,取模是除法后的余数。在
5%2的情况下,2 在 5 里只能放进两次,因此余数为 1。在 Python 中,加号运算符还可用于连接字符串。这意味着它们会被拼接为一个字符串,例如:
Assignment Operators
如果您有一些编程经验,肯定用过赋值运算符。它们用于将某个值赋给变量。最常用的是
=。使用时,只需输入要赋新值的变量名、=,以及要赋的值。例如,如果您想将值 100 赋给变量balance,可以这样做:如果您想让
balance增加 10,可以使用balance += 10。这等价于balance = balance + 10,但要简短得多。-=也一样,balance -= 10等同于balance = balance - 10:其他赋值运算符的用法完全相同。包括:
*=/=**=//=%=Comparison Operators
您可以使用比较运算符来——没错,就是——比较变量的值。它们总是返回布尔值,即
True或False。总共有六种:==!=><>=<=以下是一些比较示例:
==和!=也可用于比较字符串,而不是数字。其他运算符不适用于字符串,因为字符串并不存在谁“大于”谁的说法。Logical Operators
这些您也许已经很熟悉了!在逻辑学中,它们被称为逻辑联结词。在自然语言中也被广泛使用。包括:
and、or和not。and仅在两个操作数(您正在比较的两个布尔对象)都为 True 时才返回 True。例如:要理解该逻辑运算符的行为,您可以使用真值表:
or只要任一(一个或多个)操作数为 True,就为 True。请注意,这些运算符也适用于两个以上的操作数,例如:
not会返回其操作数的相反值,因此给定False时返回True,反之亦然。运算符重载
还记得之前您看到
+既可以相加数字,也可以连接(合并)字符串吗?因此+的行为会根据所作用的对象类型而不同。但并非总是如此。有时,您使用的运算符并不支持想要作用的对象类型。来看一个例子。假设您有两个
Dog对象,ozzy和filou。它们属于下面的Dog类。您可以将类视为对象应当具备的外观和行为的蓝图。在本例中,Dog对象有姓名、年龄和身高。定义类之后,您可以实例化对象。其中一个是 Ozzy,3 岁,身高 30 厘米。另一个是 Filou,5 岁,身高 65 厘米。该示例使用了面向对象编程的概念。如果您想进一步了解,请阅读我们的教程 Object-Oriented Programming in Python
假设您想用大于号
>来比较两只狗。这将无法工作。您会得到一个错误:'>' not supported between instances of 'Dog' and 'Dog'。这意味着>不知道如何比较Dog类的对象。幸运的是,通过运算符重载,您可以为
Dog对象定义该运算符的行为。本例中,需要定义一个名为__gt__(表示“大于”)的方法,接收两个参数。由于我们想按身高比较两只狗,该方法返回self.height > other.height。优先级
当您组合许多运算符时,事情可能会变得复杂。请看下面的示例:
您怎么知道哪个会先执行?当代码里有很多这些符号时,该如何阅读?是从左到右执行,还是有特定顺序?
这就是优先级发挥作用的地方。Python 运算符按非常明确的顺序执行,且某些运算符优先于其他运算符。
在下表中,您可以看到运算符的优先级,从上到下排列。规则与数学中相同:公式里某些计算必须先于其他计算执行。
结合性
您已经看到优先级很重要!但对于同一优先级的运算符(例如乘法和除法)该怎么办?它们会同时执行吗?不会。
*、\、%和\\按从左到右执行,而**则从右到左执行。这称为结合性。看下面的示例。在这种情况下,运算符将从左到右执行,输出为 3。
不过,通过添加括号,您可以更改运算符的执行顺序。这就是结合性,它与数学中的结合性相同。括号内的内容会优先计算。本例中,会先执行整除,然后再进行乘法。
总结
您现在已经了解了什么是运算符、如何使用以及它们的工作方式。您还学习了重载、优先级和结合性。离成为 Python 大师又近了一步!如果您还想学习更多内容,欢迎查看我们的课程 Intermediate Python for Data Science。