【发布时间】:2021-06-11 03:21:21
【问题描述】:
我会保持简短。 我正在审查十六进制过滤器的代码(过滤掉非字符 ASCII 值)
代码:
HEX_FILTER = ''.join([(len(repr(chr(i))) == 3) and chr(i) or '.' for i in range(256)])
输出:
................................ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~..................................¡¢£¤¥¦§¨©ª«¬.®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
我对发生的事情感到困惑,所以我写了我的方法来获得高于输出。我的代码如下:
HEX_FILTER = ''.join(['.' if (len(repr(chr(i))) != 3) else chr(i) for i in range(256)])
这个想法是repr 的非字母将超过 3。如果不是 3 使用 '.'否则使用该字符。
我无法思考len(repr(chr(i))) == 3) and chr(i) or '.' 等于'.' if (len(repr(chr(i))) != 3) else chr(i) 的方式
【问题讨论】:
-
查看是否存在差异的一种简单方法是编写一个脚本来循环遍历 2 个代码版本的 3 个部分的所有 T/F 值,并打印出一个真值表每个。只有 2^3 = 8 种组合。但也许你已经知道没有区别,因为那是你的问题......
-
是的,我知道这两个代码产生相同的结果。我有点惊讶地注意到
and和or被使用而不是if和else。这让我想知道,其中哪一个在时间复杂度方面是有效的。有没有办法在复杂的 if-else 分支中使用and和or,更多关于幕后发生的事情 -
@xdhmoore
and和or运算符适用于支持在布尔上下文中评估的 any 对象,因此有 许多更多可能的组合进行测试。 -
@mkrieger1 是的,我认为你是对的。特别是因为 AND/OR 运算符不会转换为布尔值,而是通过原始值作为 trincot 的答案提到的。
标签: python python-3.x string if-statement logical-operators