zoukankan      html  css  js  c++  java
  • 4、Python条件、循环

    1、扩展print和import

    1.1 使用逗号输

    在打印多个表达式时,可以用逗号隔开;

    print "a", "b"

    如果在打印语句的结尾加上逗号,接下来的打印语句会和前一条打印语句在同一行输出;

    print 'a',

    pring 'b'

    1.2 模块的导入

    导入某个模块 import somemodule

    导入模块中的某个函数 from somemodule import somefunction

    导入模块中的所有函数 from somemodule import *

    2、赋值

    2.1 序列解包

    序列解包(sequence unpacking)又叫做可迭代解包:将多个值的序列解开,然后放到变量的序列中。

    x = [1,2,3]
    a,b,c = x

    2.2 链式赋值

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

    x = y = 'abc'

    2.3 增量赋值

    x += value相当于x = x + value,对于-、*、/、%都适用。

    3、 语句块,缩排

    语句块:它是在条件为真时执行或执行多次的一组语句。通过在代码前放置空格来缩进语句,从而创建语句块。

    4、条件语句

    4.1 下面的值在作为布尔表达式的时候会被解释器看作是False

    False、None、0、""、()、[]、{}

    4.2 if语句

    if():

    elif():

      if():  #嵌套语句

      else:

    else:

    4.3 is运算符

    x = y = [1,2,3]

    z = [1,2,3]

    x == y True

    x==z True

    x is y True

    x is z False

    is运算符是判断同一性而不是相等性的。变量x和y都被绑定到同一个列表上,而变量z被绑定到另一个具有相同数值的列表上。它们的值相等,但却不似同一个对象。

    所以,使用"=="运算符来判定两个对象是否相等,使用is判定两者是否等同(同一个对象)。

    4.4 布尔运算符

    and、or、not

    4.5 断言 assert

    断言和if语句在语义上有些相近,使用它的目的是与其让程序在晚些时候崩溃,不如在错误的条件下直接崩溃。一般用在检查函数的属性,或者做为初期测试和调试过程中的辅助条件。

    assert语句用来在程序中置入检查点,条件后可以添加字符串来解释断言。

    age = -1

    assert 0 < age <100, 'The age must be realistic'

    上面语句会报错。

    5、循环

    5.1 while循环

    5.2 for循环

    注意:xrange和range函数功能类似,区别在于range函数一次创建整个循环序列,而xrange一次只创建一个数。当需要迭代一个巨大的序列时xrange会更高效。它们的默认下限都是从零开始。

     5.3 循环遍历字典元素

    d = {}

    d.keys d.values d.items,用来获取键列表,值列表,键值对元组列表。

    5.4 一些迭代工具

      5.4.1 并行迭代

      内建的zip函数可以用来进行并行迭代,可以把两个序列“压缩”为一个元组列表。

      names = ['wang','li']

      ages = [12,13]

      zip(names,ages)   [('wang',12),('li',13)]

      5.4.2 编号迭代

      在迭代序列中对象的时候,获取对象在序列中的一个索引。

      内建的enumerate函数

      for index, string in enumerate(strings):

        if 'xxx' in string:

          string[index] = '[censored]'

      5.4.3 翻转和排序迭代

      reversed和sorted:他们同列表的reverse和sort方法类似,当作用与序列或可迭代对象上是,返回翻转或排序后的版本,而不是原地地进行修改。

    6、列表推导式-轻量级循环

    列表推导是(list comprehension)是利用其它列表创建新列表的一种方式,工作方式类似于嵌套for循环。

    >>>[x*x for x in rang(10)]

    [0,1,4,9,16,25,36,49,64,81]

    >>>[x*x for x in rang(10) if x%3==0]

    [0,9,36,81]

    >>>[(x,y) for x in rang(3) for y in rang(3)]

    [(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]

    7、pass、del、exec和eval

    pass语句什么都不做,可以作为占位符使用。

    del语句用来删除变量,或者数据结构的一部分,但不能用来删除值。

    View Code
     1 >>> x = 3
     2 >>> y=x
     3 >>> del x
     4 >>> x
     5 
     6 Traceback (most recent call last):
     7   File "<pyshell#3>", line 1, in <module>
     8     x
     9 NameError: name 'x' is not defined
    10 >>> y
    11 3
    12 >>> x = [0,1,2,3,4,5]
    13 >>> del x[1]
    14 >>> x
    15 [0, 2, 3, 4, 5]
    16 >>> y = x
    17 >>> y
    18 [0, 2, 3, 4, 5]
    19 >>> del x[0]
    20 >>> x
    21 [2, 3, 4, 5]
    22 >>> y
    23 [2, 3, 4, 5]
    24 >>> del x
    25 >>> y
    26 [2, 3, 4, 5]
    27 >>> x
    28 
    29 Traceback (most recent call last):
    30   File "<pyshell#15>", line 1, in <module>
    31     x
    32 NameError: name 'x' is not defined
    33 >>> 

    x和y都指向同一个列表或对象。但是删除x并不影响y。原因就是删除的只是名称,而不是列表本身(值)。事实上,Python中没有办法直接删除值。(如果某个值不在使用的时候,Python解释器会负责自动的内存回收)

    execl可以动态地创造Python代码,然后将其作为语句执行。

    exec "print 'test'"

    但有些时候提供的变量值与模块中的函数名冲突,所以,为了安全起见,可以增加一个字典,起到命名空间的作用。

    注意:命名空间的概念称为作用域(scope),是非常重要的知识。可以把它当做保存变量的地方。所以在程序执行x=1这类赋值语句时,可以将键x和值1放在当前的命名空间内,命名空间一般来说都是全局的命名空间。

    通过增加in <scope>来实现,<scope>就起到放置代码字符串命名空间作用的字典。

    >>>from math import sqrt

    >>>scope = {}

    >>>exec 'sqrt = 1' in scope

    >>>sqrt(4)

    2.0

    >>>scope['sqrt']

    1

    eval可以动态地创造Python代码,然后将其作为表达式执行。

    eval会计算Python表达式(以字符串形式书写),并且返回结果值,而exec语句并不返回任何对象,因为它本身就是语句。

    eval创建一个Python计算机:

    >>> eval(raw_input("Enter an arithmetic expression:"))

    Enter an arithmetic expression:1+1*2

    3

    给exec或eval语句提供命名空间时,可以在真正使用命名空间前放置一些值进去:

    >>>scope = {}

    >>>scope['x'] = 2

    >>>scope['y'] = 3

    >>>eval('x*y', scope)

    6

    >>>exec 'x = 4 in scope

    >>>eval('x*x', scope)

    16

  • 相关阅读:
    QQ机器人
    MySQL Hash索引和B-Tree索引的区别
    python format
    Python csv模块的使用
    Python 随机数函数
    关于Python Profilers性能分析器
    数据结构之排序算法Java实现(6)—— 插入类排序之折半插入排序算法
    数据结构之排序算法Java实现(5)—— 插入类排序之直接插入排序算法
    数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法
    数据结构之排序算法Java实现(3)—— 交换类排序之冒泡排序算法
  • 原文地址:https://www.cnblogs.com/wanghaoran/p/2960435.html
Copyright © 2011-2022 走看看