在编写状态机来分析不同类型的文本数据时,独立于使用的语言(VBA使用数组/字典处理.xls内容或使用PHP / Python来插入.csv的SQL插入查询)我经常遇到的问题是
之类的东西boolean = False
while %sample statement%:
x = 'many different things'
if boolean == False:
boolean = True
else:
%action that DOES depend on contents of x
that need to do every BUT first time I get to it%
每当我必须使用这样的结构时,我会情不自禁地感受到 noob 。亲爱的算法大师,你能向我保证这是唯一的出路吗?没有更多优雅的?有没有办法指明某些陈述应该“读完后烧掉”?因此,每次循环迭代都不会检查一些愚蠢的布尔值
答案 0 :(得分:1)
唯一可以轻微发现的事情" noob"关于这种风格是:
True
或False
进行比较。只需撰写if <var>
或if not <var>
即可。 (我会忽略=
vs ==
作为拼写错误!)不给布尔变量一个好名字。我知道这里boolean
只是一个占位符名称,但通常使用像first_item_seen
之类的名称而不是通用名称可以使代码 lot 更具可读性:
first_item_seen = False
while [...]:
[...]
if first_item_seen:
[...]
else:
first_item_seen = True
在某些情况下可以起作用的另一个建议是将决定基于另一个自然传达相同状态的变量。例如,在第一次迭代中包含None
的变量是相对常见的,但是包含稍后迭代的值(例如到目前为止的结果);使用它可以使代码更有效,并且通常稍微清晰。
答案 1 :(得分:0)
如果我理解你的问题,我会尝试像
这样的事情x = 'many different things'
while %sample statements%:
x = 'many different things'
action_that_depends_on_x()
几乎相同;唯一的区别是在你的版本中循环体可能永远不会被执行(因此x
永远不会被计算,因此没有计算x
的副作用),在我的版本中它总是至少计算一次。