我不明白这段源代码在第3行做了什么,res = [...];
我试图通过在python控制台中用伪变量和res = ['raj' / 'esh'];
一样的语法格式进行测试来理解它,它给出了错误;如果用res = ['raj' and 'esh'];
测试,我总是返回第二个字符串'esh'
,所以我不明白为什么要在行中使用'and'。语法p/o也让我困惑
def _get_files(parent, p, f, extensions):
p = Path(p) #.relative_to(parent)
res = [p/o for o in f if not o.startswith('.')
and (extensions is None or f'.{o.split(".")[-1].lower()}' in extensions)]
return res
参数p
解析为文件路径(字符串),参数f解析为f = [o.name for o in os.scandir(path) if o.is_file()]
;其中,此语法行中的路径是文件路径。能帮我理解第三行吗
['raj' and 'esh']
是一个单元素数组,其唯一元素是'raj'
和'esh'
的结果and
如果是falsy,则计算第一个操作数,否则计算第二个操作数。因为第一个操作数不是假操作数,所以得到'esh'
代码中的行不是一个简单的数组,它是一个理解——基本上是编写构造数组的循环的短方法。理解的一般语法是
如果
y
将循环遍历iterablez
的所有元素,请检查p
是否为true,如果为true,请将x
添加到结果中。在您的例子中,条件(p
)是对于
f
的每个元素o
(可能是一个文件名的iterable),如果这个条件为真,结果列表将获得一个元素,该元素由路径p
与文件名o
(如果乍一看很惊讶,那么/
是一个自然的路径连接运算符)组成代码段中显示的错误命名使问题更加复杂。考虑一下重写:
现在,它读起来几乎像英语,并且非常清楚它在做什么(唯一不可靠的部分是
path/filename
,几乎任何人都可以通过与UNIX路径的类比猜到这可能是什么)它是一个list comprehension
是
相关问题 更多 >
编程相关推荐