【Python学习日历】Day.1-Python语言与运算符

一、关于Python语言

Python,是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。它的语言结构以及面向对象的方法旨在帮助程序员为小型的和大型的项目编写清晰的、合乎逻辑的代码。----Wikipedia

概括而言:Python语言是一种解释型动态数据类型面向对象的高级计算机程序设计语言

1. Python语言的诞生

Python在英文单词中的释义为“蟒蛇”,Python语言由荷兰计算机程序员Guido van Rossum于1989年在荷兰数学和计算机科学研究学会所设计出来,Python语言的发展可以详细划分为以下关键阶段:

  1. 1991年2月,Python 0.9,已经存在带继承的类、异常处理、函数和核心数据类型listdictstr等;
  2. 1994年1月,Python 1.0,包括了Amrit Prem提供的函数式编程工具lambdamapfilterreduce
  3. Python 1.4,增加了受Modula-3启发的关键字参数,和对复数的内建支持,还包含了采取名字修饰的一种基本形式的数据隐藏;
  4. 2000年10月,Python 2.0,介入了列表推导式,向垃圾收集系统增加了环检测算法,并且支持Unicode;
  5. Python 2.1,支持了嵌套作用域;
  6. Python 2.2,将Python的类型(用C写成)和类(用Python写成)统一入一个层级,使得Python的对象模型成为纯粹和一致的面向对象的模型,还增加了迭代器,受CLU和Icon启发的生成器和描述器协议;
  7. Python 2.4,加入了集合数据类型,和函数修饰器;
  8. Python 2.5,加入了with语句;
  9. 2008年12月,Python 3.0,它对语言做了较大修订而不能完全后向兼容。Python 3发行包括了2to3实用工具,它(至少部分的)自动将Python 2代码转换成Python 3代码,Python 3的很多新特性后来也被移植到旧的Python 2.6/2.7版本中;

Python 2.7的产品寿命结束日期最初设定为2015年,出于对大量的现存代码不能前向移植到Python 3的关切而延期至2020年。随着Python 2的产品寿命结束,只有Python 3.9、3.10和后续版本正在被完全支持,但仍提供对3.7和3.8版本的安全性修正。然而现阶段Python 2.7和Python 3.7 仍然是目前Python语言的版本使用主流

2. Python语言的特点

  1. Python是多范型编程语言
    它完全支持结构化编程和面向对象编程,还有很多特征支持函数式编程和元编程包括元类和元对象。通过扩展还可以支持很多范型,包括面向切面编程、契约式设计和逻辑编程。
  2. Python使用动态类型
    在内存管理上采用引用计数和环检测相结合的垃圾收集器。它的特征还有动态名字解析(后期绑定),即在程序执行期间绑定方法和变量的名字。
  3. Python对遵循LISP传统的函数式编程提供了有限的支持
    它提供了 mapfilterreduce函数;列表推导式、字典、集合和生成器表达式。标准库中的模块functoolsitertools,实现了从Haskell和Standard ML借鉴来的函数式工具。
  4. Python的优点及设计哲学
    Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面是其中首要:
  • 优美优于丑陋。明了优于隐晦。
  • 简单优于复杂。复杂优于凌乱。
  • 扁平优于嵌套。稀疏优于稠密。
  • 可读性很重要

“用一种方法,最好是只有一种方法来做一件事”

二、运算符

  • 什么是运算符?
    这里我们不妨举一个简单的例子:1 + 2 = 3 。其中 12 被称为操作数,“+”被称为运算符。同样的,在Python语言的学习过程中,我们会接触不同类型的运算符,它们具有不同的优先级及功能。

Python语言支持以下类型的运算符:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符

接下来,我们将从运算符优先级和结合性开始依次学习Python语言运算符。

1. Python运算符优先级和结合性

  • Python的运算符优先级

当多个运算符同时出现在一个表达式中时,优先级高的运算符被优先执行。

例如对于表达式 a + b * c, 已知 a = 1b = 2c = 3,Python 优先计算乘法再计算加法,得出的结果为 7,先计算 * 再计算 +,说明 * 的优先级高于 +

同类型的运算符也可能存在着优先级的差异,详情可参见表一。

表 1 Python 运算符优先级和结合性一览表(由上至下为优先级由高至低)
运算符说明
Python运算符
优先级
结合性
小括号( )19
索引运算符x [ i ] 或 x [ i1 : i2 [ : i3 ] ]18
属性访问x.attribute17
乘方**16
按位取反~15
符号运算符+(正号)、-(负号)14
乘除*、/、//(取整除)、%(取模)13
加减+、-12
位移>>、<<11
按位与&10
按位异或^9
按位或8
比较运算符==、!=、>、>=、<、<=7
is 运算符is、is not6
in 运算符in、not in5
逻辑非not4
逻辑与and3
逻辑或or2
逗号运算符exp1、 exp21

