python 条件与循环语句

2018-09-25 15:24:50   最后更新: 2018-10-23 15:38:06   访问数量:1107




if 语句的语法如下:

if expression: if_suite

 

 

python 也支持 else-if,他是用 elif 关键字:

if expression1: if_suite elif expression2: elif_suite else: else_suite

 

 

示例

if x < .0: print '”x” must be atleast 0!'

 

 

C、C++、java 中都有一种三元操作符,也被称作“条件表达式”:

C ? X : Y

 

C 是条件表达式; X 是 C 为 True 时的结果, Y 是 C 为 False 时的结果

python 2.5 开始集成了类似的语法:X if C else Y

python 的写法更加符合英文中意义的表达

>>> x, y = 4, 3 >>> if x < y: ... smaller = x ... else: ... smaller = y ... >>> smaller 3 >>> >>> smaller = x if x < y else y >>> smaller 3

 

 

while expression: while_suite

 

 

示例

counter = 0 while counter < 3: print('loop #%d' % (counter)) counter += 1

 

输出了:

loop #0

loop #1

loop #2

 

for 循环与字符迭代

for 循环更接近 shell 中的 foreach

for item in ("a", "b", "c"): print(item)

 

输出了:

a

b

c

 

如果循环因子是字符串,那么 for 循环用来迭代每个字符

for item in ("abc"): print(item)

 

输出了:

a

b

c

 

range 函数与 len 函数

Python 提供了一个 range()内建函数来生成数字范围列表,这通常用于技术循环的循环因子

for eachNum in range(3): print(eachNum)

 

输出了:

 

1

2

 

range()函数经常和 len()函数一起用于字符串索引

foo="abc" for i in range(len(foo)): print(foo[i], '(%d)' % i)

 

输出了:

a (0)

b (1)

c (2)

 

enumerate 函数

python 提供了内建函数 enumerate 来提供上面的功能:

foo="abc" for i, ch in enumerate(foo): print(foo[i], '(%d)' % i)

 

输出了:

a (0)

b (1)

c (2)

 

python 在 while 和 for 循环外也可以使用 else 语句:

In [1]: for i in range(5): ...: if i & 1 == 0: ...: continue ...: print(i) ...: else: ...: print('Iteratived over everything') ...: 1 3 Iteratived over everything

 

else 块中的内容会在循环迭代正常完成后执行:

  1. 没有执行 break
  2. 没有执行 return
  3. 循环的中间没有异常发生

即使循环所迭代的序列是空的,else分支依然会被执行

 

内建函数 iter 可以生成一个迭代器,他可以方便的让我们进行循环和遍历:

>>>lst = [1, 2, 3] >>> for i in iter(lst): ... print(i) ... 1 2 3 >>> myTuple = (123, 'xyz', 45.67) >>> i = iter(myTuple) >>> i.next() 123 >>> i.next() 'xyz' >>> i.next() 45.67 >>> i.next() Traceback (most recent call last): File "", line 1, in ? StopIteration

 

 

迭代器与元素删除

for eachURL in allURLs: if not eachURL.startswith('http://'): allURLs.remove(eachURL)

 

 

上面这样做是错误的, 一个序列的迭代器只是记录你当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上

使用字典的 keys() 方法是可以的, 因为 keys() 返回一个独立于字典的列表

 

列表解析看上较为复杂,实际上他只做了很简单的一件事 -- 将 for 循环语句的运算结果输出为列表

squared = [x ** 2 for x in range(4)] print(squared)

 

输出了:

[0, 1, 4, 9]

 

结合 if 语句

列表解析还可以结合 if 语句使用:

squared = [x ** 2 for x in range(8) if not x % 2] print(squared)

 

输出了:

[0, 4, 16, 36]

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 






读书笔记      龙潭书斋      python      python核心编程      range      for      python3      if      while     


京ICP备2021035038号