【Python】学习笔记day3

简介: 【Python】学习笔记day3

一.运算符

1.算术运算符

Python算术运算符

运算符 描述 实例(设变量a=10,b=20)
+ 加 , 两个对象相加 a + b 输出结果 30
- 减 , 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 , 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 , x除以y b / a 输出结果 2
% 取模 , 返回除法的余数 b % a 输出结果 0
** 幂 , 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 , 返回商的整数部分向下取整

 9 // 2 输出结果  4

-9 // 2 输出结果 -5


算术运算符的运算顺序:

先算乘方,然后是乘除,最后算加减.

如果运算过程中想修改默认的运算顺序,就需要加上 ( ) .

在Python中,0/0.0都不能作为除数.(会出现抛出异常,程序被终止).

除法的截断:

如果是整数/整数,除不尽,得到的就是小数,不会出现截断的情况.

**进行的乘方运算,既支持整数次方,也支持小数次方.(即开方运算)

// 表示地板除法(取整除法) ,其实就相当于C语言里的除法.但要注意负数运算是向下取整!

Python中,字符串之间可以相加,

整数和浮点数可以相加,

整数和布尔值可以相加  (True为1,False为0)但是没有意义.

Python中只有字符串类型,没有字符类型!


2.关系运算符

像<  <=  >  >=  ==  !=这一系列的运算符称为关系运算符,它们是在比较操作数之间的关系.

其中:

  • <=是   小于等于
  • >=是   大于等于
  • ==是   等于
  • !=是   不等于

如果关系符合,则表达式返回True.如果关系不符合,则表达式返回False.如:

a=10
b=20
 
print(a<b)
print(a>b)
print(a<=b)
print(a>=b)
print(a==b)
print(a!=b)

运行结果:


关系运算符比较字符串

关系运算符不仅能比较数字,还能比较字符串,如:

a="hello"
b="world"
 
print(a<b)
print(a>b)
print(a<=b)
print(a>=b)
print(a==b)
print(a!=b)

运行结果:

字符串的比较逻辑字典序.

先看首字母在字母表上的顺序,谁小,谁就排在前面.

如果首字母相同,依次比较第二个字母,第三个字母......

如果直到最后一个字母都相同,则两字符串相等.

字符串在字典上越靠前,就越小,越靠后,就越大.

注意:中文字符串在Python中可以比较大小,但比较的结果没有任何意义.

因为在计算机里,表示中文,是用多个字节构成的一个比较大的数字来进行比较的.

在某些场景中需要对中文进行排序时,需要借助第三方库来实现.


关于字符串能否使用==/!=来比较:

Python中支持连续大于连续等于(链式赋值)的写法,这一点在C语言中是不支持的,如:

a=10
print(0<a<20) #判定a是否大于0且小于20

运行结果:


关系运算符比较浮点数

针对浮点数来说,使用==比较相等,会存在一定的风险!!!


因为浮点数在内存中的存储和表示,是可能存在误差的!!!


(有关浮点数在内存中的存储还不清楚的朋友可以移步我的这篇博客【C数据结构】整形和浮点型在内存中的存储,里面对整数和浮点数在内存中的存储方式做了较为生动的图解)


这样的误差在进行算术运算的时候就可能被放大,从而导致==的判定出现误判.


如:


我们逐步拆解一下这个表达式的问题:

print(0.1+0.2==0.3)
 
print(0.1)
print(0.2)
print(0.1+0.2)
print(0.3)

输出结果:


可以看到,虽然0.3和0.3000000000000004已经非常接近了.


但是如果直接使用==进行比较,仍然会出现False的情况.


正确的比较浮点数相等:

作差,看差值是否小于预期的误差范围!


如:


a= 0.1 + 0.2
b= 0.3
 
#看a-b是否是一个非常小的数字,是否在误差范围之内
print(-0.000001<(a-b)<0.000001)

运行结果:


3.逻辑运算符

and  

并且

两侧操作数均为True,表达式的值为True.否则为 False.(一假即假)

or

或者

两侧操作数均为False,表达式的值为False,否则为True(一真即真)

not

逻辑取反

只有一个操作数.操作数为True,则返回False,操作数为False,则返回True.


短路求值:

是逻辑运算符中的重要细节.

对于and操作来说,如果左侧表达式为False,那么整体的值一定是False,右侧的表达式不必求值.

对于or操作来说,如果左侧表达式为True,那么整体的值一定是true,右侧的表达式不必求值.

验证方法:

下面这个程序如果没有短路求值的话,那么接着运行,用0做除数会导致程序抛出异常

a=10
b=20
print(a>b and 10/0==1)  #此处如果没有短路求值的话,那么接着运行用0做除数会导致程序抛出异常

运行结果:

可以看到,程序成功运行,并给出了表达式的判断结果.

如果将and左右的表达式交换位置:

a=10
b=20
print(10/0==1 and a>b)

运行结果就会抛出异常:

可见,由此可以验证短路求值是真实存在的.


4.赋值运算符

Python赋值运算符

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a

=表示赋值,将右侧的值填充到左侧的空间中.

因此=左侧必须是变量,不能是无法修改的常量或常量表达式.

使用复合赋值运算符时程序会先读取变量,然后计算,最后赋值,因此必须保证左侧的变量是已经被定义过的,否则程序就会因为第一步读取变量失败而报错.

Python中不支持++/--这样的自增操作!


链式赋值:

下面这种链式赋值的意思就是先把20赋值给b,再把b赋值给a.

a=b=20

该行代码相当于:

a=20
b=20

虽然链式赋值在语法上是允许的,但一般在编程中还是不建议使用,因为代码可读性会很低.


多元赋值:

下面这种多元赋值的意思是,把10赋值给a,把20赋值给b.

a,b=10,20

多元赋值也不推荐使用,但可以使用多元赋值帮助我们解决一些特殊的问题:

如,当我们需要交换两个变量的值时

传统方法是再创建一个临时变量来完成两个变量的互换,如:

a=10
b=20
 
tmp=a
a=b
b=tmp

但使用多元赋值时,我们可以直接一步就完成交换,如:

a=10
b=20
 
a,b=b,a

今日感悟:超额付出,而不是等额付出,期待超额回报.


相关文章
|
1月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
176 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
127 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
135 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
1月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
77 1
|
1月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
51 2
|
1月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
32 1
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
41 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
|
1月前
|
程序员 编译器 Python
Python学习笔记--- day01计算机基础和环境搭建(二)
Python学习笔记--- day01计算机基础和环境搭建(二)