基本运算符#

运算符是Python中的符号,用于进行特定的计算或操作。运算符所操作的值或条件被称为运算数。运算数可以是一个变量,如 jan_precip_in,其中有一些值(比如0.70) 或数据结构,如一个包含月份的列表。操作数也可以是一个条件表达式或语句。

例如,你可以检查列表中的月份是否包含一月的值。如果列表中包含January,检查的结果是True(January确实存在于月份列表中)。如果不包含January,则返回False(January不存在于月份列表中)。Python中有许多不同类型的运算符,包括:ArithmeticAssignmentComparison or RelationalIdentityMembershipLogical

1. Python中的算术运算符#

在Python中,可以完成许多算术运算,包括以下运算符:

  • addition (+)

  • subtraction (-)

  • multiplication (*)

  • division (/)

  • exponents (**)

尝试一下吧:

#Add two values
a = 2
b = 3
a + b
5
#Exponents
a ** b
8

2. Python中的赋值运算符#

如果想为计算结果分配一个新值,可以使用一个赋值运算符,它将算术运算符(例如*)与赋值=相结合来设置一个新值。例如,我们可以组合 *= 乘以一个值,并将结果设置为等于它本身加上新值。

jan_precip = 0.70
inches_to_mm = 25.4
jan_precip *= inches_to_mm
jan_precip
17.779999999999998

回想上一课中,还使用了赋值运算符将项目附加到列表的末尾。当列表包含字符串时,此方法有效。这是加法赋值运算符的一种特殊情况,+=因为它实际上并没有完成对列表的数学运算。它只是将值作为新项目附加到列表的末尾。

months = ["January", "February"]
months += ["March", "April"]
months
['January', 'February', 'March', 'April']

但是,并非所有赋值运算符都可以用于所有对象类型。例如,以下代码将导致错误,因为Python不知道如何处理重新分配列表中的每个值。

boulder_precip_in = [0.70, 0.75, 1.85]
boulder_precip_in *= 25.4
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[5], line 2
      1 boulder_precip_in = [0.70, 0.75, 1.85]
----> 2 boulder_precip_in *= 25.4

TypeError: can't multiply sequence by non-int of type 'float'

算术赋值运算符的输出不会自动打印。如只调用变量名(例如a, jan_precip, b),只会看到最后一个变量的值。

a
jan_precip
b
3

这时使用 print() 语句会很有帮助,这样可以打印多个值

print(a)
print(jan_precip)
print(b)
2
17.779999999999998
3

3. Python 中的关系运算符#

在Python中,我们经常需要将两个值相互比较。要做到这一点,可以检查一个语句,如3 < 4,并从Python中得到两个值中的一个返回TrueFalse。这些被称为布尔值,在脚本工作流程中可是非常强大的。布尔值是一个要么是1(真),要么是0(假)的值。像字符串整数一样,布尔值是它们自己的数据类型。

在Python中,有许多可以使用的关系操作,包括以下的运算符:

  • equal (==)

  • not equal (!=)

  • greater than (>)

  • greater than or equal (>=)

  • less than (<)

  • less than or equal (<=)

关系运算返回一个布尔值:

#Is the value 3 less then 4?
3 < 4
True
#Does 3 equal 3?
3 == 3
True
is_greater = (3 > 2)
is_greater
True

4. Python中的成员运算符#

成员运算符,例如in,将检查一个项目是否包含另一个项目。这对于字符串、列表或后面的课程中学习的其他数据存储对象(例如数据框)很有用。

precip = "Precipitation"
#Are the characters `Precip` in the object called precip?

"Precip" in precip
True
temp_1 = [70, 68, 74]
68 in temp_1
True

5. 逻辑运算符#

逻辑运算符可用于检查布尔值的组合。最常见的逻辑运算符是andandorand将检查被检查的两个语句是否为真。True and True会回来True,但True and False会回来Falseor将检查被检查的语句之一是否为真,True or True会返回True,True or False也会返回TrueFalse and FalseFalse or False返回False。

#True and True

68 in temp_1 and 70 in temp_1
True
#True and False

68 in temp_1 and 69 in temp_1
False

6. 身份运算符#

一个身份运算符,例如is,将检查两个变量是否指代同一个对象。它与 == 操作符相似,只是它不仅会检查两个变量的值是否相同,而且会检查它们在 Python 中是否指代完全相同的东西。这是一个微妙的区别,但可以非常有用。

#Create variables to compare

temp_1 = [70, 68, 74]

temp_2 = [70, 68, 74]
#reate a new variable called temp_3 from temp_1

temp_3 = temp_1

#Test that temp_3 the same as temp_1

temp_1 is temp_3
True
#While temp_1 and temp_2 contain the same values...

temp_1 == temp_2
True
#They have been created independently

temp_1 is temp_2
False

通过这个例子,可以很容易地看到 ==is 之间的区别。尽管temp_1temp_2包含相同的值,但它们在技术上不是同一个列表。也就是说,它们不是存储在计算机上的同一个内存位置。然而,由于temp_3被设置为等于temp_1,它们是完全相同的。

也可以把 “是 “和 “不是 “结合起来,检查两个变量是否相同。

temp_1 is not temp_2
True
is_the_same = (temp_1 is temp_2)

is_the_same
False

7. 运算符优先级#

和一般数学运算一样,Python所有运算符都是有优先级的,因此在实际使用的时候要注意,例如上面的例子中,我们不需要括号也能得到一样的结果:

is_the_same = temp_1 is temp_2

is_the_same
False

说明is的优先级是高于=赋值符号的,具体的优先级顺序可以参考Python官方文档:https://docs.python.org/3/reference/expressions.html#operator-precedence

如果平时使用的时候觉得查询太麻烦,那就用括号好了。