python范围步长不可能使用枚举
仍处于学习Python的早期阶段。我使用range()函数编写了一小段代码:python范围步长不可能使用枚举,python,Python,仍处于学习Python的早期阶段。我使用range()函数编写了一小段代码: str = "horizon" # method 2 def printStrInt(): #print("length of str ",len(str)) for i in range(0,len(str)-1,2): #print("i=",i) print("Method 2",myS
str = "horizon"
# method 2
def printStrInt():
#print("length of str ",len(str))
for i in range(0,len(str)-1,2):
#print("i=",i)
print("Method 2",myStr[i])
# Calling method
print ("Calling Method")
printStrInt()
在此之后,我了解到有一个新概念叫做“枚举器”,因此我尝试将上述内容改写为:
#method 3
str = "horizon"
def printStrIntervals():
for count,stringy in enumerate(str):
print("External to if call count= ",count)
if (count %2 == 0):
print("inside if, count= ",count)
count += 2
print("inside if + increment, count= ",count)
print(stringy)
#calling method
print ("Calling Method 3")
printStrIntervals()
问题在于方法3。“count+=2”调用确实将变量“count”增加了2,但是当“for”循环迭代时,count实际上并没有增加2。您能告诉我什么是使enumerate与Range工作相同的正确方法吗?修改
循环变量的(此处:count
和stringy
)被认为是不好的做法。考虑使用下面的代码代替:
str = "horizon"
def printStrIntervals_mod():
for count,stringy in enumerate(str):
print("External to if call count= ",count)
if (count %2 == 0):
print("inside if, count= ",count)
print(stringy)
#calling function
print("Calling Method 3")
printStrIntervals_mod()
修改循环变量的(此处:count
和stringy
)被认为是不好的做法。考虑使用下面的代码代替:
str = "horizon"
def printStrIntervals_mod():
for count,stringy in enumerate(str):
print("External to if call count= ",count)
if (count %2 == 0):
print("inside if, count= ",count)
print(stringy)
#calling function
print("Calling Method 3")
printStrIntervals_mod()
您违反了enumerate
的使用模型:它用于在数据对象上进行平滑迭代,而不是用于跳转项。它是my_str中stringy的的扩展,而不是count in range(len(my_str))的
此外,任何时候在循环中更改循环索引,都违反了
的假设,并且受语言语义的支配。你试图改变这些语义学,但仅仅用了一句“你不能那样做”,而不是一声崩溃
如果您想进行间歇跳过,只需在
期间构建自己的。这是正确的用法:for
适用于在循环输入时知道要执行循环多少次的情况
count=0
当计数
您违反了枚举的使用模型:它用于在数据对象上进行平滑迭代,而不是跳转项。它是my_str中stringy的的扩展,而不是count in range(len(my_str))的
此外,任何时候在循环中更改循环索引,都违反了
的假设,并且受语言语义的支配。你试图改变这些语义学,但仅仅用了一句“你不能那样做”,而不是一声崩溃
如果您想进行间歇跳过,只需在
期间构建自己的。这是正确的用法:for
适用于在循环输入时知道要执行循环多少次的情况
count=0
当计数
您可能需要注意的是,str
是内置字符串类型的保留字。我会把它命名为string
或s
。预期的输出是什么?此代码应该做什么?对for
循环的变量所做的任何操作都不会对当前迭代产生任何影响-它们将始终被循环的迭代器分配新值enumerate()
与range()
的step参数没有等价物-也许您可以使用enumerate(s[::2])
?它确实会将其递增2,但在下一次迭代中,它会从迭代器中分配值。您可能需要注意的是,str
是内置字符串类型的保留字。我会把它命名为string
或s
。预期的输出是什么?此代码应该做什么?对for
循环的变量所做的任何操作都不会对当前迭代产生任何影响-它们将始终被循环的迭代器分配新值enumerate()
与range()
的step参数没有等效项-也许您可以使用enumerate(s[::2])
?它确实会将其递增2,但在下一次迭代中,它是从迭代中赋值的。你可以随意修改循环变量。你只需了解这意味着什么,以及在每次迭代中如何为循环变量赋值。你可以随意修改循环变量。你只需了解这意味着什么,以及在每次迭代中如何为循环变量赋值