3.Python 表达式

简介: 3.Python 表达式

1.认识表达式

表达式是计算的式子,由运算符和操作数组成。表达式必须返回一个值,操作数是参与运算的对象,包括字面值、变量、对象、表达式等。

解析复杂表达式时,先计算最小单元的表达式,然后返回值投入外围表达式的运算,依次逐级上移。

解析表达式遵循从左到右的顺序执行运算,但是也会受到每个运算符的优先级和结合性的影响。为了控制计算,可以使用小括号进行分组,以便提升表达式的优先级。

运算符表示特定算法的符号,大部分由标点符号表示(如+、-、=等),少数运算符由单词表示(如in、is、and、or 和not等)。运算符必须与操作数配合使用,组成表达式,才能够发挥作用。根据操作数的数量,运算符可以分为3种类型:

  • 一元运算符:只有1个操作数,如按位取反~、逻辑非not、一元减号-。
  • 二元运算符:有2个操作数,大部分都是二元运算符,需要结合2个操作数。
  • 三元运算符:有3个操作数,如条件表达式。

运算符根据优先级从高到低向下排列,同一行内运算符等级相同。当运算符的优先级相同时,再根据结合性决定先执行哪个运算符。如果结合性再相同,则最后根据先后顺序决定运算优先级。

不要过度依赖运算符优先级,尽量使用()来控制表达式的执行顺序。

2.条件表达式

条件表达式是Python 唯一的三元运算符,语法格式如下:

# 如果条件表达式为 True, 则执行 True 表达式,否则执行 False 表达式。
<True 表达式> if <条件表达式> else <False 表达式>

也可以使用列表结构来模拟条件表达式,语法格式如下:

[False 表达式,True 表达式][条件表达式]

示例1:将变量n的绝对值赋值给变量x。

n = int(input("请输入一个数字:"))
# method 1
x = n if n >= 0 else -n
# method 2
if n >= 0:
    x = n 
else:
    x = -n
# method 3
x = [-n,n][n >= 0]

3.常见的运算符

算术运算符

赋值运算符
  • =:直接赋值;
  • +=:先相加后赋值;
  • -+:先相减后赋值;
  • *=:先相乘后赋值;
  • /=:先相除后赋值;
  • %=:先取模后赋值;
  • **=:先求幂后赋值;
  • //=:先整除后赋值;
关系运算符
  • > 、<、>=、<=、==、!= 返回布尔值

执行关系运算时,操作数可以是字符串或数字。如果是数字,则直接比较大小,如果是字符串,则根据每个字符编码的大小,从左到右按顺序逐个比较。字符比较区分大小写,一般小写字符大于大写字符。如果不区分大小写,可以使用 upper()或 lower()方法统一字行串的大小写形式。如果操作数是布尔值,则先转换为数字,True为1,False 为0,再进行比较。


相等关系的两个操作数没有类型限制。如果类型不同,则不相等,直接返回 False:如果类型相同,再比较值是否相同,如果相同,则返回 True,否则返回 False。如果操作数是布尔值,则先转换为数字,True为1,False 为0,再进行比较。

逻辑运算符
  • and:逻辑与,表示只有当两个操作数都为 True 时,才返回 True,否则返回 False。
  • or:逻辑或,表示两个操作数中只要有一个为 True,就返回 True:否则返回 False。
  • not :逻辑非仅包含一个操作数,表示把操作数转换为布尔值,然后返回取反后的布尔值。

逻辑与是一种短路逻辑:如果左侧表达式为 False,则直接短路返回结果,不再运算右侧表达式。因此,在设计逻辑运算时,应确保逻辑运算符左侧的表达式返回值是一个可以预测的值。右侧表达式不应该包含有效运算,如函数调用等,因为当左侧表达式为 False 时,则直接跳过右侧表达式,给正常运算带来不确定性。


逻辑或也是一种短路逻辑:如果左侧表达式为 True,则直接短路返回结果,不再运算右侧表达式。


逻辑与和逻辑或运算的返回值不必是布尔值,但是逻辑非运算的返回值一定是布尔值,而不是表达式的原值。

位运算符

位运算符共有6个,分为如下两类。

逻辑位运算符,位与(&)、位或(|)、位异或(^)和位非(~)。

移位运算符,左移(<<)和有移(>>)。

  • &:两个二进制操作数逐位比较,两个操作数都为1时,才返回1,否则返回0;
  • |:两个二进制操作数逐位比较,两个操作数只要一个为1时,就返回1,否则返回0;
  • ^:两个二进制操作数逐位比较,两个操作数都为1或0时,就返回0,否则返回1;
  • :对一个二进制操作数逐位进行取反操作;
  • <<:运算符执行左移位运算。符号始终保持不变,如果右侧空出位置,则自动填充为0;如果超出32位的值,则自动丢弃;
  • >>:运算符执行有符号的右移位运算。把32位的二进制数中的所有有效位整体右移,再使用符号位的值填充空位,超出的值将被丢弃;
