Python学习记录4(语句)
赋值语句
赋值语句用赋值运算符=
来实现。赋值语句有一些特殊的使用技巧。
序列解包
多个赋值操作可以同时进行。也可以交换两个或者多个变量。事实上,这里所做的事情叫做序列解包或者叫递归解包——将多个值的序列揭开,然后放到变量的序列中。popitem方法将键-值作为元组放回。
>>> scoundrel={'name':'Robin','girlfriend':'Marioon'}
>>> key,value=scoundrel.popitem()
>>> key
'name'
>>> value
'Robin'
Python还可以链式赋值。也可以进行增量赋值。
条件语句
语句块
语句块并不是一种语法。语句块适当条件为真时执行或执行多次的一组语句。在代码前放置空格来缩进语句即可创建语句块。块中的每行都要缩进形同的量。在Python中,冒号用来表示语句块的开始,块中的每个语句都是缩进的(缩进的量相同)。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束。
布尔变量
下面的值在作为布尔表达式的时候,会被编译器看作是假(false):
False
、None
、0
、""
、()
、[]
、{}
除去上面的表达式之外的其他表达式在作为布尔表达式的时候都为真。bool函数可以用来转换其他值为布尔值。
条件执行和if语句
一个例子if-else
name=raw_input('What is your name ?')
if name.endswith('Gumy'):
print('Hello,Mr.Gumy!')
else:
print('Hello,stranger!')
语句elif
elif是else-if的缩写。如下例:
num=raw_input('Enter a number:')
if num>0:
print('This is a positive number.')
elif num==0:
print('This number is zero.')
else:
print('This is a negative numeber.')
嵌套
name=raw_input('what is your name?')
if name.endswith('Gumy'):
if name.startswith('Mr.'):
print('Hello,Mr.Gumy')
elif name.startwith('Mrs.'):
print('Hello,Mrs.GGumy')
else:
print('Hello,Gumy')
else:
print('Hello,stranger')
条件运算符
- 比较运算符
表达式 | 描述 |
---|---|
x==y | x等于y |
x | x小于y |
x<=y | x小于或等于y |
x>y | x大于y |
x>=y | x大于或等于y |
x!=y | x不等于y |
x is y | x和y是同一个对象 |
x is not y | x和y不是同一个对象 |
x in y | x是y容器(序列、字典)的成员 |
x not in y | x不是y容器的成员 |
分析:==
和is
是两个不同的运算,==
用来判断两个表达式的值是否相等,而is
用来判断两个表达式是否是同一个对象(相同的内存)。如下例:
>>> x=[1,2,3]
>>> y=[2,1]
>>> x==y
False
>>> del x[2]
>>> y.reverse()
>>> x==y
True
>>> x is y
False
字符串和序列也可以比较,他们是按照字母顺序排列进行比较(一个字母的顺序值可以用ord函数查到,ord函数和chr函数的功能相反)。如:
>>> 'alpha'<'beta'
True
其他的序列也可以用同样的方式比较,不过比较的不是字符而是其他类型的元素。如果一个序列中包含其他序列元素,比较规则也同样适用于序列元素。
>>> [1,2]<[2,1]
True
>>> [1,2]>[1,3]
False
>>> [1,[2,[3,4]]]>[2,1]
False
布尔运算符
所有的返回值都可以看作是布尔值,所有表达式也都返回布尔值。
and
运算符就是所谓的布尔运算符。它连接两个布尔值,并且只有当两个布尔值都为真时,表达式才为真。另外两个布尔运算符是or
和not
。or
表示或者,当两边值都为假是才为假。not
表示非,表示取与运算表达式真值相反的值。布尔运算符有一个有趣的特性:只有在需要求值是才进行求值。
x or y
当x为真时返回x的值,否则返回y的值。x and y
当x为假时返回x的值,否则返回y的值。上面这种运算方式被称为逻辑短路(short-circuit logic)或惰性求值(lazy evaluation)。
一个重要的表达
a if b else c
如果b为真,就返回a,否则返回c.
循环
while语句
while语句非常灵活,它可以用来在任何条件为真的情况下反复执行一个代码块。
sum=0
x=1
while x<=100:
sum=sum+x
x+=1
print(sum)
for循环
有时候要求按照一定次数迭代,这个时候要用for来实现。(当然,利用while也是可以做到的。)如果能用for循环,就尽量不用while循环,这是因为for循环的语法更简洁。
words=['this','is','an','ex','parrot']
for word in words:
print(word)
for number in range(1,101):
print(number)
d={'x':1,'y':2,'z':3}
for key in d:
print(key,'corresponds to',d[key])
字典中项的顺序是不确定的,在字典循环的时候,可以保证所有的项都可以被循环,但是循环的顺序确实不确定的。上面的例子就说明了这点。
迭代工具
python中有很多很好的用于序列迭代的函数,这些函数位于itertool模块中。
并行迭代
程序可以同时迭代两个序列。这可以通过程序来实现,也可以直接利用zip函数来实现。如下:
names=['anne','betah','aymi','cocoa']
ages=[12,23,34,45]
aaa=zip(names,ages)
for name,age in aaa:
print(name,'is',age,'Years sld')
按索引迭代
enumerate函数可以在提供索引的地方迭代索引-值对。
for index,string in enumerate(strings): if 'XXX' in string: strings[index]='[censored]'
翻转和排序迭代
reversed和sorted函数作用在任何序列或可迭代对象上,不是原地的修改对象,而是返回翻转或排序后的版本。
>>> sorted([4,3,6,8,9]) [3, 4, 6, 8, 9] >>> sorted('Hello,world!') ['!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w'] >>> list(reversed('Hello,world!')) ['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H'] >>> ''.join(reversed('Hello,world!')) '!dlrow,olleH'
跳出循环
一般来说,循环会一直执行到条件为假,或者序列元素用完时。但是有时候可能会需要中断一个循环,进行新的迭代,这个时候就需要跳出循环。
break
break用来跳出循环,执行循环后面的语句。
from math import sqrt
for n in range(99,0,-1):
root=sqrt(n)
if root==int(root):
print(n)
break
continue
continue用来结束当前迭代,进行下一步迭代。他的意思是:跳出剩余的循环体,但是不结束循环。
for x in seq:
if not(condition1 or condition2 or condition3):
do_something()
do_something_else()
do_another_thing()
etc()xxxxxxxxxx
while true/break语句
while True:
word=input('Please enter a word:')
if not word:break
print('The word was:',word)
while true部分实现了一个永远不会停止的循环,但是在内部if语句的条件成立的时候会停止。
循环中的else子句
from math import sqrt
for n in range(99,81,-1):
root=sqrt(n)
if root==int(root):
print(n)
break
else:
print('I didn\'t find it.')
for、while循环中都可以使用continue、if、else、break语句。
轻量级循环——列表推到
列表推倒式是利用其他列表创建新列表的一种方式。它的工作原理类似与for循环。
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
>>> girls=['alice','berce','bob']
>>> boys=['chrits','arnold','clarice']
>>> [b+'+'+g for b in boys for g in girls if b[0]==g[0]]
['arnold+alice']
pass、del、exec
- pass程序什么都不用做,而让程序通过。
- del不仅移除一个对象的引用,也会移除对象本身。 注意,这里删除的是名称,而不是内存。所以,当有两个或者以上的名称指向同一块内存时,删除其中一个或者几个名称,并不会删除内存(值)本身。
>>> x=1
>>> del x
>>> x
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'x' is not defined
>>> x='hello,world!'
>>> y=x
>>> x
'hello,world!'
>>> del x
>>> y
'hello,world!'
小结
- 打印 print语句打印多个表达式时可以分别用逗号隔开。
- 导入 有些时候可以利用
import...as...
来进行函数的局部重命名。 - 赋值 通过序列解包和链式赋值功能,多个变量值可以一次性赋值,通过增量赋值可以原地改变变量。
- 块 块是通过缩排使语句成组的一种方法。它可以在条件或者循环语句中使用。块也可以在函数或者类中使用。
- 条件 条件语句可以通过判断条件的真假来决定一个语句到底是执行还是不执行。几个条件语句可以串联使用,也可以嵌套使用。还有一个条件表达式
a if b else c
. - 断言 断言就是肯定事物为真。
- 循环 在条件为真的时候不断的执行某一语句块。可以配合continue、break、if、else等语句使用。
- 列表推倒式 它不是真正的语句,而是看起来像for循环的表达式。通过列表推导式可以通过已知的列表产生新列表。
Python学习记录4(语句)的更多相关文章
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- 实验楼Python学习记录_挑战字符串操作
自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...
- 我的Python学习记录
Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...
- Python学习(3)——if语句
虽然在之前接触过C.C++.Java等,但是还是觉得Python写出来的好看o(≧v≦)o~,简洁明了! score = raw_input("score:") score=int ...
- python学习之条件语句(if循环)
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块.可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为tru ...
- python 学习笔记 if语句
一.if语句的格式 语句块必须有相同的缩进. 语句块必须比if,elif,else多一层缩进 # 如果条件成立则执行语句块1, # 否则 如果条件2成立则执行语句块2 # 其他情况执行语句块3 # e ...
随机推荐
- 图像像素灰度内插(Matlab实现)
常用的像素灰度内插法:最近邻元法.双线性内插法.三次内插法 %%像素灰度内插 factor = 0.75;%缩放比 u = 0.6;v = 0.7; itp1 = uint8(zeros(ceil(h ...
- scikit-learn使用fetch_mldata无法下载MNIST数据集的问题
scikit-learn使用fetch_mldata无法下载MNIST数据集的问题 0. 写在前面 参考书 <Python数据科学手册> 工具 python3.5.1,Jupyter La ...
- 使用Zeppelin时出现at org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService$Client.recv_getFormType(RemoteInterpreterService.java:288)错误的解决办法(图文详解)
不多说,直接上干货! 问题详解 org.apache.thrift.TApplicationException: Internal error processing getFormType at or ...
- 打war包时无法把src/main/java里的xml文件打包上去
maven打包默认打src/mian/resource里面的xml,而不会去src/main/java,所以 再pom.xml里的bulid节点里加上 <resources> <re ...
- 小G的城堡
B 小 G 的城堡文件名 输入文件 输出文件 时间限制 空间限制castle.pas/c/cpp castle.in castle.out 1s 128MB题目描述小 G 家有一座城堡.城堡里面有 n ...
- P3818 小A和uim之大逃离 II
题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...
- JsonModel&AFNetWorking
// HttpManager.h // JsonModel&AFNetWorking // // Created by qianfeng on 15/7/21. // Copyright (c ...
- 192.168.28.168:3000打开网页无法调试localhost为前缀的接口
最近我在IIS上发布.net Core API的时候发现 当我用localhost去打开我的web项目时 并且,ajax调用的接口前缀为localhost时候,运行正确 但是当我用192.168.28 ...
- 9、调整数组顺序使奇数位于偶数前面------------>剑指offer系列
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 思路 首先寻找第一个 ...
- All boundaries are conventions, waiting to be transcended.
All boundaries are conventions, waiting to be transcended.所有界限都是陈规,等着被打破.