Python中多个while循环退出条件的模式

问题描述 投票:0回答:1

我花了一些时间在这里浏览类似命名的问题,但是似乎没有一个解决的问题,如果您有多个退出条件,每个退出条件都有各自的逻辑路径。这就是我的意思。

[我在编写将元素添加到唯一元素链接列表的函数时就开始考虑这个问题:

node = get_prepopulated_list()

# Iterate over linked list until element is found or list is exhausted
while node.key != key and node.next is not None:
    node = node.next

# If found element, increment counter for that element
if node.key == key:
    node.count += 1

# Else, add new node to end
else:
    node.next = Node(key)

注意退出后如何再次检查两个退出条件中的至少一个>,从而导致代码重复。当然,我们可以翻转检查哪个条件,但仍然会保留代码重复。在这种情况下,我们可以使用类似的方法,这样可能会更干净一些:

node = get_prepopulated_list() # Iterate over linked list until element is found or list is exhausted while node.key != key and node.next is not None: try: node = node.next # Break out on 'None' condition except AttributeError: break # Use implicit 'None' check from try-except to add new node to end on None else: node.next = Node(key) return # Otherwise, found element, so increment counter for that element node.count += 1

但是实际上并没有更好,首先是因为它在elsewhile-else期间添加了必需的转义,其次是因为在循环内添加了一些膨胀的错误处理,最后是因为它破坏了规则2 Python Zen:“显式比隐式更好”。除此之外,它还不能扩展到两个以上的退出条件。

所以我有两个问题:

    是否有更好的方法来处理带有2个退出条件并匹配逻辑路径的情况?
  1. 是否有更好的方式处理3个或更多退出条件并匹配逻辑路径的案件?
  • [我花了一些时间在这里浏览类似的问题,但是似乎没有一个问题解决如果您有多个退出条件,每个条件都有各自的逻辑路径,则该条件在...之后]]
  • python python-3.x while-loop control-flow
    1个回答
    0
    投票
    一个有用的模式是for / else,如下:

    for item in container: if test_some_condition(item): handle_item_found(item) break else: handle_item_not_found()

    © www.soinside.com 2019 - 2024. All rights reserved.