python 三元表达式进阶

python 三元表达式进阶

简单的for...[if]...语句

Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的。

>>> a=[12,3,4,6,7,13,21]

>>> newList =[x for x in a]

>>> newList

[12,3,4,6,7,13,21]

>>> newList2 =[x forx in a if x%2==0]

>>> newList2

[12,4,6]

 

嵌套的for...[if]...语句

嵌套的for...[if]...语句可以从多个List中选择满足if条件的元素组成新的List。下面也举几个例子。

>>>a=[12,3,4,6,7,13,21]

>>>b=['a','b','x']

>>>newList=[(x, y) for x in a for y in b]

>>>newList

[(12,'a'), (12,'b'), (12,'x'), (3,'a'), (3,'b'), (3,'x'), (4,'a'), (4,'b'), (4,'x'), (6,'a'), (6,'b'), (6,'x'), (7,'a'), (7,'b'), (7,'x'), (13,'a'), (13,'b'), (13,'x'), (21,'a'), (21,'b'), (21,'x')]

>>>newList2=[(x, y) for x in a for y in b if x%2==0 and y<'x']

>>>newList2

[(12,'a'), (12,'b'), (4,'a'), (4,'b'), (6,'a'), (6,'b')]

 

嵌套的for...[if]...语句与多重for语句相当,最前面的for语句是最外层的循环。

 

else子句

在python中,else有一些特殊的用法,配合for, while等循环语句使用,甚至还能配合异常处理try except语句进行使用,能够让我们的代码更加的简洁。

配合for/while循环语句使用

在for循环语句的后面紧接着else子句,在循环正常结束的时候(非return或者break等提前退出的情况下),else子句的逻辑就会被执行到。先来看一个例子:

defprint_prime(n):

  for i in xrange(2, n):

    # found = True

    for j in xrange(2, i):

      if i %j ==0:

         # found = False

        break

    else:

      print("{} it's a prime number".format(i))

    # if found:

         # print("{} it's a prime number".format(i))

 

print_prime(7)

 

结果:

2 it's a prime number

3 it's a prime number

5 it's a prime number

 

一个简单打印素数的例子,判断某个数字是否是素数的时候需要遍历比它自己小的整数,任何一个满足整除的情况则判断结束,否则打印这是一个素数的info,有了else的加持,整个例子的逻辑相当的“self-expressive”,如同伪代码一般的好理解而且相比在判断整除的时候设置标志值然后在函数的结尾处判断标志值决定是否打印数字时素数的消息,代码更简洁没有那么多要描述如何做的“过程式”准备工作。

配合 try except错误控制使用

在异常处理语句中,else有相似的用法,当try代码块没有抛出任何的异常时,else语句块会被执行到。

defmy_to_int(str_param):

  try:

    print(int(str_param))

  exceptValueError:

    print('cannot convert {} to a integer'.format(str_param))

  else:

    print('convert {} to integer successfully'.format(str_param))

 

my_to_int("123")

my_to_int("me123")

结果

123

convert 123 to integer successfully

cannot convert me123 to a integer

 

如打印日志所示,在转换成功未发生错的的时候,else语句里的逻辑会被执行,当然这个例子可能并没有什么太多的实际的用处,但大致能说明else在错误处理中的用处:简化逻辑,避免使用一些标志值就能够准确把握是否发生错误的情况来做一些实际的操作(比如在保存数据的时候如果发生错误,在else语句块中进行rollback的操作,然后紧接着还能加上finally语句完成一些清理操作。

善用else语句块能够让我们编写出更加简明,更加接近自然语言的语义的代码,当然也会更加的pythonic,细微之处大家可以慢慢体会。

 

 

 

猜你喜欢

转载自blog.csdn.net/Kwoky/article/details/112172967