前面已经介绍过几种基本语句(print,import,赋值语句),下面我们来介绍条件语句,循环语句。

一. print和import的更多信息

1.1 使用逗号输出

A.打印多个表达式,用逗号隔开,会在每个参数之间插入一个空格符:

  1. >>> print 'age:',42
  2. age: 42

B.同时输出文本和变量值,却又不希望使用字符串格式化:

  1. >>> name = 'Peter'
  2. >>> greeting = 'Hello'
  3. >>> print greeting,',',name
  4. Hello , Peter

上面的例子中会在逗号前加入一个空格,我们可以这样优化:

  1. >>> print greeting + ',',name
  2. Hello, Peter

注意,如果在结尾处加上逗号,那么接下来的语句会与前一句在同一行打印:

  1. >>> print 'Hello,',
  2. print 'world'
  3.  
  4. Hello,world

1.2 把某件事作为另一件事导入

从模块导入函数时,可以使用:

整个模块导入:import somemodule

导入其中一个函数:from somemodule import somefunction

导入其中几个函数:from somemodule import somefunction,anotherfunction,yetanotherfunction

导入全部函数:from somemodule import *

如果某2个模块都有相同名字的函数,比如叫open函数,那么可以这样给函数或者模块提供别名:

  1. >>> import math
  2. >>> import math as foobar
  3. >>> foobar.sqrt(4)
  4. 2.0
  5. >>> from math import sqrt as foobar2
  6. >>> foobar2(4)
  7. 2.0

二. 赋值魔法

就算是不起眼的赋值语句也有一些特殊的技巧。

2.1 序列解包

序列解包就是将多个值的序列解开,然后放到变量的序列中。

  1. >>> #'多个赋值操作同时进行'
  2. >>> x,y,z = 1,2,3
  3. >>> print x,y,z
  4. 1 2 3
  5. >>> #'交换2个或多个变量'
  6. >>> x,y = y,x
  7. >>> print x,y
  8. 2 1
  9. >>> #'当函数或方法返回元组时'
  10. >>> s = {'a':1,'b':2,'c':3}
  11. >>> key,value = s.popitem()
  12. >>> print key,value
  13. a 1

最后一个例子可以看出,它允许函数返回一个以上的值并打包成元组,然后通过一个复制语句很容易进行访问。

注意:解包的序列中元素数量必须和放置在赋值符合=左边的变量数量完全一致,否则会引发异常。

2.2 链式赋值

链式赋值是将同一个值赋给多个变量的捷径。

  1. >>> x = y = 'sss'

2.3 增量赋值

增量赋值可以让代码更紧凑简练。

对于+,-,*,/,%等标准运算符都适用:

  1. >>> x = 2
  2. >>> x += 1
  3. >>> x *= 2
  4. >>> x
  5. 6
  6. >>> #对其他数据类型也适用
  7. >>> f = 'foo'
  8. >>> f += 'bar'
  9. >>> f
  10. 'foobar'

三. 语句块:缩排的乐趣

语句块是条件为真时执行一次或多次的一组语句。在python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束了。

四. 条件和条件语句

4.1 这就是布尔变量的作用

下面的值在作为布尔表达式的时候,会被解释器看作假(False):

False None 0 “” () [] {}

其他的一切值都被解释为真,包括特殊值True。

4.2 条件执行和if语句

如果条件判断为真,那么后面的语句块就会被执行,也可以加入elif进行多个条件检查。作为if的一部分,还有else子句。

当然,我们可以在if语句里面嵌套使用if语句。

  1. num = input ('enter a number? ')
  2. if num > 0:
  3. if num > 50:
  4. print"num > 50"
  5. elif num > 10:
  6. print "num > 10"
  7. else:
  8. print "num > 0"
  9. else:
  10. print "num <= 0"

4.3 更复杂的条件

下面我们回到条件本身,因为它们才是条件执行真正有趣的部分。

4.3.1. 比较运算符

x == y;     x < y;     x > y;      x >= y;      x <= y;

x != y;      x is y;     x is not y;   x in y;     x not in y;

4.3.2.  is:同一性运算符

  1. >>> x = y = [1,2,3]
  2. >>> z = [1,2,3]
  3. >>> x is y
  4. True
  5. >>> x is z
  6. False
  7. >>> x == z
  8. True

由此看出,使用==运算符来判定两个对象是否相等,使用is判定两者是否同一个对象。

4.3.3. in:成员资格运算符

  1. name = raw_input("what is your name?")
  2. if 's' in name:
  3. print 'your name contains the letter s'
  4. else:
  5. print 'your name does not contain the letter s'

