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循环不会迭代的主要内容,如果未能解决你的问题,请参考以下文章
是否为每次迭代创建了 for 循环内的引用变量声明? [复制]