# Python `for`循环

> 原文： [https://www.programiz.com/python-programming/for-loop](https://www.programiz.com/python-programming/for-loop)

#### 在本文中，您将学习使用`for`循环的不同变体对元素序列进行迭代。

## 什么是 Python 中的`for`循环？

Python 中的`for`循环用于迭代序列（[列表](https://www.programiz.com/python-programming/list)，[元组](https://www.programiz.com/python-programming/tuple)，[字符串](https://www.programiz.com/python-programming/string)）或其他可迭代对象。 在序列上进行迭代称为遍历。

### `for`循环的语法

```py
for val in sequence:
	Body of for
```

在这里，`val`是在每次迭代中获取序列内项目值的变量。

循环继续，直到我们到达序列中的最后一项。 `for`循环的主体使用缩进与其余代码分开。

### `for`循环流程图

![Flowchart of for Loop in Python programming](img/bfd5149358cdcbca75d37d4f1c4a1f3e.png "for Loop Flowchart")

Python 中`for`循环的流程图



### 示例：Python `for`循环

```py
# Program to find the sum of all numbers stored in a list

# List of numbers
numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11]

# variable to store the sum
sum = 0

# iterate over the list
for val in numbers:
	sum = sum+val

print("The sum is", sum) 
```

运行该程序时，输出为：

```py
The sum is 48
```

* * *

## `range()`函数

我们可以使用`range()`函数生成数字序列。`range(10)`将生成 0 到 9 之间的数字（10 个数字）。

我们还可以将开始，停止和步长定义为`range(start, stop,step_size)`。 如果未提供，则`step_size`默认为 1。

从某种意义上讲，`range`对象是“惰性”的，因为在创建它时，它不会生成它“包含”的每个数字。 但是，它不是迭代器，因为它支持`in`，`len`和`__getitem__`操作。

此函数不会将所有值存储在内存中； 这将是低效的。 因此它会记住开始，停止，步长并在旅途中生成下一个数字。

要强制此函数输出所有项目，我们可以使用函数`list()`。

以下示例将阐明这一点。

```py
print(range(10))

print(list(range(10)))

print(list(range(2, 8)))

print(list(range(2, 20, 3)))
```

**输出**

```py
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7]
[2, 5, 8, 11, 14, 17]
```

我们可以在`for`循环中使用`range()`函数来迭代数字序列。 它可以与`len()`函数结合使用索引来遍历序列。 这是一个例子。

```py
# Program to iterate through a list using indexing

genre = ['pop', 'rock', 'jazz']

# iterate over the list using index
for i in range(len(genre)):
	print("I like", genre[i])
```

**输出**：

```py
I like pop
I like rock
​I like jazz
```

* * *

## 循环与`else`

`for`循环也可以具有可选的`else`块。 如果`for`循环的序列中的项目用尽，则会执行`else`部分。

`break`关键字可用于停止`for`循环。 在这种情况下，其他部分将被忽略。

因此，如果没有中断发生，则`for`循环的`else`部分将运行。

这是一个例子来说明这一点。

```py
digits = [0, 1, 5]

for i in digits:
    print(i)
else:
    print("No items left.")
```

当你运行程序时，输出将是：

```py
0
1
5
No items left.
```

在这里，`for`循环打印列表中的项目，直到循环用尽。 当`for`循环用完时，它将执行`else`中的代码块并打印。

仅当未执行`break`关键字时，此`for...else`语句才能与`break`关键字一起使用以运行`else`块。 让我们举个例子：

```py
# program to display student's marks from record
student_name = 'Soyuj'

marks = {'James': 90, 'Jules': 55, 'Arthur': 77}

for student in marks:
    if student == student_name:
        print(marks[student])
        break
else:
    print('No entry with that name found.')
```

**输出**：

```py
No entry with that name found.
```