其它运算符
  • in:如果在指定的对象中找到元素值,则返回True、否则False;
  • not in:如果在指定的对象中没有找到元素值,则返回True、否则False;
  • is:判断两个标识符是否引用同一个对象;
  • is not:判断两个标识符是否引用不同的对象;

样例:

'''
输入一个字符串,将小写字符转换为大写字符,将大写字符转换为小写字符。
'''
str = input("请输入字符:")            # 接收一个字符串
stri = ''                             # 定义一个空字符串,用于存储转换后的结果
for cha in str:                       # 循环遍历字符串
    if 'a' <= cha <= 'z':             # 判断字符是否是小写
        cha1 = ord(cha) - 32         # 将字符转换为ASCII值,并减32变成大写
    elif 'A' <= cha <= 'Z':        # 判断字符是否为大写
        cha1 = ord(cha) + 32       # 将字符转换为ASCII值,并加32变成小写
    str1 += chr(cha1)              # 将ASCII 值转换为字符型
print(str1)
'''
要求用户输入3个字符串,并比较3个字符串的大小。
2个字符串比较是根据从左到右的顺序,依次比较相应位置字符的ASCII码值的大小
'''
str1 = input('input string')    
str2 = input('input string')
str3 = input('input string')
print('before sored:',str1,str2,str3) # 打印输入后的三个字符串顺序
if str1 > str2:                     # 依次判断两个字符的大小
    str1,str2 = str2,str1           # 交换两个字符串
if str1 > str3:
    str1,str3 = str3,str1
if str2 > str3:
    str2,str3 = str3,str2
print('after sorted:',str1,str2,str3) # 打印排序后的三个字符串顺序

相关文章
|
1月前
|
Python
Python编程中正则表达式的使用
【10月更文挑战第22天】正则表达式,一种强大的文本处理工具,在Python编程中有着广泛的应用。本文将介绍如何使用Python中的re库来使用正则表达式,包括如何创建、匹配、查找和替换字符串等。通过学习本文,你将能够掌握Python中正则表达式的基本使用方法。
|
3月前
|
Python
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
48 2
|
2月前
|
程序员 Python
Python中Lambda表达式的优缺点及使用场景
Python中Lambda表达式的优缺点及使用场景
42 0
|
2月前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
32 0
深入浅出python的lambda表达式
今天我们来聊聊Python中一个常用的特性 - lambda表达式。别被这个听起来很高大上的名字吓到,其实它就是个匿名函数的实现机制。
|
4月前
|
Python
Python中的Lambda表达式
Python中的Lambda表达式
|
4月前
|
运维 Java API
探索Java中的Lambda表达式自动化运维的魔法:如何利用Python脚本提升效率
【8月更文挑战第29天】Lambda表达式是Java 8中引入的一个新特性,它允许我们将功能作为方法参数,或者代码作为数据来处理。在这篇文章中,我们将深入探讨Java中的Lambda表达式,包括它的语法、使用场景以及如何在实际编程中应用它。我们将通过一些简单的示例来演示Lambda表达式的强大功能和灵活性,让你更好地理解和掌握这一新特性。
|
4月前
|
测试技术 数据处理 Python
掌握Python lambda表达式:高效编程的新趋势
【8月更文挑战第22天】在Python中,函数是执行特定任务的代码块。匿名函数,即lambda函数,无需名称即可定义,适用于简短的一次性使用场景。其语法简洁,形如`lambda arguments: expression`,能有效应用于数据处理。例如,计算两数之和:`sum = lambda a, b: a + b`;对列表元素求平方:`squared = map(lambda x: x**2, numbers)`;或将字符串转为大写:`uppercased = map(lambda s: s.upper(), strings)`。这些用例展示了lambda函数如何简化代码,使其更清晰高效。
20 0
|
6月前
|
存储 Python
在Python中,匿名函数(lambda表达式)是一种简洁的创建小型、一次性使用的函数的方式。
【6月更文挑战第24天】Python的匿名函数,即lambda表达式,用于创建一次性的小型函数,常作为高阶函数如`map()`, `filter()`, `reduce()`的参数。lambda表达式以`lambda`开头,后跟参数列表,冒号分隔参数和单行表达式体。例如,`lambda x, y: x + y`定义了一个求和函数。在调用时,它们与普通函数相同。例如,`map(lambda x: x ** 2, [1, 2, 3, 4, 5])`会返回一个列表,其中包含原列表元素的平方。
60 4
|
6月前
|
Python
在Python中,解包参数列表和Lambda表达式是两个不同的概念
【6月更文挑战第19天】在Python中,解包参数允许将序列元素作为单独参数传递给函数,如`greet(*names_and_ages)`。而Lambda表达式用于创建匿名函数,如`lambda x, y: x + y`。两者可结合使用,如`max(*numbers)`找列表最大值,但过度使用lambda可能降低代码可读性。
34 3