Python 不带for块的单线函数调用?

Python 不带for块的单线函数调用?,python,python-3.x,Python,Python 3.x,在Python中,是否可以通过iterable对函数进行单行调用 背景: 假设我想在目录列表中创建一个子目录。传统上,我会使用列表理解来构建所需子目录路径的列表: subs=[os.path.join(root,“sub”)表示根中的根] 其中root是目录列表。然后,我必须为块创建一个,以调用os.mkdir(): 问题: 是否可以使用发电机来实现这一点 我试过: os.mkdir(os.path.join(root,“sub”)表示根中的根) 但是它抛出一个类型错误,表示不接受生成器。是的,

在Python中,是否可以通过iterable对函数进行单行调用

背景:

假设我想在目录列表中创建一个子目录。传统上,我会使用列表理解来构建所需子目录路径的列表:

subs=[os.path.join(root,“sub”)表示根中的根]

其中
root
是目录列表。然后,我必须为块创建一个
,以调用
os.mkdir()

问题:

是否可以使用发电机来实现这一点

我试过:
os.mkdir(os.path.join(root,“sub”)表示根中的根)

但是它抛出一个
类型错误
,表示不接受生成器。

是的,您可以执行以下操作:

[os.mkdir(os.path.join(root, "sub")) for root in roots]
这是因为即使不将列表的结果分配到任何地方,也会执行列表理解。
os.mkdir
调用将返回
None
,因此结果将是一个
None
s的列表(您不需要关心这些),但函数会产生效果

现在,这一点还是有争议的:

for root in roots:
    os.mkdir(os.path.join(root, "sub"))
甚至:

for root in roots: os.mkdir(os.path.join(root, "sub"))

更具可读性,因为人们通常期望列表理解生成列表和循环以执行操作,因此,例如,如果在理解中查看代码,则很容易忽略实际上正在创建文件夹。但是如果您愿意,您可以。

您可以将循环重写为列表。但你真的不应该。因为你不想创建一个新的列表。您正在尝试在循环中执行命令。这就是正常的
for
语句的作用。单行:
for subs中的sub:os.mkdir(sub)
@AshwiniChaudhary不能解决问题。在执行之前,仍然需要创建
subs
,我正在尝试不创建另一个列表对象。然后执行:
对于sub-in(os.path.join(root),“sub”)对于root-in-root:os.mkdir(sub)
。我不知道我可以使用列表理解来实现这一点。很高兴知道。虽然
for
块是传统的,但它只是从程序中删除额外的行来构建列表,然后为每个列表创建后续的
for
循环。宁愿使用带有视图
#
注释的单行程序来解释。@datta如果您要为这些简单的东西添加注释,那么您就做错了。for循环更明显,不需要任何解释。我真的不喜欢专门为产生副作用而编写的列表理解。我的两分钱。
for root in roots: os.mkdir(os.path.join(root, "sub"))