首页 > 代码库 > 写好Python之For循环

写好Python之For循环

写好Python之For循环

使用在循环中使用enumerate函数而不是使用"index"变量

从其他语言转过来的Python程序员,过去可能通常通过使用申明一个变量来跟踪遍历索引,,例如在C++:

for (int i=0; i < container.size(); ++i)
{
    // Do stuff
}

在Python,内建的enumerate函数可以扮演该角色

糟糕的

my_container = [‘Larry‘, ‘Mode‘, ‘Curly‘]
index = 0
for element in my_container:
    print("{} {}".format(index, element))
    index += 1

推荐的

my_container = [‘Larry‘, ‘Mode‘, ‘Curly‘]
for index, element in enumerate(my_container):
    print("{} {}".format(index, element))

使用in关键字来遍历迭代

从其他语言转来的程序员可能没有使用过 for each 风格来遍历迭代,大部分使用索引来访问元素。Python的in关键字优雅的处理该任务。

糟糕的

my_list = [‘Larry‘, ‘Moe‘, ‘Curly‘]
index = 0
while index < len(my_list):
    print(my_list[index])
    index += 

推荐的

my_list = [‘Larry‘, ‘Moe‘, ‘Curly‘]
for element in my_list:
    print(element)

使用else执行for遍历后执行代码

鲜为人知的是Python可以在for语言包含else子句。else子句在遍历结束后执行。除非for语句被break终端。这样允许在for没有break中执行相关代码,也就是有条件的执行。

在以下场景中,我们执行报表来检查邮箱地址是否有效(用户可注册多个邮箱)。

糟糕的

for user in get_all_users():
    has_malformed_email_address = False
    print (‘Checking {}‘.format(user))
    for email_address in user.get_all_email_addresses():
        if email_is_malformed(email_address):
            has_malformed_email_address = True
            print (‘Has a malformed email address!‘)
            break
    if not has_malformed_email_address:
        print (‘All email addresses are valid!

推荐的

for user in get_all_users():
    print("Checking {}".format(user))
    for email_address in user.get_all_email_addresses():
        if email_is_malformed(email_addresss):
            print("Has a malformed email address!")
            break
    else:
        print("All email addresses are valid!")