Python学习记录4(语句)

来源:互联网 发布:task host windows 编辑:程序博客网 时间:2024/05/20 04:46

    • 赋值语句
        • 序列解包
    • 条件语句
        • 语句块
        • 布尔变量
        • 条件执行和if语句
    • 条件运算符
    • 循环
        • while语句
        • for循环
        • 迭代工具
        • 跳出循环
            • break
            • continue
            • while truebreak语句
            • 循环中的else子句
        • 轻量级循环列表推到
        • passdelexec
    • 小结

赋值语句

赋值语句用赋值运算符=来实现。赋值语句有一些特殊的使用技巧。

序列解包

多个赋值操作可以同时进行。也可以交换两个或者多个变量。事实上,这里所做的事情叫做序列解包或者叫递归解包——将多个值的序列揭开,然后放到变量的序列中。popitem方法将键-值作为元组放回。

>>> scoundrel={'name':'Robin','girlfriend':'Marioon'}>>> key,value=scoundrel.popitem()>>> key'name'>>> value'Robin'

Python还可以链式赋值。也可以进行增量赋值。


条件语句

语句块

语句块并不是一种语法。语句块适当条件为真时执行或执行多次的一组语句。在代码前放置空格来缩进语句即可创建语句块。块中的每行都要缩进形同的量。在Python中,冒号用来表示语句块的开始,块中的每个语句都是缩进的(缩进的量相同)。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束。

布尔变量

下面的值在作为布尔表达式的时候,会被编译器看作是假(false):

FalseNone0""()[]{}

除去上面的表达式之外的其他表达式在作为布尔表达式的时候都为真。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==yFalse>>> del x[2]>>> y.reverse()>>> x==yTrue>>> x is yFalse

字符串和序列也可以比较,他们是按照字母顺序排列进行比较(一个字母的顺序值可以用ord函数查到,ord函数和chr函数的功能相反)。如:

>>> 'alpha'<'beta'True

其他的序列也可以用同样的方式比较,不过比较的不是字符而是其他类型的元素。如果一个序列中包含其他序列元素,比较规则也同样适用于序列元素。

>>> [1,2]<[2,1]True>>> [1,2]>[1,3]False>>> [1,[2,[3,4]]]>[2,1]False
  • 布尔运算符

    所有的返回值都可以看作是布尔值,所有表达式也都返回布尔值。and运算符就是所谓的布尔运算符。它连接两个布尔值,并且只有当两个布尔值都为真时,表达式才为真。另外两个布尔运算符是ornotor表示或者,当两边值都为假是才为假。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=0x=1while x<=100:    sum=sum+x    x+=1print(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 sqrtfor 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 sqrtfor n in range(99,81,-1):    root=sqrt(n)    if root==int(root):        print(n)        breakelse:    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>>> xTraceback (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循环的表达式。通过列表推导式可以通过已知的列表产生新列表。
0 0
原创粉丝点击