谁能给我解释一下 "guardian pattern"
Can anyone explain the "guardian pattern" to me
尝试搜索守护模式,但找不到任何可以回答我问题的内容,所以我又来了。在我正在阅读的书中,作者使用了一行他称之为 "the guardian pattern" 的代码,但我真的不明白它是如何工作的。这是示例,如果有人能向我解释一下,我将不胜感激。
while True:
line = raw_input('> ')
if len(line) > 0 and line[0] == '#' :
continue
if line == 'done':
break
print line
print "done!"
为什么,如果行的长度 > 0 且行[0] == '#' :
如果我什么都没有就按回车键,这不会出错吗?该行不会为 0,因此该行不 > 0 吗?如果你把原始代码放在
if line[0] == '#' :
刚按回车就出错了。
Wouldn't the line be 0 and thus line isn't > 0?
如果您直接按回车键,行是 ""
。一个空字符串。此字符串 len(line)
的长度为 0(因此导致您的程序在 and
语句的第一个案例被评估后立即继续。如果您访问空的第一个索引 0
行,它会抛出一个错误。因此,在访问它之前总是检查你是否真的有第一个索引...
so why, if the length of the line > 0 and line[0] == '#' : does it not error if I just hit enter with nothing there.
不,它不会抛出错误。 Python 使用惰性计算,它可以使用 and
运算符进行短路。见 docs.
换句话说,布尔表达式的第二部分,即 line[0] == '#'
,只有当第一部分是 True
.
时才会被计算
我相信这就是为什么作者称其为 守护模式 的原因,因此表达式的第一部分避免了 (guards) 表达式的第二部分可能有错误。
如果您删除第一部分,就像在您显示的示例中一样,那么当有 none line
.
中的元素
我刚刚了解到,我认为是这样,这是我为自己创建的定义:监护人模式是一种可能导致错误但不会导致错误的代码,为什么?因为 python 没有完成代码的执行,它只执行了 运行 正确的部分,因为这就足够了。
if len(wds) < 3 or wds[0] != 'From' :
continue
尝试搜索守护模式,但找不到任何可以回答我问题的内容,所以我又来了。在我正在阅读的书中,作者使用了一行他称之为 "the guardian pattern" 的代码,但我真的不明白它是如何工作的。这是示例,如果有人能向我解释一下,我将不胜感激。
while True:
line = raw_input('> ')
if len(line) > 0 and line[0] == '#' :
continue
if line == 'done':
break
print line
print "done!"
为什么,如果行的长度 > 0 且行[0] == '#' : 如果我什么都没有就按回车键,这不会出错吗?该行不会为 0,因此该行不 > 0 吗?如果你把原始代码放在
if line[0] == '#' :
刚按回车就出错了。
Wouldn't the line be 0 and thus line isn't > 0?
如果您直接按回车键,行是 ""
。一个空字符串。此字符串 len(line)
的长度为 0(因此导致您的程序在 and
语句的第一个案例被评估后立即继续。如果您访问空的第一个索引 0
行,它会抛出一个错误。因此,在访问它之前总是检查你是否真的有第一个索引...
so why, if the length of the line > 0 and line[0] == '#' : does it not error if I just hit enter with nothing there.
不,它不会抛出错误。 Python 使用惰性计算,它可以使用 and
运算符进行短路。见 docs.
换句话说,布尔表达式的第二部分,即 line[0] == '#'
,只有当第一部分是 True
.
我相信这就是为什么作者称其为 守护模式 的原因,因此表达式的第一部分避免了 (guards) 表达式的第二部分可能有错误。
如果您删除第一部分,就像在您显示的示例中一样,那么当有 none line
.
我刚刚了解到,我认为是这样,这是我为自己创建的定义:监护人模式是一种可能导致错误但不会导致错误的代码,为什么?因为 python 没有完成代码的执行,它只执行了 运行 正确的部分,因为这就足够了。
if len(wds) < 3 or wds[0] != 'From' :
continue