4.3.4.字符串和序列比较

字符串可以按照字符顺序排列进行比较。

  1. >>> 'alpha' < 'beta'
  2. True

字符是按照本身的顺序值排列的,一个字母的顺序值可以用ord函数查到。

其他的序列也可以用同样的方式进行比较,不过比较的是元素的其他类型。

  1. >>> [1,2] > [2,1]
  2. False
  3. >>> [1,[2,3]] < [1,[3,2]]
  4. True

4.3.5. 布尔运算符

and运算符是所谓的布尔运算符,它连接2个布尔值,并且在两者都为真时返回真,否则返回假。与它同类的还有2个运算符,or和not。

  1. number = raw_input("enter a number?")
  2. if number <=10 and number >= 1:
  3. print "great!"

4.3.6. 断言

if语句有个近亲,工作方式类似于:

if not condition:

crash program

这是因为与其让程序在晚些时候崩溃,不如在错误条件出现时直接让它崩溃。语句中使用的关键字是assert。它确保程序中的某个条件为真时才能让程序正常工作。

  1. >>> age = -1
  2. >>> assert 0 < age < 100
  3. Traceback (most recent call last):
  4. File "<pyshell#52>", line 1, in <module>
  5. assert 0 < age < 100
  6. AssertionError

 五. 循环

 5.1 while循环

while语句非常灵活,可以在任何条件为真的情况下重复执行一个代码块。

  1. name = ''
  2. while not name:
  3. name = raw_input('please enter your name: ')
  4. print 'hello,%s!' % name

 5.2 for循环

当要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块时,我们就需要for循环了。

5.2.1.循环遍历字典元素

一个简单的for语句就能循环字典的所有键,就像处理序列一样:

  1. d = {'x':1,'y':2,'z':3}
  2. for key in d:
  3. print key,'corrensponds to ',d[key]

5.2.2.一些迭代工具

A.并行迭代

  1. names = ['a','b','c','d']
  2. ages = [12,23,45,32]
  3. #循环索引迭代
  4. for i in range(len(names)):
  5. print names[i],'is',ages[i],'years old.'
  6.  
  7. #内建zip函数迭代
  8. for name,age in zip(names,ages):
  9. print name,'is',age,'years old.'

B.编号迭代

有时候迭代序列中的对象时,同时要获取当前对象的索引。

  1. #index计数
  2. index = 0
  3. for string in strings:
  4. if 'xxx' in string:
  5. string[index] = 'sss'
  6. index += 1
  7.  
  8. #内建enumerate函数迭代
  9. for index,string in enumeratestrings):
  10. if 'xxx' in string:
  11. string[index] = 'sss'

C.翻转和排序迭代

函数reversed和sorted,作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:

  1. >>> sorted([2,6,3,7])
  2. [2, 3, 6, 7]
  3. >>> list(reversed('hello'))
  4. ['o', 'l', 'l', 'e', 'h']

 5.3 跳出循环

一般情况下循环会一直执行到条件为假,或者到序列元素用完时。但是有时候需要提前中断一个循环。

5.3.1.break

结束循环可以使用break语句。

  1. for i in range(0,10):
  2. if i == 5:
  3. print 'quit'
  4. break
  5. print i

5.3.2.continue

continue语句会让当前迭代结束,跳到下一轮循环的开始。

  1. for i in range(0,10):
  2. if i % 2 == 0:
  3. continue
  4. print i

5.3.3.while True/break

比如当用户在提示符下输入单词时做一些事情,并在用户不输入单词后结束循环。

  1. while True:
  2. word = raw_input('enter a word: ')
  3. if not word:
  4. break
  5. print 'The word is '+ word

六. 列表推导式--轻量级循环

列表推导式是利用其他列表创建新列表的一种方法,工作方式类似于for循环:

  1. >>> [x**2 for x in range(10) if x % 3 == 0]
  2. [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)

 七. 三人行

作为最后的结束,我们来看3个语句:pass,del和exec

pass:什么都不做,用来在代码中做占位符使用,方便调试代码。

  1. if a == 'a':
  2. print 'yes'
  3. elif a == 'b':
  4. pass
  5. else:
  6. print 'no'

del:删除不再使用的对象,也就是用作垃圾收集。

  1. >>> x = [1,2]
  2. >>> y = x
  3. >>> del x
  4. >>> x
  5. Traceback (most recent call last):
  6. File "<pyshell#62>", line 1, in <module>
  7. x
  8. NameError: name 'x' is not defined
  9. >>> y
  10. [1, 2]

