Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下面的部分是如何工作的?_Python - Fatal编程技术网

Python 下面的部分是如何工作的?

Python 下面的部分是如何工作的?,python,Python,我试图理解以下内容: outer_dir=os.path.expanduser("/home/nsingh/ansible-environments/aws") print (outer_dir) random_names = os.listdir(outer_dir) print (random_names) _____________________________________________________________ inner_dirs = [ os.path.join

我试图理解以下内容:

outer_dir=os.path.expanduser("/home/nsingh/ansible-environments/aws")
print (outer_dir)
random_names = os.listdir(outer_dir)
print (random_names)
_____________________________________________________________
inner_dirs = [
    os.path.join(outer_dir, name, "inventory/group_vars")

    for name in random_names
]

print (inner_dirs)

inner_dirs = [name for name in inner_dirs if os.path.isdir(name)]
__________________________________________________________________
盒子里的部分是我想要清楚地理解的,以及它是如何执行的。有人能帮忙吗?

这些是Python语法元素,允许您在生成器表达式中动态生成列表内容

基本上,展开时,此代码如下所示:

inner_dirs = []
for name in random_names:
    element = os.path.join(outer_dir, name, "inventory/group_vars")
    inner_dirs.append(element)

print(inner_dirs)

new_inner_dirs = []
for name in inner_dirs:
    if os.path.isdir(name):
        new_inner_dirs.append(name)

inner_dirs = new_inner_dirs
这显然不是最优的(包括创建不需要的列表和附加,因此需要更多的时间和内存),因此这种理解可以使循环更清晰、更简洁、更高效

评审顺序如下:

[(3) for i in (1) if (2)]
(1)
在enter时只计算一次,
(2)
(3)
在每次迭代中独立计算一次
(1)
应该是一个iterable对象,
(2)
应该返回一个可以转换为类型
bool

的值?很好,我是一个初学者,想更好地理解python,你能给我一些启动python的链接吗learning@Kittystone如果你擅长阅读技术文献,这是一个潜水的好地方。如果不是,考虑阅读一些关于Python的初学者或在线课程的书——有很多小的东西,<代码> THS.FielyValue= [WaveTykey Key中的Key的GET(key)< /代码>,@ KyTytSt-是的,遵循这个模式的一切:<代码> [(3)i(1)如果(2)] < /代码>(其中,
if
部分是可选的,可以有多个)是一个列表comprehension@Leva7请注意,if只能有一个
(尽管它可以有多个条件)。此外,
if
后面的任何有效语法都将等同于布尔值,这只是该布尔值是否有意义。