去掉前导零意味着什么?

2024-04-25 22:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

eval("".join(token.lstrip('0') for token in s.split()))

其中s类似于'02 + 00030 - 76'。你知道吗

我只知道它去掉了0200030前面的零,这样它就可以把它计算成2+30-76。但是,我不明白它到底是怎么做到的。有人能给我解释一下这些功能的组合吗?
非常感谢。你知道吗


Tags: in功能tokenforevalsplitjoinlstrip
3条回答
for token in s.split()

s.split()计算结果为['02', '+', '00030', '-', '76']

然后执行token.strip('0'),通过从每个标记中删除前导0,将列表转换为-['2', '+', '30', '-', '76']。你知道吗

最后"".join([..])将它们连接回'2+30-76'。你知道吗

eval计算此表达式以获得整数。你知道吗

PS:在未初始化的用户输入文本上使用eval是一个非常糟糕的主意。想象一下,如果用户输入一些恶意代码作为输入,将会发生什么。你知道吗

s.split()创建由s的空格分隔部分组成的字符串列表。你知道吗

(... for token in s.split())遍历该列表中的每个字符串。你知道吗

token.lstrip('0')从每个字符串中删除前导零。你知道吗

"".join将所有零删除标记粘在一起,因此"".join(token.lstrip('0') for token in s.split())现在是一个看起来像算术表达式的字符串。你知道吗

eval("".join(token.lstrip('0') for token in s.split()))告诉Python将字符串视为Python代码,因此它返回的是int,而不是str。顺便说一句,使用eval通常是bad idea。你知道吗

最后的结果是原始字符串,删除了空格,作为一个数字进行计算。你知道吗

让我们从里面的表达式开始把它分解。你知道吗

token.lstrip('0') for token in s.split()

在Python中,这是一个生成器表达式。生成器表达式将创建每个元素,一次创建一个元素,这样您就可以实际地将它用于非常大(甚至无限)的情况,而不是计算语句并从表达式创建一个列表并存储在内存中不牺牲性能的序列。你知道吗

s.split()通过将字符串按空格拆分来返回列表。因此,这行的意思是,“对于字符串中的每个标记,去掉字符串开头的所有0。你知道吗

"".join(//result of inner expression)

在Python中,这是一种使用列表创建字符串的有效方法。这基本上是用一个空字符串连接列表中的每个元素。你知道吗

eval

这将参数作为Python表达式进行计算。你知道吗

相关问题 更多 >