您的位置:首页 > 编程语言 > Python开发

Python学习笔记8:Python条件和循环

2016-07-09 19:00 447 查看
1、if语句

if expression:
expr_true_suite


单个if语句可以通过使用布尔操作符and、or和not实现多重判断条件和否定判断条件。

2、else语句

if expression:
expr_true_suite
else:
expr_false_suite


避免“悬挂else”(C语言代码)

①if(balance>0.00)
②if(((balance-atm)>min_bal)&&(atm_cashout()==1))
printf("Here's your cash;...");
③else
printf("Your balance is ...");


本来①与③匹配,但C语言默认②与③匹配。

3、elif(即else-if)语句

if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
else:
none_of_the_above_suite


Python没有提供switch/case语句,可以用if-elif、序列和成员关系操作符、Python字典来代替。

4、条件表达式(三元操作符)

(C and [x] or [y])[0](2.5之前条件表达式的模拟实现之一)

x if C else y(2.5)

>>>smaller=x if x<y else y


5、while语句

while expression:
suite_to_repeat


6、for语句(像C#中的foreach循环)

可以遍历序列成员,可以用在列表解析和生成器表达式中。

for iter_var in iterable:
suite_to_repeat


(1)遍历序列对象:字符串、列表及元组。

①通过序列项迭代:

>>>nameList=['adas','adaw','eew']
>>>for eachName in nameList:
>>>    print eachName


②通过序列索引迭代

>>>nameList=['adas','adaw','eew']
>>>for nameIndex in range(len(nameList)):
>>>    print nameList[nameIndex]


③使用项和索引迭代

>>>nameList=['adas','adaw','eew']
>>>for i,eachName in enumerate(nameList):
>>>    print i,eachName


(2)遍历迭代器类型

迭代器对象有一个next()方法,调用后返回下一个条目。所有条目迭代完后,迭代器会引发一个StopIteration异常告诉程序循环结束。for语句在内部调用next()方法并捕获异常。

(3)range()和xrange()内建函数

①range()标准用法

range(start,end,step=1)

range()函数会返回一个包含所有k的列表,k大于等于start且小于end,从start到end,k每次递增step。step不可以为0,否则会发生错误。step默认为1。

②range()简略用法

range(end) start默认为0,step默认为1

range(start,end) step默认为1

③xrange()函数

xrange()适用于很大范围的列表。其性能高于range(),因为它不生成整个列表。它不会在内存里创建列表的完整拷贝。只被用在for循环,for循环外使用它无意义。xrange()返回一个可迭代对象(不是列表也不是迭代器)

④与序列相关的内建函数

sorted() 返回列表

reversed()返回迭代器

enumerate()返回迭代器

zip()返回列表

8、break与continue语句

break语句结束当前循环然后跳转到下条语句

continue语句结束当前循环开始下一次循环

9、pass语句(不做任何事情)

def foo_func():
pass


10、在while和for循环中使用else语句(循环后处理)

while expression:
suite_to_repeat
else:
else_suite


else子句只在循环完成后执行,也就是说break语句也会跳到else块。

11、迭代器和iter()函数

(1)迭代器

迭代器,为类序列对象提供了一个类序列的接口。(2.2)

Python的迭代无缝地支持序列对象,且允许程序员迭代非序列类型,包括用户定义的对象。例如:字典的键,一个文件的行,等等。

迭代器有一个next()方法,当你循环时,需要下一个项,调用迭代器的next()方法便可以获得它。条目全部取出后,会引发StopIteration异常,告诉调用者迭代完成。将迭代器看作序列,只是不能通过索引来计数。

reversed()内建函数将返回一个反序访问的迭代器;

enumerate()内建函数同样也返回迭代器。

all()和any()内建函数(2.5),如果迭代器中某个/所有条目的值都为布尔真时,则它们返回值为真。

迭代器限制:不能向后移动,不能回到开始,不能复制一个迭代器。

itertools模块,包含各种迭代器。

(2)使用迭代器

①序列中使用迭代器

for循环会自动调用迭代器的next()方法以及监视StopIteration异常。

②字典中使用迭代器

字典的迭代器会遍历它的键(key),语句for eachKey in myDict.keys()可以缩写为for eachKey in myDict。Python还提供了myDict.iterkeys()、myDict.itervalues() 、myDict.iteritems()三个内建字典方法来定义迭代。

③文件中使用迭代器

文件对象生成的迭代器会自动调用readline()方法。可以使用更简单的for eachLine in myFile替换for eachLine in myFile.readlines()。

注意:在迭代可变对象(列表)时修改它们不是一个好主意。因迭代器是与实际对象绑定在一起,更改元素会立即反映到你所迭代的条目上。

(3)iter()方法

iter(obj)方法可以得到obj的迭代器。iter()方法会检查入参obj是不是一个序列,如果是,根据索引从0一直迭代到序列结束。一个实现了__iter__()和next()方法的类可以作为迭代器使用。

iter(func,sentinel)重复调用func,直到迭代器的下个值等于sentinel。

12、列表解析(2.0)(用来动态创建列表)

(1)列表解析的语法

[expr for iter_var in iterable]

>>>[x**2 for x in range(6)]<=>map(lambda x:x**2,range(6))


列表解析可取代内建的map()及lambda,且效率更高

(2)列表解析语法的扩展版本

[expr for iter_var in iterable if cond_expr]

>>>[x**2 for x in seq if x%2]<=>filter(lambda x:x%2,seq)


13、生成器表达式(是列表解析的一个扩展)

(2.2引入生成器,2.4引入生成器表达式)

列表解析的不足是必须生成所有的数据,用以创建整个列表,不适用于有大量数据的迭代器。生成器是特定的函数,允许你返回一个值,然后“暂停”代码的执行,稍后恢复。

生成器表达式结合列表解析和生成器来解决列表解析的不足。生成器表达式并不真正创建列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来。生成器表达式使用了“延迟计算”,在使用内存上更高效。

列表解析语法

[expr for iter_var in iterable if cond_expr]

生成器表达式语法

(expr for iter_var in iterable if cond_expr)

只是将方括号变成圆括号,却得到一个内存使用更友好的结构。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息