代码改变世界

Python学习笔记《Python核心编程》第8章 条件和循环

2013-01-21 22:01  VVG  阅读(1207)  评论(0编辑  收藏  举报

if 语句

      由三部分组成:关键字本身,用于判断结果真假的条件表达式,以及当表达式为真或者非零时执行的代码块:

      if  expression:

         expr_true_suite

可以通过使用布尔操作符and  or  not 实现多重判断条件

     if  not warn and (system_load >= 10):

         print "WARNING:losing resources"

         warn +=1

如果以个复合语句的代码块仅仅包含一行代码,那么可以写在 一行上

    if make_hard_copy:send_data_to_printer()

else  语句  

    if expression:

       expr_true_suite

    else:

      expr_true_suite 

if passwd == user.passwd:
    ret_str = "password accepted"
    id = user.id
    valid = True
else:
    ret_str = "invalid password entered....try again!"
    valid = False

 elif(即else-if)语句 ---------python 暂不支持switch/case语句-

 if expression1:

    expr1_true_suite

elif expression2:

    expr2_true_suite

elif expressionN:

    exprN_true_suite

else:

    none_of_the_abave_suite

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

    X if C else Y

while 语句

    while expression:

         suite_to_repeat

for 语句:

    for iter_var in iterable:    #每次循环,iter_var迭代变量被设置为可迭代对象的当前元素,提供给语句使用

         suite_to_repeat

pass 语句:

     def foo_func():

           pass                     # 可以用来先定结构,而不干扰其他代码

range()完整语法 

    range(start,end,step = 1)    #返回一个包含所有K的列表,这里start<=k<end,k每次递增step。step不可以为0,默认为1。

range()简约语法

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

    range(start,end)

与序列相关的内建函数:

        sorted()    reversed()         # 返回一个序列(列表)

        enumerate()    zip()            # 返回迭代器    zip()  压缩两个列表。。。?

break 语句,结束当前循环然后跳到下一条语句。

continue语句:终止当前循环,并忽略剩余的语句,然后回到循环的顶端,开始下一次循环!

注:while 和 for 循环中使用else语句。在循环中使用时,else子句只在循环完成后执行,break语句会跳过else块。

迭代器和iter()函数

      迭代器的工作原理:

>>> myTuple
(123, 'zav', 45.33)
>>> i = iter(myTuple)
>>> i.next()
123
>>> i.next()
'zav'
>>> i.next()
45.33
>>> i.next()

Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    i.next()
StopIteration

 

字典的迭代器或遍历它的键。 for eachKey in myDict.keys()   可以简写成   for eachKey in myDict

legends = {('poe','wei'):('123','3444','34244'),('jasdlf','adsfasd'):(123,3434,343434)}
for eachLegend in legends:
    print 'Name: %s\tOccupation: %s' % eachLegend
    print '    birth: %s\tDeath:%s\tALBUM:%s\n' % legends[eachLegend]

文件:文件对象生成的迭代器会自动调用readline()方法,循环可以访问文本文件的所有行。可以使用for eachLine in myFile来迭代文本文件

   myFile = open('config-win.txt')

       for eachLine in myFile:

            print eachLine,  

列表解析:[expr for iter_var in iterable]

     核心是for循环,迭代iterable对象的所有条目。前边的expr应用于序列的每个成员,最后的结果值是该表达式产生的列表。     

[x ** 2 for x in range(10)]           #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]   需加中括号[]

扩展语法:[expr for iter_var in iterable if cond_expr]

 

 

      这个语法在迭代时会过滤或捕获满足条件表达式cond_expr的序列成员 

seq = [11,12,13,1,4,34,45,56,6,67,78,3]
 [x for x in seq if x%2]   #[11, 13, 1, 45, 67, 3]

生成器:是特定的函数,允许你返回一个值,然后“暂停”代码的知心,稍后恢复

生成器表达(expr for iter_var in iterable if cond_expr):生成器是以个内存使用更友好的结构。

阶乘函数:

def factorial(n):
    if n>1:
        return n*factorial(n-1)
    else:
        return 1

factorial(10)            #  3628800