尽管 Python 运算符存在优先级的关系,但如果过度依赖运算符的优先级来编写程序,会导致Python代码的可读性受到影响,因此:

  • 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,可以尝试把它拆分来书写。
  • 不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,应尽量使用( )来控制表达式的执行顺序。
  • Python运算符结合性

所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。

同样举个例子,对于表达式 2 / 6 * 3 * / 在表中的优先级相同,在进行计算时由于两个运算符都具有左结合性,因此我们优先执行左边的除法,再执行右边的乘法,最终结果是 1。

由于Python 中大部分运算符都具有左结合性,也就是从左到右执行;只有 ** 乘方运算符、单目运算符(例如 not 逻辑非运算符)、赋值运算符和三目运算符例外,它们具有右结合性,也就是从右向左执行。因此我们可以简单的记忆具有右结合性的运算符,便可以记忆所有的Python运算符了。

  • 小结

当一个表达式中出现多个运算符时,Python 会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

2. Python算数运算符

我们假设以下变量:a = 10,b = 20,c = 15,d = -15:

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

注意:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。

>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5

3. Python比较运算符

我们同样假设以下变量:a = 10,b = 20:

运算符
描述
实例
==等于:比较对象是否相等(a == b) 返回 False
!=不等于:比较两个对象是否不相等(a != b) 返回 true
<>不等于: 比较两个对象是否不相等。python3 已废弃(a <> b) 返回 true,该运算符类似 !=
>大于: 返回x是否大于y(a > b) 返回 False
<小于: 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价(a < b) 返回 true
>=大于等于: 返回x是否大于等于y(a >= b) 返回 False
<=小于等于: 返回x是否小于等于y(a <= b) 返回 true

4. Python赋值运算符

我们同样假设以下变量:a = 10,b = 20:

运算符
描述
实例
=简单的赋值运算符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

5. Python位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13,二进制格式如下:

a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a  = 1100 0011
a<<2 = 1111 0000
a>>2 = 0000 1111
运算符
描述
实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1(a 丨b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 ,~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式
<<左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

6. Python逻辑运算符

Python语言支持逻辑运算符,以下同样假设变量 a 为 10, b为 20:

运算符
逻辑表达式
描述
实例
andx and y布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值(a and b) 返回 20
orx or y布尔"或" - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值(a or b) 返回 10。
notnot x布尔"非" - 如果 x 为 True,返回 False ,如果 x 为 False,它返回 Truenot(a and b) 返回 False

7. Python成员运算符

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符
描述
实例
in如果在指定的序列中找到值返回 True,否则返回 Falsex 在 y 序列中 , 如果 x 在 y 序列中返回 True
not in如果在指定的序列中没有找到值返回 True,否则返回 Falsex 不在 y 序列中 , 如果 x 不在 y 序列中返回 True

以下实例演示Python成员运算符的所有操作:

#Python成员运算符操作
a = 10
b = 20
list = [1, 2, 3, 4, 5 ]

if ( a in list ):
    print ("1 - 变量a 在给定的列表中list中")
else:
    print ("1 - 变量a 不在给定的列表中list 中") 

if ( b not in list ):
   print ("2 - 变量 b 不在给定的列表中 list 中")
else:
   print ("2 - 变量 b 在给定的列表中 list 中")
 
# 修改变量 a 的值
a = 2
if ( a in list ):
   print ("3 - 变量 a 在给定的列表中 list 中")
else:
   print ("3 - 变量 a 不在给定的列表中 list 中")

上述实例输出结果:

1 - 变量 a 不在给定的列表中 list2 - 变量 b 不在给定的列表中 list3 - 变量 a 在给定的列表中 list

8. Python身份运算符

身份运算符用于比较两个对象的存储单元

运算符
描述
实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y),如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y,类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False

注: id() 函数用于获取对象内存地址
以下实例演示了Python所有身份运算符的操作:

#Python身份运算符操作
a = 20
b = 20
 
if ( a is b ):
   print ("1 - a 和 b 有相同的标识")
else:
   print ("1 - a 和 b 没有相同的标识")
 
if ( a is not b ):
   print ("2 - a 和 b 没有相同的标识")
else:
   print ("2 - a 和 b 有相同的标识")
 
# 修改变量 b 的值
b = 30
if ( a is b ):
   print ("3 - a 和 b 有相同的标识")
else:
   print ("3 - a 和 b 没有相同的标识")
 
if ( a is not b ):
   print ("4 - a 和 b 没有相同的标识")
else:
   print ("4 - a 和 b 有相同的标识")

上述实例输出结果:

1 - a 和 b 有相同的标识
2 - a 和 b 有相同的标识
3 - a 和 b 没有相同的标识
4 - a 和 b 没有相同的标识
  • is 和 == 的区别

is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。

>>> a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矜独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值