首页 > 编程语言 >Python学习(七):基础运算符与表达式【详解】

Python学习(七):基础运算符与表达式【详解】

时间:2024-04-07 12:29:05浏览次数:32  
标签:函数 Python 运算符 详解 print lambda 表达式 赋值

文章目录

python基础运算符与表达式

运算符与表达式的优先级

运算符名称Python运算符优先级结合性
字符串转换expression,…’27——
字典显示{key:value,…}26——
列表显示[expressions…]25——
绑定或元组显示(expressions…)24——
函数调用a(arguments…)23——
await序列切片表达式a[start]:[stop] [:[step]]22——
下标a[index]21
属性引用a.attribute20
乘方await a19
乘方**22
按位非~a17
正负号+a,-a16
乘法、除法与取余*,/,//,%15
加法与减法+,-14
移位<<,>>13
按位与&12
按位异或^11
按位或|10
比较<,<=,>,>=,!=,==9
同一性测试is,is not8
成员测试in,not in7
布尔“非”not a6
布尔“与”and5
布尔“或”or4
条件表达式if – else3
lambda 表达式lambda2——
赋值运算符、复合赋值运算符=、+=、-=、 *= 、/=、//=、%=1

算术运算符(四则运算)

算术运算符用于执行基本的算术操作,如加法、减法、乘法和除法。
【注意】 Python不支持 ++- - 运算符,虽然有些地方在形式上是相同的,但是意义完全不同,比如,2++1 和 3–1 实际表示为2+1 和 2-(-1),结果均为3。
以下是Python的算术运算符:

