python中def内的for循环不会迭代

Posted

技术标签:

【中文标题】python中def内的for循环不会迭代【英文标题】:for loop inside def in python doesn't iterate 【发布时间】:2019-10-01 20:11:15 【问题描述】:

将 argeparse 传递为 us-east-1,us-east-2,us-east-3

# Setup commandline arguments
parser = argparse.ArgumentParser(description='using Terraform')
parser.add_argument(
    '-r',
    '--region',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created')

然后尝试在每个区域进行for循环

for region_1 in ([region]):
  print(region_1)

对于 print(region_1) 它打印所有区域,但我希望它循环迭代并一次打印一个区域。请告诉我可以做什么

【问题讨论】:

region 是可迭代的吗? 你怎么用括号括起来region。不管region 是什么,for 循环的结构只会迭代一次。试试for region_1 in region: 你如何调用你的程序? region 是一个列表,还是一个带逗号的字符串? 【参考方案1】:

如果您想更好地定义应该如何传递参数,这个answer 可以解决您的问题。

例如,您应该像--region 'us-east-1' 'us-east-2' 'us-east-3' 一样传递它。并使用nargs 定义您的参数选项,例如:

parser.add_argument(
    '-r',
    '--region', 
    nargs='+',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created' 
)

在你的情况下,如果你想用逗号分隔一个字符串,只需这样做:

for r in region.split(","):
  print(r)

【讨论】:

【参考方案2】:

您可以通过在argparse 中使用-r/--regions 来实现nargs

$ cat arg.py 
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument(
    '-r',
    '--regions', 
    dest='regions',
    nargs='+',
    required=True,
    help='foo bar'
)

args = parser.parse_args()

for region in args.regions:
    print(region)

$ python arg.py -r us_east us_west us_east1
us_east
us_west
us_east1

【讨论】:

【参考方案3】:

您正在迭代一个包含一个元素的列表:region[region] 是一个包含 region 的列表,就像 [1] 是一个包含 1 的列表一样。

在迭代之前不要将该变量包装在另一个列表中:

for region_1 in region:

【讨论】:

以上是关于python中def内的for循环不会迭代的主要内容,如果未能解决你的问题,请参考以下文章

python跳过for循环

for循环的本质

是否为每次迭代创建了 for 循环内的引用变量声明? [复制]

Shell编程进阶篇(完结)

#yyds干货盘点# 5. Python 循环的本质就是一段代码懒得重复写

Python中for循环搭配else的陷阱