Python基础知识梳理 - 第03部分

程序语言中的流程控制语句用于控制计算操作执行的次序. 次序分为: 顺序, 分支, 循环. 顺序, 就是字面含义, 从上至下的运行; 分支, 根据各种条件, 进入相应的程序块; 循环, 即多次进入相同的程序块.

Python语言中分支的实现, 借助于if语句, 其一般形式如下:

if <test1>:

<statements1>

elif <test2>:

<statements2>

else:

<statements3>

当if语句执行时, Python会执行测试第一个计算结果为真的代码块, 或者如果所有测试都为假时, 就执行else块.

if语句举例如下:

In [1]: x = 'killer rabbit'

In [2]: if x == 'roger':

...:     print("how's jessica?")

...: elif x == 'bugs':

...:     print("what's up doc?")

...: else:

...:     print('Run away! Run away!')

...:

Run away! Run away!

另外, 对于下面形式的代码:

if X:

A = Y

else:

A = Z

还有个等价的形式, A = Y if X else Z, 即if/else三元表达式.

Python语言中循环的实现, 借助于while和for语句.

while语句一般形式如下:

while <test>:

<statements1>

else: # Optional else

<statements2> # Run if didn't exit loop with break

Python会一直计算开头的测试, 然后执行循环主体内的语句, 直到测试返回假值为止, 之后执行可选的else部分. 若在循环主体内遇到break语句而退出, 即使有else部分, 也不会执行.

while语句举例如下:

In [3]: x = 'spam'

In [4]: while x:

...:     print(x, end=' ')

...:     x = x[1:]

...:

spam pam am m

上面说到了break语句, 还有一个与之对应的continue语句, 它们都可以出现在while(还有后面要说到的for)循环主体的任何地方. break跳出最近所在的循环, continue则跳到最近所在循环的开头. 更一般的格式如下:

while <test1>:

<statements1>

if <test2>: break # Exit loop now, skip else

if <test3>: continue # Go to top of loop now, to test1

else:

<statements2> # Run if didn't hit a 'break'

下面看看for循环, 其在Python中是一个通用的序列迭代器, 可以遍历任何有序的序列对象内的元素.

一般格式如下:

for <target> in <object>: # Assign object items to target

<statements> # Repeated loop body: use target

else:

<statements2> # if didn't hit a 'break'

Python运行for循环时, 会逐个将序列对象中的元素赋值给目标, 然后为每个元素执行循环主体.

for语句举例如下:

In [5]: for x in ['spam', 'eggs', 'ham']:

...:     print(x, end=' ')

...:

spam eggs ham

编写循环的技巧, 并行遍历zip, ;产生偏移和元素enumerate.

zip举例:

In [7]: L1 = [1, 2, 3, 4]

In [8]: L2 = [5, 6, 7, 8]

In [9]: for (x, y) in zip(L1, L2):

...:     print(x, y, '---', x + y)

...:

1 5 --- 6

2 6 --- 8

3 7 --- 10

4 8 --- 12

enumerate举例:

In [11]: for (offset, item) in enumerate(S, 1):

...:     print(item, 'appears at offset', offset)

...:

s appears at offset 1

p appears at offset 2

a appears at offset 3

m appears at offset 4

刚才介绍for循环时, 说到其是一个通用的序列迭代器, 可以遍历任何有序的序列对象内的元素, 如列表, 元组以及字符串. 实际, for循环可用于任何可迭代的对象.

可迭代对象是什么呢, 如果对象是实际保存的序列, 或可以在迭代工具环境中一次产生一个结果的对象, 就看做是可迭代的.

那迭代器又是什么呢, 先从文件迭代器来说, 已打开的文件对象有一个方法名为readline, 可以一次从一个文件中读取一行文本, 每次调用readline方法时, 就会前进到下一行. 到达文件末尾时, 就会返回空字符串, 可通过它来检测, 从而跳出循环.

In [48]: f = open('test.py')

In [49]: f.readline()

Out[49]: 'import sys\n'

In [50]: f.readline()

Out[50]: '\n'

In [51]: f.readline()

Out[51]: 'print(sys.path)\n'

In [52]: f.readline()

Out[52]: ''

文件对象还有一个方法, 名为__next__, 差不多有相同的效果, 每次调用时, 就会返回文件中的下一行. 唯一的区别在于, 到达文件末尾时, __next__会引发内置的StopIteration异常, 而不是返回空字符串.

In [53]: f = open('test.py')

In [54]: f.__next__()

Out[54]: 'import sys\n'

In [55]: f.__next__()

Out[55]: '\n'

In [56]: f.__next__()

Out[56]: 'print(sys.path)\n'

In [57]: f.__next__()

---------------------------------------------------------

StopIteration           Traceback (most recent call last)

<ipython-input-57-dcf180275632> in <module>()

----> 1 f.__next__()

StopIteration:

这个接口描述的就是Python中的迭代协议: 实现了__next__方法的对象, 会前进到下一个结果, 而到达一系列结果的末尾时, 则会引发StopIteration异常. 至此, 可以说明, 文件迭代器, 实现了迭代协议.