运算符说明
加法(+)将两个数相加,如1+2
减法(-)从一个数中减去另一个数,如2-1
乘法(*)将两个数相乘,如1*2
除法(/)将一个数除以另一个数,如2/1【int类型相除会输出float类型】
整除(//)返回两个数相除的整数部分,如5//2
正负号(±)表未正数、现数+a、-a

注意: 在Python中,整数除法(/)会得到浮点数结果,整除运算符(//)得到整数结果。

算术运算符(取余/模、乘方)

算术运算符用于执行基本的算术操作,如加法、减法、乘法和除法。以下是Python的算术运算符:

运算符说明
取模(%)返回两个数相除的余数,如5%2
指数(**)返回一个数的幂,如2**3

注意: 在Python中,整数除法(/)会得到浮点数结果,整除运算符(//)得到整数结果。

关系比较运算符

比较运算符用于比较两个值,并返回一个布尔值(True或False)。以下是Python的比较运算符:

运算符说明
等于(==)检查两个值是否相等,如2==2
不等于(!= )检查两个值是否不相等,如1!=2
大于(>)检查一个值是否大于另一个值,如2>1
小于(<)检查一个值是否小于另一个值,如1<2
大于等于(>=)检查一个值是否大于或等于另一个值,如1>=1
小于等于(<=)检查一个值是否小于或等于另一个值,如1<=2
指数(**)返回一个数的幂,如2**3
同一性测试is,is not
成员测试in,not in

位运算符

运算符说明
按位非(~a)按位取非,~a = -(a+1)
左移位(<<)将一个数左移n个位,相当于将这个数乘以2的n次幂。例如:9 << 4,输出144
右移位(>>)将一个数右移n个位,相当于将这个数除以2的n次幂取整。例如,将118右移 >> 3,输出14
无符号右移位(>>>)【python不支持】
按位与( &)任意二进制位与0进行&运算,结果是0;与1进行&运算,结果是其原值。a&0 = 0;a&1 = a
按位异或(^)任意相同二进制位进行^运算,结果为0;任意不同二进制位进行 ^ 运算,结果为1
按位或(|)任意二进制位与0进行| 运算,结果为其原值;与1进行|运算,结果为1。a | 0 = a;a |1 = 1

逻辑运算符

逻辑运算符用于组合多个条件,并返回一个布尔值。以下是Python的逻辑运算符:

运算符说明
与(and)如果所有条件都为真,则返回真,否则返回假
或(or)如果任一条件为真,则返回真,否则返回假
大非(not)对条件取反,如果条件为真,则返回假,否则返回真

赋值运算符、复合赋值运算符

赋值运算符用于将值赋给变量。以下是Python的赋值运算符:

运算符说明
简单赋值(=)将右边的值赋给左边的变量,如a=1
加法复合赋值(+=)将右边的值与左边的变量相加,并将结果赋给左边的变量,如a+=2等同于a=a+2
减法复合赋值(-=)将右边的值从左边的变量中减去,并将结果赋给左边的变量,如a-=2等同于a=a-2
乘法复合赋值(*=)将右边的值与左边的变量相乘,并将结果赋给左边的变量,如a*=2等同于a=a*2
除法复合赋值(/=)将左边的变量除以右边的值,并将结果赋给左边的变量,如a/=2等同于a=a/2
取模复合赋值(%=)将左边的变量除以右边的值的余数,并将结果赋给左边的变量,如a%=2等同于a=a%2
整除复合赋值(//=)将左边的变量除以右边的值的整数部分,并将结果赋给左边的变量,如a//=2等同于a=a//2
指数复合赋值(**=)将左边的变量的值求幂,并将结果赋给左边的变量,如a**=2等同于a=a**2

条件表达式

表达式说明
if – else条件控制通过判断条件是否成立,来决定执行哪个分支。其有多种形式,分为:单分支、双分支、多分支

await序列切片表达式

切片就是在序列对象(字符串、元组或列表)以及range对象中选择某个范围内的项,其中的start、stop、step的含义和range函数中的同名形式参数的含义完全相同,且皆表示元素下标。

表达式说明
await序列切片表达式格式:[start] : [stop] [ : [step] ]

星号表达式

格式:*标识符 、**标识符、*序列,星号表达式必须为列表或者元组中的元素,否则会抛出异常

  • 位于赋值表达式左侧,用于【打包】,同时形成一个列表对象,对传入函数的多个实参进行打包、并作为函数的形式参数传递
    • *是将对应传入的多个位置参数打包为一个【元组类型】对象
    • **是将对应传入的多个关键字参数打包为一个【字典类型】对象
  • 位于一个赋值表达式的右侧,用于【解包】,对传入函数的一个可迭代对象进行解包,并作为函数的实参传递
    • * 会在可迭代对象的每一个元素的相对位置保持不变的情况下,将可迭代对象的所有元素对应转化为多个位置参数(对于字典,仅取出键)
    • **会在字典的每一个键值对的相对位置保持不变的情况下,将字典的所有键值对对应转化为多个关键字参数,转化以后原先字典的键即为函数形参变量名
# 打包----------------------------------------------------------------------
def pack(a, *b, **c):
    print(a, b, c)

pack(1, 2, 3, 4, 5, x=5, y=10)
# pack输出结果:1 (2, 3, 4, 5) {'x': 5, 'y': 10}
# 【"*"、"**"各只能出现一次】
# "*b"对其所在索引位置及后面的元素打包为元组对象
# "**c"对其所在索引位置及后面的元素打包为字典组对象(已被"*b"打包过的元素不再打入)

*a = range(5)  # 打包
print(a)       # 异常"SyntaxError: starred assignment target must be in a list or tuple"

*a, = range(5) # 打包
print(a)       # 输出结果:[0, 1, 2, 3, 4]

# 解包----------------------------------------------------------------------
def unpack(a, b, c):
    print(a, b, c)

unpack(*[1, 2, 3])                  # 输出结果:1 2 3
unpack(**{'a':1,'b':2,'c':3})       # 输出结果:1 2 3

a, *b, c = [*[1, 2, 3], 4, 5]       # 【同时打包、解包】
print(a, b, c)                      # 输出结果:1 [2, 3, 4] 5  打包的同时会兼顾参数c赋值

yield表达式

函数体内含有yield关键字,会将此函数变成一个生成器,那该函数的执行结果是生成器对象:a = yield表示把yield的接收值赋值给a。生成器对象的本质就是迭代器。
生成器它不会直接执行函数代码,而需要调用__next__()(在 for 循环中会自动调用 next())才开始执行。每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
可以返回多次值,而return只能返回一次值。

def my_generator(n):    # 自定义生成器函数
    for i in range(n):
        temp = yield i
        print(f'temp={temp}')

g = my_generator(3)     # 初始化生成器,g是一个可以
type(g)                                           # 输出<class 'generator'>
print(g.__next__())                               # 输出0
print(g.__next__())                               # 输出temp=None、1
print(g.__next__())                               # 输出temp=None、2

#------------------------------------------------------------------------
g = ( i for i in range(10) if i > 3)              # 定义迭代器

for i in range(1000): # range生成一个1000个元素的List,占用内存空间大
    print(i)

for i in xrange(1000): # xrange不会生成一个1000个元素的List,而是返回iterable对象,占用内存空间很小 
    print(i)


def my_generator(n):
    for i in range(n):
        temp = yield i
        print(f'我是{temp}')

# 迭代器对象.send(None) 等同于next(迭代器对象)
# 迭代器对象.send(值)相当于值传给yield yield再赋值给变量,碰到下一个yield又会将函数挂起
# 迭代器对象.close()关闭后无法传值
g = my_generator(5)
print(next(g))  # 输出0
print(next(g))  # 输出1
g.send(100)     # 【本来输出2,但是传入新的值100,改为输出100,可以保证传入新的值且原值也不会弄丢】
print(next(g))  # 输出3
print(next(g))  # 输出4

运行结果:
0
我是None
1
我是100
我是None
3
我是None
4

lambda表达式

lambda是一个表达式,而不是一个语句,用来写一些小体量的一次性函数,避免污染环境,同时也能简化代码。
lambda表达式和def定义函数的区别:lambda为编写简单的函数而设计的,而def用来处理复杂的任务。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。

表达式说明
lambda表达式lambda表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。
如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。
# lambda表达式的语法格式如下:
func = lambda [arg1[, arg2, ... argN]] : expression

# lambda表达式转换成普通函数的形式,如下所示:
def func([arg1[, arg2, ... argN]]):
return expression

# ---------------------------------------------------------------
# 举例如下定义一个内部仅包含 1 行表达式的函数add
def add(x, y):
    return x+ y
    
print(add(5, 10))    # 输出15
# ---------------------------------------------------------------
# 将函数add转换成lambda表达式
add = lambda x,y:x+y

print(add(5, 10))    # 输出15

标签:函数,Python,运算符,详解,print,lambda,表达式,赋值
From: https://blog.csdn.net/china_sirius/article/details/137434774

相关文章

  • Python量化交易系统实战--量化交易入门
    作者:麦克煎蛋  出处:https://www.cnblogs.com/mazhiyong/转载请保留这段声明,谢谢! 这个系列的文章主要是基于慕课网的量化交易学习的笔记,顺便也加了自己的一些理解和优化。一边学一边写,回头再梳理。  量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞......
  • 10 Python进阶:MongoDB
    MongoDb介绍MongoDB是一个基于分布式架构的文档数据库,它使用JSON样式的数据存储,支持动态查询,完全索引。MongoDB是NoSQL数据库的一种,主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势:分布式架构:MongoDB可以运行在多个服务器上,以......
  • 基于R、Python的Copula变量相关性分析及AI大模型应用
    在工程、水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点。虽然皮尔逊相关、秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克服的困难。例如,皮尔逊相关系数只能反映变量间的线性相关,而秩相关则......
  • dbms_lock控制串行详解
    1    使用dbms_lock包控制串行在pl/sql代码块中,有些操作代码块不能被多个会话同时进行执行,比如生成中间数据表(如先清除,后插入中间数据),并且此表的数据在后续业务处理总需要使用,如果此部分代码块被另个会话调用,则会造成中间数据表的数据在同一个会话中不完整。因此当有类似这......
  • C语言04-运算符、流程控制(分支控制、循环控制语句)
    第7章运算符7.5赋值运算符——副作用针对左操作数1.赋值运算符有副作用,针对左边操作数2.左边操作数必须是变量的形式,右边操作数可以是常量、变量、表达式eg:c+=3; //等价于c=c+3;//从右向左赋值intx=num=100;7.6三元运算符a?b:c;表达......
  • python接口自动化实现--基于logging库的日志打印
    1、日志的级别                debug:调试级别,打印非常详细的日志信息,通常用于代码调试        info:信息级别,打印一般的日志信息,突出强调程序的运行过程        warming:警告级别,打印警告信息,表明可能出现潜在的错误        error......
  • (免费赠源码)计算机毕设题目:基于微信小程序的旅游服务系统 77397(开题答辩+程序定制+全套
    springboot旅游服务系统小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,旅游服务系统小程序管理系统被用户普遍使用,为方便用户能够可以随时进行旅游服务系统小......
  • Java;springboot;MYSQL+基于springBoot的大学生就业管理85553(免费领源码)计算机毕业设计
    大学生就业管理系统的设计与实现摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学生就业管理等问题,对学生就业管理进行研究分析,然后开发设......
  • Java/Mysql数据库+django学生就业管理系统 24237(免费领源码)计算机毕业设计项目推荐上
    学生就业管理系统摘 要随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为了方便用户快速定位自己感兴趣......
  • Java/Mysql数据库+springboot物流信息管理系统 23895(免费领源码)计算机毕业设计项目推
    本科毕业论文论文题目:物流信息管理系统的设计与实现院(系)名 称:专  业  名 称:学 生 姓  名:指导教师(校内):指导教师(企业):2023年4月 摘要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信......