根据guido(以及其他一些Python程序员)的说法,隐式字符串文字串联被认为是有害的。因此,我试图识别包含此类串联的逻辑行。
我的第一次(也是唯一的尝试)是使用shlex
;
我曾想过用来分割逻辑线posix=False
,所以我将确定用引号引起来的部分,如果这些部分彼此相邻,则将其视为“文字级联”。
但是,这在多行字符串上失败,如以下示例所示:
shlex.split('""" Some docstring """', posix=False)
# Returns '['""', '" Some docstring "', '""']', which is considered harmful, but it's not
我可以调整这是一些奇怪的临时方法,但是我想知道您是否可以想到一个简单的解决方案。我的意图是将其添加到我已经扩展的pep8
验证程序中。
有趣的问题,我只需要使用它,因为没有答案,所以我发布了该问题的解决方案:
#!/usr/bin/python
import tokenize
import token
import sys
with open(sys.argv[1], 'rU') as f:
toks = list(tokenize.generate_tokens(f.readline))
for i in xrange(len(toks) - 1):
tok = toks[i]
# print tok
tok2 = toks[i + 1]
if tok[0] == token.STRING and tok[0] == tok2[0]:
print "implicit concatenation in line " \
"{} between {} and {}".format(tok[2][0], tok[1], tok2[1])
您可以自己提供程序,结果应该是
implicit concatenation in line 14 between "implicit concatenation in line " and "{} between {} and {}"
对性能是否有影响? 不同Java版本的行为是否有差异?
问题内容: 字符串文字和字符串对象的添加有什么区别? 例如 为什么/ 不指向与相同的位置? 问题答案: 因为不是 常量表达式 ,由于和不是,因此其结果不会被插入,即创建另一个对象来表示它,因此引用比较产生。 JLS 3.10.5字符串文字 : 使用String.intern方法,对字符串常量(或更常见的是常量表达式的值(第15.28节)的字符串)进行“ interned”,以便共享唯一的实例。 J
问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s
当我有一个字符串需要将一个字符连接到它的结尾时,我应该更喜欢超过是否有任何性能原因? 我知道数组字符串连接和字符串生成器,我并不是在询问一般情况下如何连接字符串的建议。 我也知道有些人会有冲动向我解释过早的优化,而且一般来说我不应该为这些小事情费心,请不要... 我之所以问这个问题,是因为从编码风格的偏好来看,我更倾向于使用后一个,但我觉得第一个应该表现得稍微好一点,因为知道所附加的只是一个字符,
问题内容: 当我将用户作为查询字符串(使用$ http中的参数)传递给用户,并设置Web api方法以在uri中寻找用户时,一切都变得如桃子。但是当我按如下所示将其传递时,用户显示为null。我在这里想念什么? 角函数 网络API动作 问题答案: 试试:代替。 在asp.net api中, 整个请求主体 都绑定到一个参数。出于这个原因,你 不能有多个参数 用在动作方法的参数。只有一个=>,我们不需
问题内容: 之间有什么区别 和 问题答案: 当你使用字符串文字时,可以将字符串嵌入,但是当你使用时,你将获得一个新的字符串对象。 在此示例中,两个字符串文字均引用相同的对象: 在这里,创建了2个不同的对象,它们具有不同的引用: 通常,应尽可能使用字符串文字表示法。它更易于阅读,并且为编译器提供了优化代码的机会。