python基础之打/解包及运算符与控制流程
python基础之打/解包及运算符与控制流程
python中的解压缩(即序列类型的打包和解包)
python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如:
data = 2,3,6,9
会使标识符data赋值成元祖(2,3,6,9),这种行为称为元祖的自动打包。在python中另一种常用的打包是从一个函数中返回多个值,如:
return x,y
就会返回单个对象,也就是元祖(x,y)。
作为一个对偶的打包行为,python也可以自动解包一个序列,允许单个标识符的一系列元素赋值给序列中的各个元素,具体如下:
a,b,c = range(1,4) #等同于a=1、b=2、c=3
list1 = ['name','age','gender','height']
s1,s2,s3,s4 = list1 # s1='name',s2='age',s3='gender',s4='height'
s1,_,_,s4 = list1 # 下划线表示不想要的数据,在这里只是用于占位
*_,s4 = list1 #如果有多个不想要的数据可以用*_代替
for k,v in mapping.items() #用于遍历字典的items()方法返回的键值对
自动打包与解包结合起来就是同时分配技术,即我们可以显式地将一系列的值赋给一系列的标识符,语法为:
x,y,z = 3,4,6
x,y = y,x #依赖于同时分配技术,省去了中间值
格式化输出的三种方式
长话短说,在python发展的过程中,出现了以下几种格式化输出:
name = 'DU'
age = 18
print("姓名:%s,年龄:%s" % (name, age)) #最开始的版本
print("姓名:{},年龄:{}".format(name, age)) #升级后的
print("姓名:{0},年龄:{1}".format(name, age)) #{}内是索引
print(f"姓名:{name},年龄:{age}") #以‘f'或’F'开头,直接在字符串内操作,推荐使用!
运算符和优先级
算术运算符:
+ 加 - 减 * 乘 / 除 // 整数除 % 模 ** 幂 比较运算符:
== 等价 != 不等价 < 小于 > 大于 <= 小于等于 >= 大于等于 逻辑运算符:
not 逻辑非 and 逻辑与 or 逻辑或 相等运算符:
is 同一实体 is not 不同实体 整数的位运算符:
~ 取反 & 按位与 | 按位或 ^ 按位异或 >> 右位移,按符号位填充 << 左位移,用零填充 序列运算符:
s[j] 索引下标为j的元素 s[start:stop] 切片,[start,stop)的序列 s[start:stop:step] 切片,start+step,start+2*step...直到结束 s+t 序列的连接 k*s s+s+s+s+....(k次) val in s 检查元素val在序列s中 val not in s 检查元素val不在序列s中 集合字典的运算符:
key in s 检查key是s的成员 key not in s 检查key不是s的成员 s1 == s2 s1等价s2 s1 != s2 s1不等价s2 s1 <= s2 s1是s2的子集 s1 < s2 s1是s2的真子集 s1 >= s2 s1是s2的超集 s1 > s2 s1是s2的真超集(s1不等于s2) s1 | s2 s1与s2的并集 s1 & s2 s1与s2的交集 s1 - s2 s1与s2的差集 s1 ^ s2 对称差分
运算符优先级:
| 类型 | 符号 | |
|---|---|---|
| 成员访问 | expr.member | |
| 函数/方法调用 | expr(...) | |
| 容器下标/切片 | expr[...] | |
| 幂 | ** | |
| 一元运算符 | + expr, - expr,~expr | |
| 乘/除 | *,/,//,% | |
| 加/减 | +,- | |
| 按位位移 | <<,>> | |
| 按位与 | & | |
| 按位异或 | ^ | |
| 按位或 | | | |
| 比较 | is,is not,==,!=,in,not in等 | |
| 逻辑非 | not | |
| 逻辑与 | and | |
| 逻辑或 | or | |
| 条件判断 | val if cond else val2 | |
| 赋值 | =,+=,-=,*=等 |
控制流程
条件语句:
条件结构(也称if语句)提供了一种方法,用以执行基于一个或多个布尔表达式的运行结果而选择的代码块。在python中,条件语句一般形式如下:
if first_condition:
first_body
elif second_condition:
second_body
elif third_condition:
third_body
.
.
.
else :
else_body
其中每个条件都是布尔表达式,并且每个主体包含一个或多个在满足条件时才执行的命令。如果满足第一个条件,那么将执行第一个结构体,而其他条件或者结构体不会执行。如果不满足第一个条件,那么就这个流程就以相似的方式评估第二个条件,并继续。整体构造的执行将决定必有一个结构体会被执行。
循环语句
python提供了两种不同的循环结构。while循环允许以布尔条件的重复测试作为自出的一般重复。for循环对定义序列的值提供了适当的迭代(如字符串中的字符、列表中的元素或一定范围内的数字)。
while 循环
在python中的while循环的语法如下:
while condition:
body
执行while循环时首先测试布尔条件。如果条件为True,执行循环的主体。每次执行结构体后,重新测试循环条件,如果为True,那么开始另一轮迭代。如果条件为False,那么就终止循环。
例子:
j=0
while j < len(data) and data[j] != 'X':
j += 1
这里给出一个循环,通过字符序列的索引,找到一个输入值为‘X’的值或直接到达序列的尾部。
for 循环
在迭代一系列的元素时,python的for循环时一种比while更便利的选择。for循环的语法可以用在任何类型的迭代结构中,如列表、元组、str、集合、字典或文件。一般语法如下:
for element in iterable:
body
例如,我们考虑寻找一个列表的元素中寻找最大值(不使用max函数),假设列表中至少有一个元素:
biggest = data[0]
for val in data:
if val > biggest:
biggest = val
虽然我们也可以用while循环来完成上面任务,但for循环的优点就是简洁,即不需要管理列表的明确索引以及构造布尔循环条件。此外,我们还可以在while循环不适用的情况下使用for循环,例如遍历一个集合set,但是它不支持任何形式的索引。
基于索引的for循环:
虽然for循环可以遍历每一个元素,但是有一个限制就是我们不知道这个元素在序列的哪一个位置,所以我们需要用到range()来遍历索引,比如我们想知道列表中最大元素的索引,我们可以这样:
big_index = 0
for i in range(len(data)):
if data[i] > data[big_index]:
big_index = i
break 和 continue 语句
break
在python中,当在循环体内执行break语句,while或for循环就会立即终止。如果在嵌套结构中使用break语句,它会导致内层循环立即终止。例如判断一个目标值是否出现在数据集中:
found = False
for i in data:
if i == target:
found = True
break
continue
continue语句会使循环体的当前迭代停止,但循环过程的后续迭代会正常运行。
我们建议慎用break和continue语句,然而有些情况下,可以有效的使用这些命令,以免引入过于复杂的逻辑条件。
扩展
与if相似的,while和for中也可以引用else语句,else语句只会在正常循环结束之后才会执行,如果遇到break,则不会执行else,这个知识点仅作了解,一般开发过程中不会用到。
祝大家越来越棒!
python基础之打/解包及运算符与控制流程的更多相关文章
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- 第三节:带你详解Java的操作符,控制流程以及数组
前言 大家好,给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. 这里的操作算法,一 ...
- Python基础二. 数据结构、控制流、运算符、真值测试
一.概述 数据结构上广义上有两种,单一类型和集合类型 单一类型,表示一种对象 集合类型,表示包含多种对象 Python 中的内建的数据类型有str.list.tuple.dict.set.number ...
- Python特色的序列解包、链式赋值、链式比较
一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...
- 第4.7节 Python特色的序列解包、链式赋值、链式比较
一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...
- Python基础学习笔记(三)运算符
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://w ...
- 2.Python基础认识(格式化输出,while语句,运算符,编码,单位转化)
Python基础认识 1.字符串的格式化初识及占位符的简单应用 字符串的格式化 按照既定的要求进行有规定排版的一种输出方式. #我们想要输出的格式如下: ----------------------- ...
- python基础(5):格式化输出、基本运算符、编码问题
1. 格式化输出 现在有以下需求,让⽤户输入name, age, job,hobby 然后输出如下所⽰: ------------ info of Alex Li ----------- Name : ...
随机推荐
- MSCHART控件中长字符的X轴坐标标注全部显示
X轴坐标如果超过9位的话,就不能完全显示了,就会一个隔一个的显示,解决的办法: Chart1.ChartAreas[].AxisX.Interval = ; //设置X轴坐标的间隔为1 Chart1. ...
- BUAA_OO_2020_Unit3_总结博客
BUAA_OO_2020_Unit3_总结 2020年春季学期第十三周,OO第三单元落下帷幕,对这个单元的内容JML有了更深的理解,但也有了一些疑惑,下做总结: 一.JML语言以及工具链 经过课上JM ...
- Web api配置填坑攻略
最近开始使用web api,开发调试过程还算顺利,现在项目已经发布,网站已经部署,结果浏览过程出现问题(不出问题好像不正常吧……),做个note开始填坑. 1.1号坑 咋一开始就爆出另一个程序正在使用 ...
- Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】
一:讲故事 看完官方文档,阅读了一些 Newtonsoft 源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~ 二:特性分析 1. 代码格式化 如 ...
- Python Selenium百度搜索翻页查找文字
#!/usr/bin/python # -*- coding: utf- -*- from selenium import webdriver import time # browser = webd ...
- docker已运行容器里的时区修改
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或者 cp /usr/share/zoneinfo/Asia/Shanghai ...
- Accelerate Framework in Swift
介绍: 最近看到这篇文章有对Accelerate框架有一个介绍,自己也按照作者给的思路整理了一遍,也算是对这一框架的一个重新的回顾和学习,在以前研究AR先关只是的时候有接触到这个框架,赞具体里面的东西 ...
- 向强大的SVG迈进
作者:凹凸曼 - 暖暖 SVG 即 Scalable Vector Graphics 可缩放矢量图形,使用XML格式定义图形. 一.SVG印象 SVG 的应用十分广泛,得益于 SVG 强大的各种特性. ...
- Tensorflow入门学习笔记汇总
一.环境准备 1.安装python:下载地址https://www.python.org/downloads/windows/下载并安装(推荐python3) 2.安装对应python版本的库:htt ...
- Web安全之验证码绕过
一,验证码绕过(on client) 首先让burpsuite处于抓包状态,打开pikachu的验证码绕过(on client)随意输入账号和密码,验证码先不输入,点击login,会提示验证码错误 然 ...