关于if statement if not thing is specified after it的问题?
Question about if statement if not thing is specified after it?
我想问三件事。首先,对于第 10 行,这是一个 'else' 语句吗?好像不是这样,如果不是,它有什么作用?
其次,对于第 8 行,我们是说如果 'val' 在列表 char_set 中,那么 return 是假的吗?一般来说,我们会这样写吗?
最后,对于第 5 行,[False for _ in range(128)] 的作用是什么?谢谢!
def unique(string):
if len(string) > 128:
return False
char_set = [False for _ in range(128)]
for char in string:
val = ord(char)
if char_set[val]:
return False
char_set[val] = True
return True
让我们按(代码执行的)时间顺序回答这个问题:
- 第 5 行,
[False for _ in range(128)]
创建了一个包含 128 个 False
值的列表。这是列表理解,可以改写如下:
char_set = []
for _ in range(128):
char_set.append(False)
_
表示从迭代器(range
对象)中读取值,并丢弃它。
- 第8行:
val
是字符的ord
,表示数字。 char_set[val]
为我们提供了索引 val
处的元素,它被初始化为 False
。在您的代码中(特别是第 10 行),这可能会被覆盖为 True
。此处的 if
语句检查该索引中的值是否为 True
.
- 第 10 行:它不是
else
语句,尽管在本例中它的作用相同。在这段代码中,如果第 8 行的条件不满足,那么代码执行流程会像第 9 行一样跳过,“掉线”到第 10 行,然后继续。如果第 8 行中的条件满足(即 char_set[val]
是 True
),则执行第 9 行,并且 return
语句突然结束函数调用,同时返回 False
作为它的结果。
我想问三件事。首先,对于第 10 行,这是一个 'else' 语句吗?好像不是这样,如果不是,它有什么作用?
其次,对于第 8 行,我们是说如果 'val' 在列表 char_set 中,那么 return 是假的吗?一般来说,我们会这样写吗?
最后,对于第 5 行,[False for _ in range(128)] 的作用是什么?谢谢!
def unique(string):
if len(string) > 128:
return False
char_set = [False for _ in range(128)]
for char in string:
val = ord(char)
if char_set[val]:
return False
char_set[val] = True
return True
让我们按(代码执行的)时间顺序回答这个问题:
- 第 5 行,
[False for _ in range(128)]
创建了一个包含 128 个False
值的列表。这是列表理解,可以改写如下:
char_set = []
for _ in range(128):
char_set.append(False)
_
表示从迭代器(range
对象)中读取值,并丢弃它。
- 第8行:
val
是字符的ord
,表示数字。char_set[val]
为我们提供了索引val
处的元素,它被初始化为False
。在您的代码中(特别是第 10 行),这可能会被覆盖为True
。此处的if
语句检查该索引中的值是否为True
. - 第 10 行:它不是
else
语句,尽管在本例中它的作用相同。在这段代码中,如果第 8 行的条件不满足,那么代码执行流程会像第 9 行一样跳过,“掉线”到第 10 行,然后继续。如果第 8 行中的条件满足(即char_set[val]
是True
),则执行第 9 行,并且return
语句突然结束函数调用,同时返回False
作为它的结果。