python学习笔记(四)、条件、循环及其他语句
1 再谈print和import
1.1 打印多个参数
print 能够同时打印多个表达式,并且能自定义分隔符。如下:
print('a','b','c') ——> a b c
print('a','b','c',sep="_") ——> a_b_c
1.2 import
导入模块时,能够给导入的模块取一个别名(相对于生活中的小名,不管怎么叫,还是你而已),方法是在语句末尾添加 as 子句并指定别名。
import math as foobar
from pi import math as PI
2 赋值
即便是不起眼的赋值语句也蕴含着一些敲门。
2.1 序列解包
python 能够同时(并行)给多个变量赋值。如 x,y,z = 1,2,3 x,y = y,x 。这样的操作我们称之为序列解包(或可迭代对象解包):将一个序列(任何可迭代对象)解包,并将得到的值存储到一系列变量中。值得注意的是,要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则python将引发异常。
如果你想要收集要解包的序列包含的元素多余值,可以使用星号运算符( * )来收集,这样无需确保值和变量的个数相同。如:
a, *b , c = (1, 2, 3, 4) ——> b = [2, 3]
2.2 链式赋值
将多个变量关联到同一个值。如:x = y = fn1()
2.3 增强赋值
可以不编写代码x = x + 1,而将右边表达式中的运算符移到赋值运算符( = )的前面,从而写成 x += 1。这称为增强赋值。适用于所有标准运算符,如+、-、* 、%等。
3 代码块
代码块是一组语句,可在满足条件时执行(if语句),可执行多次(循环),等等。代码块是通过缩进代码(即在前面加空格)来创建的。如:
while True:
....
....
4 条件和条件语句
4.1 这正是布尔值得用武之地
用作布尔表达式时,下面的都将被解释器视为假:
False None 0 "" () '' [] {}
换而言之,标准值False和None、各种类型的数值0、空序列以及空映射都被视为假,其他各种值都被视为真。
布尔值True和False属于类型bool,与list、str、tuple和dict一样,都可以用来转换其他值。如bool("aa") ——> True
4.2 if...else / if...elif...elif...else语句
if 语句能够让你有条件的执行代码。并且if 条件语句中能够通过代码块嵌套if语句。
4.3 更复杂的条件
4.3.1 比较运算符
常见的比较运算符有==、<、> 、!= 等,python中还可以用is、in来比较对象。
x is y x和y是同一个对象时返回True
x is not y x和y不是同一个对象时返回True
x in y x是容器(如序列)y的成员时返回True
x not in y x不是容器(如序列)y的成员时返回True
还能够进行链式标记,如 1 <= number < 20。
4.3.2 布尔运算符
and 、or 和 not。and表示同时满足两个条件才为True; or表示只有有一个条件满足就为True,否则为False; not表示相反。布尔运算符有个有趣的特征:只做必要的技术,也就是常说的短路,即短路逻辑(或延迟求值)。
4.4 断言
关键字 assert ,当条件满足时执行,不满足时程序异常退出,一般用于程序中的检查点。
5 循环
使程序多次执行。
5.1 while循环
while 条件:
......
当满足条件的时候,执行程序块。
5.2 for 循环
for a1 in list1:
......
对可迭代的对象(如序列)进行遍历。
5.3 迭代字典
for key in dict1:
dict1[key]......
5.4 一些迭代工具
5.4.1 并行迭代
有时候你可能想同时迭代两个序列,python提供了一个内置函数 zip ,它将两个序列 “缝合” 起来,并返回一个由元祖组成的序列。如:
list(zip(names,ages)) ——> [(name1,age1),(name2,age2).....]
值得注意的是,zip 比不需要两个序列的长度len相等,zip只取两个序列长度的最小值,即ziplen = min((len(names),len(ages)))。
5.4.2 迭代时获取索引
python 提供了一个内置函数enumerate。能够在迭代的时候获取到序列项的索引值。如:
for index,ages in enumarate(ages):
.......
enumerate函数相当于把序列转为一个dict字典类型。key为index,value为序列对应的值。
5.4.3 方向迭代和排序后再迭代
使用函数:reversed和sorted。
5.5 跳出循环
在编码过程中,有时候只要当满足一定条件才能执行循环、跳出循环等。
5.5.1 break
跳出当前循环。并且能够在循环中添加一条else子句,它表示在没有调用break 时才执行。如:
for age in ages:
if age > 10 :
break
else:
print("ages中年龄全部都小于等于10")
5.5.2 continue
表示结束当前迭代,并跳到下一次迭代开头。即意味着跳过循环体重余下的语句,但不结束循环。
6 简单推导
列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。如:
[x * x for x in range(10)] 表示0~9 的平方列表。
[x * x for x in range(10) if x%2 == 0] 表示0~9中能够被整除2的数的平方列表
[(x,y) for x in range(10) for y in range(10)] 等效于两个for循环,表示x从0~9、y从0~9的笛卡尔积。
7 pass、del、exec、eval
7.1 pass
由于python中代码块不能为空,通常用pass 占位符来表示,代表什么都不用做。
7.2 del
对于你不再使用的对象,python通常对将其删除。del obj 不仅会删除到对象的引用,还会删除名称本事。
7.3 exec
函数exec将字符串作为代码执行。
7.4 eval
函数eval将字符串作为表达式执行并返回结果。
python学习笔记(四)、条件、循环及其他语句的更多相关文章
- python学习笔记2_条件循环和其他语句
一.条件循环和其他语句 1.print和import的更多信息. 1.1.使用逗号输出 //print() 打印多个表达式是可行的,用逗号隔开. 在脚本中,两个print语句想在一行输出 ...
- Python学习笔记五--条件和循环
5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...
- Python学习笔记之条件、循环和其他语句
一.函数导入 1.为模块提供别名 >>> import math as foobar #设置math 别名为foobar >>> foobar.sqrt(4) 显示 ...
- Python学习笔记----数据类型 运算符 循环 条件判断
1. Python安装 在官网www.python.org下载安装程序,可以支持的操作系统linux,windows,mac. Python版本:2.x和3.x,分别有x86和x64. 在Window ...
- python学习笔记四——循环及冒泡排序
3.3.3 break 和 continue语句 break:跳出整个循环 continue:跳出当前循环继续后面的循环 例: x=int(input("please input the ' ...
- python学习笔记(四)---用户输入与while循环
用户输入 函数input demo1: message = input("all you input is chars:") print(message) demo2: 由inpu ...
- python学习笔记(四) 思考和准备
一.zip的坑 zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向 数列首地址,在3.0以下版本返回List类型的列表数列.我用的是3.5版本python, 所以zip ...
- python学习笔记(四):函数
一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...
- python学习笔记(四):生成器、内置函数、json
一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...
随机推荐
- Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2)
A: 思路:就是找b,c之前有多个s[i] 代码: #include<stdio.h>#define ll long longusing namespace std;ll a,b,c;in ...
- Microsoft Azure IoTHub Serials 2 - 如何为android应用添加IoTHub支持
1. 在build.gradle(app)文件的dependencies中添加对以下项的依赖: 'com.microsoft.azure.sdk.iot:iot-device-client:1.5.3 ...
- 【洛谷4172】 [WC2006]水管局长(LCT)
传送门 洛谷 BZOJ Solution 如果不需要动态的话,那就是一个裸的最小生成树上的最大边权对吧. 现在动态了的话,把这个过程反着来,就是加边对吧. 现在问题变成了怎么动态维护加边的最小生成树, ...
- eclipse遇到的问题
引用不了R文件,可能是导包导错了cannot be resolved or is not a field:首先检查你的XML是否保存了,再检查你的import导入的R文件是你包名+R还是android ...
- 遇到ANR问题的处理步骤
遇到ANR问题的处理步骤 问题描述 开发中难免会遇到ANR的问题,遇到ANR问题不要想着是因为设备的卡顿出现的问题,我们无法解决,我们应先找到导致ANR的原因,分析原因之后,再来判断这个问题可不可以解 ...
- 《http权威指南》读书笔记14
概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...
- TX-LCN分布式事务Demo实战
1. TX-LCN分布式事务Demo实战 1.1. 原理介绍 1.1.1. 事务控制原理 TX-LCN由两大模块组成, TxClient.TxManager,TxClient作为模块的依赖框架,提供T ...
- postgresql 日常sql
查看服务进程: select pid,usename,client_addr,client_port from pg_stat_activity; 查看当前数据库实例的版本: select ve ...
- django(2.1) url
函数path() 1参数route:是一个匹配url的准则,这些准则不会匹配get或者post参数或者域名. 2参数view:当django找到了一个匹配准则,就会调用这个特定的视图函数,并传入一个h ...
- 原生Ajax GET+POST请求无刷新实现文本框用户名是否被注册
实现Ajax需要使用一个核心对象XMLHttpRequest XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求 ...