-1

我对 python 语法很陌生……or在这种情况下如何使用运算符?

要检查文件是否以 '.txt' 或 '.sm3dump' 结尾,我尝试使用any(),但出现 SyntaxError:

if any(filename.endswith('.txt'), filename.endswith('.sm3dump'))
                                                               ^
SyntaxError: invalid syntax

我做错了什么?

4

1 回答 1

4

any()使用两个参数进行了调用:

any(filename.endswith('.txt'), filename.endswith('.sm3dump'))
#   <----- argument #1 ----->  <------- argument #2 ------->

...但它只需要一个,它必须是可迭代的(列表、元组等):

any([filename.endswith('.txt'), filename.endswith('.sm3dump')])
#   <-------------- one list with two elements -------------->

如果您想or改用,这很简单:

filename.endswith('.txt') or filename.endswith('.sm3dump')

any()用于执行多个类似测试时的一个常见习惯用法是使用列表推导式生成器表达式

any([filename.endswith(ext) for ext in ('.txt', '.sm3dump')])
#   <----------------- list comprehension ----------------->
any(filename.endswith(ext) for ext in ('.txt', '.sm3dump'))
#   <-------- generator expression (no brackets) -------->

尽管在这种情况下,您实际上可以向 提供一个字符串元组str.endswith(),它会检查它们:

filename.endswith(('.txt', '.sm3dump'))

无论您使用哪种测试,您都需要记住以if冒号结束您的语句:

if filename.endswith(('.txt', '.sm3dump')):
    # do something ...
于 2015-03-24T22:02:31.980 回答