Python基础之运算符、控制语句
1、Python解释器
1.1、CPython
官方,C语言开发,最广泛的Python解释器
1.2、IPython
一个交互式、功能增强的CPython
1.3、PyPy
Python语言写的Python解释器,JIT技术,动态编译Python代码
1.4、Jython
Python的源代码编译成Java的字节码,跑在JVM上
1.5、IronPython
与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码
1.6、stackless
Python的增强版本解释器,不使用CPython的C的栈,采用微线程概念编程,并发编程
2、基础语法
2.1、注释
# 井号标注的文本
2.2、数字
2.2.1、整数int
Python3开始不再区分long、int,long被重命名为int,所以只有int类型了
进制表示:
十进制 10
十六进制 0x10
八进制 0o10
二进制 0b10
bool类型,有2个值True、False
2.2.2、浮点数float
1.2、3.1415、-0.12,1.46e9等价于科学计数法1.46*109
本质上使用了C语言的double类型
2.2.3、复数complex
1+2j或1+2J
2.3、字符串
2.3.1、语法
使用 ' " 单双引号引用的字符的序列 '''和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号 r前缀:在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理 f前缀:3.6版本开始,新增f前缀,格式化字符串
2.3.2、字符串拼接
str(1) + ',' + 'b' # 都转换成字符串拼接到一起 "{}-{}".format(1, 'a') # {}就是填的空,有2个,就使用2个值填充 # 在3.6后,可以使用插值 a = 100; b = 'abc' f'{a}-{b}' # 一定要使用f前缀,在大括号中使用变量名
2.4、转义序列
\\ \t \r \n \' \" 上面每一个转义字符只代表一个字符,例如 \t 显示时占了4个字符位置,但是它是一个字符 前缀r,把里面的所有字符当普通字符对待,则转义字符就不转义了。 转义:让字符不再是它当前的意义,例如\t,t就不是当前意义字符t了,而是被\转成了tab键
2.5、缩进
未使用C等语言的花括号,而是采用缩进的方式表示层次关系
约定使用4个空格缩进
2.6、续行
在行尾使用 \,注意\之后除了紧跟着换行之外不能有其他字符
如果使用各种括号,认为括号内是一个整体,其内部跨行不用 \
2.7、标识符
每一个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,程序员就可以通过其对应的标识符来访问数据,标识符就是一个指代。一句话,标识符是给程序员编程使用的。
2.7.1、标识符
1. 一个名字,用来指代一个值 2. 只能是字母、下划线和数字 3. 只能以字母或下划线开头 4. 不能是python的关键字,例如def、class就不能作为标识符 5. Python是大小写敏感的 6、标识符约定: 不允许使用中文,也不建议使用拼音 不要使用歧义单词,例如class_ 在python中不要随便使用下划线开头的标识符
2.7.2、常量
一旦赋值就不能改变值的标识符
python中无法定义常量
2.7.3、字面常量
一个单独的不可变量,例如 12、"abc" 、'2341356514.03e-9'
2.7.4、变量
赋值后,可以改变值的标识符
2.8、语言类型
2.8.1、类型图
Python是动态语言、强类型语言。
2.8.2、静态语言
事先声明变量类型,之后变量的值可以改变,但值的类型不能再改变编译时检查
2.8.3、动态语言
不用事先声明类型,随时可以赋值为其他类型
编程时不知道是什么类型,很难推断
2.8.4、强类型语言
不同类型之间操作,必须先强制类型转换为同一类型。 print('a'+1)
2.8.5、弱类型语言
不同类型间可以操作,自动隐式转换,JavaScript中 console.log(1+'a') 注意:强与弱只是一个相对概念,即使是强类型语言也支持隐式类型转换。
2.9、False等价
False等价布尔值,相当于bool(value)
空容器
空集合set
空字典dict
空列表list
空元组tuple
空字符串
None
0
2.10、逻辑运算真值表
2.11、运算符Operator
2.11.1、算数运算符
+、-、*、/、//向下取整整除、%取模、**幂
注:在Python2中/和//都是整除。
2.11.2、位运算符
&位与、|位或、^异或、<<左移、>>右移
~按位取反,包括符号位
2.11.3、比较运算符
==、!=、>、>=、<、<= 链式比较: 4 > 3 > 2 比较运算符,返回一个bool值 思考:1 == '1' 吗? 1 > '1' 吗?
2.11.4、逻辑运算符
与and、或or、非not 逻辑运算符也是短路运算符 and 如果前面的表达式等价为False,后面就没有必要计算了,这个逻辑表达式最终一定等价为False 1 and '2' and 0 0 and 'abc' and 1 or 如果前面的表达式等价为True,后面没有必要计算了,这个逻辑表达式最终一定等价为True 1 or False or None 特别注意,返回值。返回值不一定是bool型 把最频繁使用的,做最少计算就可以知道结果的条件放到前面,如果它能短路,将大大减少计算量
2.11.5、赋值运算符
a = min(3, 5) +=、 -= 、*=、/=、%=、//= 等 x = y = z = 10 赋值语句先计算等式右边,然后再赋值给变量
2.11.6、成员运算符
in、not in,用来判断是否是容器的元素,返回布尔值
2.11.7、身份运算符
is 、is not,用来判断是否是同一个对象
2.12、运算符优先级
单目运算符 > 双目运算符 算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符 -3 + 2 > 5 and 'a' > 'b' 搞不清楚就使用括号。长表达式,多用括号,易懂、易读
2.13、表达式
由数字、符号、括号、变量等的组合。有算数表达式、逻辑表达式、赋值表达式、lambda表达式等等。
Python中,赋值即定义。Python是动态语言,只有赋值才会创建一个变量,并决定了变量的类型和值。
如果一个变量已经定义,赋值相当于重新定义。
3、内置函数
3.1、介绍
内建函数 函数签名 说明 print print(value, ..., sep=' ',end='\n') 将多个数据输出到控制台,默认使用空格分隔、\n换行 input input([prompt]) 在控制台和用户交互,接收用户输入,并返回字符串 int int(value) 将给定的值,转换成整数。int本质是类 str str(value) 将给定的值,转换成字符串。str本质是类 type type(value) 返回对象的类型。本质是元类 isinstance isinstance(obj,class_or_tuple) 比较对象的类型,类型可以是obj的基类
3.2、实践
print(1,2,3,sep='\n', end='***') type(1) # 返回的是类型,不是字符串 type('abc') # 返回的是类型,不是字符串 type(int) # 返回type,意思是这个int类型由type构造出来 type(str) # 返回type,也是类型 type(type) # 也是type print(isinstance(1, int)) print(isinstance(False, int)) # True
4、程序控制
4.1、简介
顺序
按照先后顺序一条条执行
例如,先洗手,再吃饭,再洗碗
分支
根据不同的情况判断,条件满足执行某条件下的语句
例如,先洗手,如果饭没有做好,玩游戏;如果饭做好了,就吃饭;如果饭都没有做,叫外卖
循环
条件满足就反复执行,不满足就不执行或不再执行
例如,先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭好
了,才可是吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有
4.2、单分支-if
4.2.1、语法
if condition: 代码块 if 1<2: # if True: print('1 less than 2') # 代码块
4.2.2、说明
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价 if 语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
if、for、def、class等关键字后面都可以跟代码块 这些关键后面,如果有一条语句,也可以跟在这一行后面。例如 if 1>2: pass
4.3、多分支-if-elif-else
4.3.1、语法
if condition1: 代码块1 elif condition2: 代码块2 elif condition3: 代码块3 ...... else: 代码块
4.3.2、示例
a = 5 if a<0: print('negative') elif a==0: print('zero') else: # 相当于 a > 0 print('positive') 多分支结构,只要有一个分支被执行,其他分支都不会被执行 前一个条件被测试过,下一个条件相当于隐含着这个条件
4.3.3、嵌套分支
a = 5 if a == 0: print('zero') else: if a > 0: print('positive') else: print('negative')
4.4、while-循环
while循环多用于死循环,或者不明确知道循环次数的场景
4.4.1、语法
while cond: block while True: # 死循环 pass a = 10 while a: # 条件满足则进入循环 print(a) a -= 1
4.5、for-语句
4.5.1、语法
for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体 block for i in range(0, 10): print(i)
4.5.2、range作用
内建函数 函数签名 说明
range range(stop) range(start, stop[,step])
返回惰性的对象
可以生成一个序列,遍历它就可以得到这个序列的一个个元素
前包后不包
4.5.3、range示例
# 计数器 for i in range(0):# 不会运行 print(i) print('---------') for i in range(-2):# 不会运行 print(i) print('---------') for i in range(1): # 打印0 print(i)
4.5.4、range-实践
# 打印偶数 for i in range(0, 10): if i % 2 == 0 : print(i) for i in range(0, 10, 2): print(i) # 打印奇数 for i in range(0, 10): if i % 2 != 0 : print(i) for i in range(1, 10, 2): print(i) # 倒着打印 for i in range(8, -1 , -2): print(i)
4.6、continue与break
4.6.1、continue
跳过当前循环的当次循环,继续下一次循环
for i in range(0, 10): if i % 2 != 0 : continue print(i) for i in range(10): if i % 2 != 0 : continue print(i) for i in range(10): if i & 1: continue print(i)
4.6.2、break
结束当前循环
# 练习:计算1000以内的,从7开始,被7整除的前15个正整数(for循环) # 计算1000以内的被7整除的前15个正整数 count=0 for i in range(7,1000,7): print(i) count+=1 if count>=15: print(count) break
4.6.3、总结
continue和break是循环的控制语句,只影响当前循环,包括while、for循环 如果循环嵌套, continue和break也只影响语句所在的那一层循环 continue和break 只影响循环,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环 分支和循环结构可以嵌套使用,可以嵌套多层。
4.7、for-else子句
4.7.1、作用
如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代
4.7.2、示例
for i in range(0): # 打印ok pass else: print('ok') for i in range(0,10): # else没有运行 break else: print('ok') for i in range(0,10): # 打印ok continue else: print('ok') # 一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。哪怕是range(0)也可以执行else子句。
4.8、三元表达式
4.8.1、语法
真值表达式 if 条件表达式 else 假值表达式 # 在Python中,也有类似C语言的三目运算符构成的表达式,但python中的三元表达式不支持复杂的语句
4.8.2、示例
# 判断用户的输入的值,如果为空,输出"empty",否则输出该值 value=input('>>>') if value: print(value) else: print('empty') value=input('>>>') print(value) if value else print('empty')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!