07 | 修炼基本功:条件与循环

写一手简洁易读的条件与循环代码,对提高程序整体的质量至关重要。

 

Python 不支持 switch 语句

整个条件语句是顺序执行的,如果遇到一个条件满足,在执行完 statement后,便会退出整个 if、elif、else 条件语句,而不会继续向下执行。

 

在实际写代码时,我们鼓励,除了 boolean 类型的数据,

条件判断最好是显性的。比如,在判断一个整型数是否为 0 时,

我们最好写出判断的条件:

if i != 0:
    ...

Python 中的数据结构只要是可迭代的(iterable),比如列表、集合等等,那么都可以通过下面这种方式遍历:

for item in <iterable>:
    ...

 

 

d = {'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}
for k in d: # 遍历字典的键
    print(k)
name
dob
gender

for v in d.values(): # 遍历字典的值
    print(v)
jason
2000-01-01
male    

for k, v in d.items(): # 遍历字典的键值对
    print('key: {}, value: {}'.format(k, v))
key: name, value: jason
key: dob, value: 2000-01-01
key: gender, value: male 

 

 

 

l = [1, 2, 3, 4, 5, 6, 7]
for index, item in enumerate(l):
    if index < 5:
        print(item)  
              
1
2
3
4
5

 

 

通常来说,如果你只是遍历一个已知的集合,找出满足条件的元素,并进行相应的操作,那么使用 for 循环更加简洁。但如果你需要在满足某个条件前,不停地重复某些操作,并且没有特定的集合需要去遍历,那么一般则会使用 while 循环。

 

i = 0
while i < 1000000:
    i += 1


for i in range(0, 1000000):
    pass

#
range() 函数是直接由 C 语言写的,调用它速度非常快。而 while 循环中的“i += 1”这个操作,得通过Python 的解释器间接调用底层的 C 语言;并且这个简

单的操作,又涉及到了对象的创建和删除(因为 i 是整型,是immutable,i += 1 相当于 i = new int(i + 1))。所以,显然,for 循环的效率更胜一筹。


 

 

 

绘制 y = 2*|x| + 5 的函数图像,给定集合 x的数据点,需要计算出 y 的数据集合。

y = [value * 2 + 5 if value > 0 else -value * 2 + 5 for value in x]


expression1 if condition else expression2 for item in iterable

 

 

 

 

将文件中逐行读取的一个完整语句,按逗号分割单词,去掉首位的空字符,并过滤掉长度小于等于 3 的单词,最后返回由单词组成的列表。

 

text = ' Today,  is, Sunday'
text_list = [s.strip() for s in text.split(',') if len(s.strip()) > 3]
print(text_list)
['Today', 'Sunday']

 

 

 

给定两个列表 x、y,要求返回 x、y 中所有元素对组成的元素对组成的元祖,相等情况除外。

 

[(xx, yy) for xx in x for yy in y if xx != yy]

 

 

 

 

 

在条件语句中,if 可以单独使用,但是 elif 和 else 必须和 if 同时搭配使用;而 If 条件语句的判断,除了 boolean 类型外,其他的最好显示出来。

在 for 循环中,如果需要同时访问索引和元素,你可以使用 enumerate() 函数来简化代码。

写条件与循环时,合理利用 continue 或者 break 来避免复杂的嵌套,是十分重要的。

要注意条件与循环的复用,简单功能往往可以用一行直接完成,极大地提高代码质量与效率。

 

posted on 2019-06-14 10:06  wzc521  阅读(163)  评论(0)    收藏  举报

导航