看下更为通用的for循环, 当for循环开始时, 会通过它将可迭代对象传递给iter内置函数, 以便从可迭代对象获得一个迭代器, 返回的对象就是迭代器了, 其实现了迭代协议.

In [60]: L = [1, 2, 3]

In [61]: I = iter(L)

In [62]: I.__next__()

Out[62]: 1

In [63]: I.__next__()

Out[63]: 2

In [64]: I.__next__()

Out[64]: 3

In [65]: I.__next__()

---------------------------------------------------------

StopIteration           Traceback (most recent call last)

<ipython-input-65-a7fa90893753> in <module>()

----> 1 I.__next__()

StopIteration:

最初的一步对于文件来说不是必需的, 文件有自己的__next__方法, 不需要再像那样返回一个对象了, 文件对象就是自己的迭代器.

In [73]: f = open('test.py')

In [74]: iter(f) is f

Out[74]: True

In [75]: f.__next__()

Out[75]: 'import sys\n'

对于列表, 以及很多其它的内置对象, 不是自身的迭代器, 必须调用iter来启动迭代.

In [76]: L = [1, 2, 3]

In [77]: iter(L) is L

Out[77]: False

In [78]: L.__next__()

---------------------------------------------------------

AttributeError          Traceback (most recent call last)

<ipython-input-78-98b0c0707a44> in <module>()

----> 1 L.__next__()

AttributeError: 'list' object has no attribute '__next__'

In [79]: I = iter(L)

In [80]: I.__next__()

Out[80]: 1

尽管Python中的迭代工具会自动调用这些函数, 也可以使用它们来手动应用迭代协议. 下面的例子展示了自动和手动迭代, 结果是等效的.

In [81]: L = [1, 2, 3]

In [82]: for X in L:

...:     print(X ** 2, end=' ')

...:

1 4 9

In [83]: I = iter(L)

In [84]: while True:

...:     try:

...:         X = I.__next__()

...:     except StopIteration:

...:         break

...:     print(X ** 2, end=' ')

...:

1 4 9

若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).

原文地址:http://blog.51cto.com/coveringindex/2085326

时间: 2024-10-07 17:25:07

Python基础知识梳理 - 第03部分的相关文章

Python基础知识梳理 - 第01部分

在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等工具, 最后是vim的设置. 1. 安装python. # wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz Python-2.7.14 # ./configure --prefix=/usr/local/python27

Python基础知识梳理 - 第02部分

本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等. Python还提供了若干处理数字对象的工具, 如内置数学函数pow, abs等, 标准库math, random等. 看下数字的简单使用. In [15]: 123 + 234 Out[15]: 357 In [16]: 1.5 * 4 Out[16]: 6.0 In [32]: pow(2,

Python基础知识梳理

break语句 break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. break语句用在while和for循环中. 如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码. 例子: # 第一个例子 for letter in 'python': if letter == 'h': break print('当前字母:', letter) # 第二个例子 n = 0 while n < 10: n = n + 1 if

python基础知识梳理----2格式化输出,替换符

一:格式化输出 1: 格式: 例子: name=input('请输入name') print('名字是%s'%name) %s就是代表字符串串占位符,除此之外,还有%d, 是数字占位符, 如果把上?面的age后?面的换成%d,就代表你必须只 能输入数字啦 这时对应的数据必须是int类型. 否则程序会报错 用了这么久几乎都是%s  因为这个是万能匹配 2: 强制转换 字符型转数字型    int() 例子  int('123') 输出 123  #### 数字型 强制转换  数字型转字符型   s

python基础知识总结

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心. 一.python概念 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python定位"优雅","简单","明确" 二.python安装 略 三.python基础 1.数据类型 整数: Python可以处理任意大小的整数,当然包括负整数,在程序

[SQL] SQL 基础知识梳理(一)- 数据库与 SQL

SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 序 目录 What's 数据库 数据库结构 SQL 概要 创建表 删除和更新表 1-1 What's 数据库 1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.如:大型-银行存储的信息,小型-电话簿. 2.数据库管理系统(Batabase Management Syste

JavaScript基础知识梳理--数组

JavaScript基础知识梳理--数组 1.创建方法 空数组:var obj=new Array(); 指定长度数组: var obj=new Array( size ); 指定元素数组 :  var obj=new Array( 元素1,元素2,....): 单位数组:var obj=new Array[ 元素1,元素2,元素3,...,元素N]; 多维数组:var a=new Array( [数组1],[数组2],[数组3],...,[数组N] ); 2.基本操作 存取数组元素: 单维数组

Java基础知识梳理《一》

一.Java数据类型(简单称之为“四类八种”) java 基本的数据类型长度都是固定的,好处是在实现跨平台时就统一了. 1.整型 byte short int long (分别是1,2,4,8个字节) 类型 存储需求 位数 取值范围 byte 1字节 8位 -128~127 short 2字节 16位 -2^15 ~2^15-1 int 4字节 32位 -2^31~2^31-1 long 8字节 64位 -2^63~2^63-1 当超出int表示范围时,应该使用long型,添加后缀一大写的L 注

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai