Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出知足if条件的元素组成新的List,其中if是能够省略的。下面举几个简单的例子进行说明。java
>>> a=[12,3,4,6,7,13,21] >>> newList =[x forx in a] >>> newList [12,3,4,6,7,13,21] >>> newList2 =[x forx in a if x%2==0] >>> newList2 [12,4,6]
省略if后,newList构建了一个与a具备相同元素的List。可是,newList和a是不一样的List。执行b=a,b和newList是不一样的。newList2是从a中选取知足x%2==0的元素组成的List。若是不使用for...[if]..语句,构建newList2须要下面的操做。python
>>> newList2=[] >>>for x in a: ... if x%2==0: ... newList2.append(x) >>> newList2 [12,4,6]
显然,使用for...[if]...语句更简洁一些。express
嵌套的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语句是最外层的循环。c#
在平常coding中,分支语句的使用很是广泛,常常会根据是否知足必定的条件对代码执行的逻辑进行一些控制,因此你们对if[elif[else]]必定不会陌生。分支语句中的else子句在其它的条件不知足的时候会被执行到,适当的使用分支语句可以让咱们的代码逻辑更加的丰富。
在分支语句中使用else子句在一些常见的编程语言中的用法基本相同,相似于提供了一条默认的执行路径,配合if等条件判断语句使用,相比其它的编程语言(c#, java, js等)在python中,else有一些特殊的用法,配合for, while等循环语句使用,甚至还能配合异常处理try except语句进行使用,可以让咱们的代码更加的简洁。app
在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”,如同伪代码通常的好理解并且相比在判断整除的时候设置标志值而后在函数的结尾处判断标志值决定是否打印数字时素数的消息,代码更简洁没有那么多要描述如何作的“过程式”准备工做。.net
ps: 你们能够把例子中的被注释代码运行对比下效果。日志
在异常处理语句中,else有类似的用法,当try代码块没有抛出任何的异常时,else语句块会被执行到。
defmy_to_int(str_param): try: printint(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,细微之处你们能够慢慢体会。
a, b, c = 1, 2, 3 1.常规 if a>b: c = a else: c = b 2.表达式 c = a if a>b else b 3.二维列表 c = [b,a][a>b] 4.传说是源自某个黑客 c = (a>b and [a] or [b])[0]
转:https://blog.csdn.net/gzhouc/article/details/53240749