del删除的只是名称,而不是列表本身,所以上面的例子中,删除x不会影响到y。

exec:动态创造python代码,然后将其作为语句执行或作为表达式计算。但是这样做是会有很严重的潜在安全漏洞,如果程序将用户提供的一段内容中的一部分字符串作为代码执行,程序可能会失去对代码执行的控制。

  1. >>> exec "print 'hello,world'"
    hello,world

python学习笔记之四:条件,循环和其他语句的更多相关文章

  1. python学习笔记2_条件循环和其他语句

    一.条件循环和其他语句 1.print和import的更多信息. 1.1.使用逗号输出  //print() 打印多个表达式是可行的,用逗号隔开.       在脚本中,两个print语句想在一行输出 ...

  2. Python学习笔记五--条件和循环

    5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...

  3. Python学习笔记之条件、循环和其他语句

    一.函数导入 1.为模块提供别名 >>> import math as foobar #设置math 别名为foobar >>> foobar.sqrt(4) 显示 ...

  4. Python学习笔记----数据类型 运算符 循环 条件判断

    1. Python安装 在官网www.python.org下载安装程序,可以支持的操作系统linux,windows,mac. Python版本:2.x和3.x,分别有x86和x64. 在Window ...

  5. python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 16. 循环方式笔记: 1)range(0, 8, 2)   #(上限,下限,步长)  可以实现对元素或者下标的 ...

  6. Python 学习笔记7 条件语句 If

    Python中条件语句if 是通过一条或者多条的执行语句的结果,来判断是否执行其包含的代码块. 通常会配合else.elif一起使用,达到根据条件进行多个代码块的执行操作. 简单的if score = ...

  7. python学习笔记(二)---for循环与操作列表

    内容概要 for循环 range(start,end,step)函数 生成随机数列表 list()函数 将range()的结果整合到某个列表 列表的操作 切片(start: end :step) 元组 ...

  8. Python学习笔记 第二课 循环

    >>> movies=["The Holy Grail", 1975, "The Life of Brian", 1979, "Th ...

  9. python学习笔记之四-多进程&多线程&异步非阻塞

    ProcessPoolExecutor对multiprocessing进行了高级抽象,暴露出简单的统一接口. 异步非阻塞 爬虫 对于异步IO请求的本质则是[非阻塞Socket]+[IO多路复用]: & ...

随机推荐

  1. 页面提交错误,页面间参数传递java.lang.NumberFormatException: null

    多次出现这样的错误,在点击一个按钮触发提交整个页面的事件时,总是报错,不止一次出现这样的错误了. 出现这种问题的分析: 1 我们从这个问题的本身来看,java.lang.NumberFormatExc ...

  2. Mysql RR隔离更新列没有索引 会锁全表

    <pre name="code" class="html">mysql> show variables like '%tx_isolation ...

  3. php运行

    运行命令: $php 1.php php教程: http://www.w3school.com.cn/php/php_variables.asp

  4. javascript (四) 改变html样式

    <h1 id="domo"> this is testing test</h1> <script> function changecolor() ...

  5. Eclipse 修改maven 仓储Repository位置

    简述: 使用两个Nexus, 需要配置两份不同的Maven仓库 步骤: 1. 下载新的Maven运行包 2. 进入conf/ 修改setting.xml项 <localRepository> ...

  6. ssh登录过程详细介绍

    服务器端和客户端就取得了相同的会话密钥和会话 ID .对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全. http://blog.csdn.net/lhq9220/arti ...

  7. BI中事实表和维度表的定义

    一个典型的样例是,把逻辑业务比作一个立方体,产品维.时间维.地点维分别作为不同的坐标轴,而坐标轴的交点就是一个详细的事实.也就是说事实表是多个维度表的一个交点.而维度表是分析事实的一个窗体. 首先介绍 ...

  8. 用C语言写解释器(一)——我们的目标

    声明 为提高教学质量,我所在的学院正在筹划编写C语言教材.<用C语言写解释器>系列文章经整理后将收入书中"综合实验"一章.因此该系列的文章主要阅读对象定为刚学完C语言的 ...

  9. c++重载ostream的实现

    #include <iostream> using namespace std; class Point{ public: Point(int _x = 0, int _y = 0, in ...

  10. php学习之道:WSDL具体解释(三)

    通过声明方式定义绑定(binding)属性 假设你在服务中採用SOAP binding.你能够使用JAX-WS来指定一定数量的属性binding. 这些属性指定相应你在WSDL中指定的属性.某些设置. ...