【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

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


相关文章
|
5月前
|
SQL 分布式计算 大数据
Python+大数据学习笔记(一)
Python+大数据学习笔记(一)
45 0
|
29天前
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
|
13天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
13天前
|
存储 数据库 数据安全/隐私保护
基于Django的Python应用——学习笔记
基于Django的Python应用——学习笔记
|
2月前
|
存储 C语言 芯片
【Python】学习笔记day1
【Python】学习笔记day1
33 1
|
2月前
|
算法 搜索推荐 测试技术
python排序算法及优化学习笔记1
python实现的简单的排序算法,以及算法优化,学习笔记1
34 1
|
7月前
|
jenkins 持续交付 开发工具
Python学习笔记_Devops_Day05
Python学习笔记_Devops_Day05
|
7月前
|
持续交付 开发工具 数据安全/隐私保护
Python学习笔记_Devops_Day04
Python学习笔记_Devops_Day04
|
7月前
|
JSON JavaScript 前端开发
Python学习笔记_Devops_Day02
Python学习笔记_Devops_Day02
|
4月前
|
存储 算法 程序员
Python语言学习笔记-第二阶段
Python语言学习笔记-第二阶段