转载自:http://www.xwy2.com/article.asp?id=121
if...elif...else
Code
>>>>>> def test(i):
if 0<i<10:
print "small.."
elif 10<=i<20:
print "midle.."
elif 20<=i<30:
print "large.."
else:
print "invalid.."
>>>>>> test(15)
midle..
for...in...
Code
>>>>>> for i in range(4):
print i
0
1
2
3
>>>>>>
>>>>>> for k, v in {1:"a", 2: "b", 3:"m"}.items():
print "%d=%s"%(k,v)
1=a
2=b
3=m
>>>>>>
当然,我们可以用 range() 来实现 C# for(++)/for(--) 的效果。
Code
>>>>>> for i in range(len(a)):
print "%d: %s"%(i, a[i])
0: a
1: b
2: c
>>>>>>
>>>>>> for i in range(len(a)-1, -1, -1):
print "%d: %s"%(i, a[i])
2: c
1: b
0: a
>>>>>>
while
Code
>>>>>> while i < 5:
print i
i=i+1;
0
1
2
3
4
>>>>>>
>>>>>> while True:
print i
i +=1;
if i == 5:break
0
1
2
3
4
>>>>>>
continue, break
和大多数语言一样,Python 循环同样支持 continue 和 break。这没什么好说的。
Changing horses in midstream
我们看一个有意思的例子。
Code
>>>>>> a=range(3)
>>>>>> for i in a:
print i
a=range(10)
0
1
2
>>>>>>
你会发现在循环体内部对 a 的修改并没有起到作用,为什么会这样呢?改一下代码就明白了。
Code
>>>>>> a=range(3)
>>>>>> hex(id(a))
'0xdc36e8'
>>>>>> for i in a:
print i
a=range(19)
print(id(a))
0
14411376
1
14431896
2
14386240
>>>>>>
哦~~~ 原来内部所谓修改的 a 完全是一个新的对象,自然不会影响到循环体本身了。这和 Python 变量的作用范围有关。
xrange()
如果你用 range() 创建一个很大的列表时,你会发现内存一下涨了很多~~~~~ ,这时候你应该用 xrange() 来代替。虽然这两者从表面看没什么区别,但实际上他们生成的结果类型并不一样。
Code
>>>>>> type(range(10))
<type 'list'>
>>>>>> type(xrange(10))
<type 'xrange'>
>>>>>>