Cách bắt đầu lại vòng lặp trong Python

Bạn sẽ bắt đầu bằng việc so sánh một số mô hình khác nhau được các ngôn ngữ lập trình sử dụng để triển khai phép lặp xác định

  • Sau đó, bạn sẽ tìm hiểu về iterables và iterators, hai khái niệm tạo thành nền tảng của phép lặp xác định trong Python

  • Cuối cùng, bạn sẽ liên kết tất cả lại với nhau và tìm hiểu về vòng lặp

    for  in :
        
    
    0 của Python

  • Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn

    Khảo sát về phép lặp xác định trong lập trình

    Các vòng lặp xác định thường được gọi là vòng lặp

    for  in :
        
    
    0 vì
    for  in :
        
    
    0 là từ khóa được sử dụng để giới thiệu chúng trong hầu hết các ngôn ngữ lập trình, bao gồm cả Python

    Trong lịch sử, các ngôn ngữ lập trình đã cung cấp một số loại vòng lặp

    for  in :
        
    
    0. Chúng được mô tả ngắn gọn trong các phần sau

    Loại bỏ các quảng cáo

    Vòng lặp phạm vi số

    Vòng lặp

    for  in :
        
    
    0 cơ bản nhất là một câu lệnh phạm vi số đơn giản với các giá trị bắt đầu và kết thúc. Định dạng chính xác khác nhau tùy thuộc vào ngôn ngữ nhưng thường trông giống như thế này

    for i = 1 to 10
        
    

    Ở đây, phần thân của vòng lặp được thực hiện mười lần. Biến

    for  in :
        
    
    7 nhận giá trị
    for  in :
        
    
    8 trong lần lặp đầu tiên,
    for  in :
        
    
    9 trong lần lặp thứ hai, v.v. Loại vòng lặp
    for  in :
        
    
    0 này được sử dụng trong các ngôn ngữ BASIC, Algol và Pascal

    Vòng lặp ba biểu thức

    Một dạng khác của vòng lặp

    for  in :
        
    
    0 được phổ biến bởi ngôn ngữ lập trình C có ba phần

    • Một khởi tạo
    • Một biểu thức xác định một điều kiện kết thúc
    • Một hành động được thực hiện ở cuối mỗi lần lặp

    Loại vòng lặp này có dạng như sau

    for [i = 1; i >> a = ['foo', 'bar', 'baz']
    >>> for i in a:
    ..     print[i]
    ...
    foo
    bar
    baz
    
    2 tăng biến
    for  in :
        
    
    7. Nó gần tương đương với
    >>> a = ['foo', 'bar', 'baz']
    >>> for i in a:
    ..     print[i]
    ...
    foo
    bar
    baz
    
    4 trong Python

    Vòng lặp này được hiểu như sau

    • Khởi tạo
      for  in :
          
      
      7 thành
      for  in :
          
      
      8
    • Tiếp tục lặp miễn là
      >>> a = ['foo', 'bar', 'baz']
      >>> for i in a:
      ..     print[i]
      ...
      foo
      bar
      baz
      
      7
    • Tăng
      for  in :
          
      
      7 lên
      for  in :
          
      
      8 sau mỗi lần lặp vòng lặp

    Các vòng lặp

    for  in :
        
    
    0 ba biểu thức rất phổ biến vì các biểu thức được chỉ định cho ba phần có thể gần như bất kỳ thứ gì, vì vậy điều này linh hoạt hơn một chút so với dạng phạm vi số đơn giản hơn được hiển thị ở trên. Các vòng lặp
    for  in :
        
    
    0 này cũng có trong các ngôn ngữ C++, Java, PHP và Perl

    Vòng lặp dựa trên bộ sưu tập hoặc dựa trên Iterator

    Loại vòng lặp này lặp qua một tập hợp các đối tượng, thay vì chỉ định các giá trị hoặc điều kiện số

    for i in 
        
    

    Mỗi lần qua vòng lặp, biến

    for  in :
        
    
    7 nhận giá trị của đối tượng tiếp theo trong
    >>> iter['foobar']                             # String
    
    
    >>> iter[['foo', 'bar', 'baz']]                # List
    
    
    >>> iter[['foo', 'bar', 'baz']]                # Tuple
    
    
    >>> iter[{'foo', 'bar', 'baz'}]                # Set
    
    
    >>> iter[{'foo': 1, 'bar': 2, 'baz': 3}]       # Dict
    
    
    3. Loại vòng lặp
    for  in :
        
    
    0 này được cho là khái quát và trừu tượng nhất. Perl và PHP cũng hỗ trợ loại vòng lặp này, nhưng nó được giới thiệu bởi từ khóa
    >>> iter['foobar']                             # String
    
    
    >>> iter[['foo', 'bar', 'baz']]                # List
    
    
    >>> iter[['foo', 'bar', 'baz']]                # Tuple
    
    
    >>> iter[{'foo', 'bar', 'baz'}]                # Set
    
    
    >>> iter[{'foo': 1, 'bar': 2, 'baz': 3}]       # Dict
    
    
    5 thay vì
    for  in :
        
    
    0

    Đọc thêm. Xem trang Wikipedia vòng lặp For để có cái nhìn sâu hơn về việc triển khai phép lặp xác định trên các ngôn ngữ lập trình

    Vòng lặp
    for  in :
        
    
    0 của Python

    Trong số các loại vòng lặp được liệt kê ở trên, Python chỉ thực hiện vòng lặp cuối cùng. lặp lại dựa trên bộ sưu tập. Thoạt nhìn, điều đó có vẻ giống như một thỏa thuận thô sơ, nhưng hãy yên tâm rằng việc triển khai phép lặp xác định của Python rất linh hoạt nên cuối cùng bạn sẽ không cảm thấy bị lừa

    Trong thời gian ngắn, bạn sẽ tìm hiểu chi tiết về vòng lặp

    for  in :
        
    
    0 của Python. Nhưng bây giờ, hãy bắt đầu với một nguyên mẫu và ví dụ nhanh, chỉ để làm quen

    Vòng lặp

    for  in :
        
    
    0 của Python trông như thế này

    for  in :
        
    

    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    0 là một tập hợp các đối tượng—ví dụ: danh sách hoặc bộ.
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    1 trong thân vòng lặp được biểu thị bằng dấu thụt đầu dòng, như với tất cả các cấu trúc điều khiển Python và được thực thi một lần cho mỗi mục trong
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    0. Biến vòng lặp
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    3 nhận giá trị của phần tử tiếp theo trong
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    0 mỗi lần qua vòng lặp

    Đây là một ví dụ đại diện

    >>>

    >>> a = ['foo', 'bar', 'baz']
    >>> for i in a:
    ..     print[i]
    ...
    foo
    bar
    baz
    

    Trong ví dụ này,

    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    0 là danh sách
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    6 và
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    3 là biến
    for  in :
        
    
    7. Mỗi lần qua vòng lặp,
    for  in :
        
    
    7 nhận một mục liên tiếp trong
    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    6, do đó,
    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    1 hiển thị các giá trị lần lượt là
    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    2,
    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    3 và
    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    4. Một vòng lặp
    for  in :
        
    
    0 như thế này là cách Pythonic để xử lý các mục trong một lần lặp

    Nhưng chính xác thì iterable là gì?

    Loại bỏ các quảng cáo

    Iterables

    Trong Python, iterable có nghĩa là một đối tượng có thể được sử dụng trong phép lặp. Thuật ngữ này được sử dụng như

    • Một tính từ. Một đối tượng có thể được mô tả là có thể lặp lại
    • Một danh từ. Một đối tượng có thể được đặc trưng như một iterable

    Nếu một đối tượng có thể lặp lại, nó có thể được chuyển đến hàm Python tích hợp sẵn

    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    7, hàm này trả về một thứ gọi là trình lặp. Có, thuật ngữ hơi lặp lại. Cố lên. Cuối cùng thì tất cả cũng thành công

    Mỗi đối tượng trong ví dụ sau là một iterable và trả về một số loại iterator khi được chuyển đến

    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    7

    >>>

    >>> iter['foobar']                             # String
    
    
    >>> iter[['foo', 'bar', 'baz']]                # List
    
    
    >>> iter[['foo', 'bar', 'baz']]                # Tuple
    
    
    >>> iter[{'foo', 'bar', 'baz'}]                # Set
    
    
    >>> iter[{'foo': 1, 'bar': 2, 'baz': 3}]       # Dict
    
    

    Mặt khác, các loại đối tượng này không thể lặp lại

    >>>

    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    

    Tất cả các loại dữ liệu bạn đã gặp cho đến nay là loại bộ sưu tập hoặc bộ chứa đều có thể lặp lại. Chúng bao gồm chuỗi, , , dict, set và các loại

    Nhưng đây không phải là những kiểu duy nhất mà bạn có thể lặp lại. Nhiều đối tượng được tích hợp vào Python hoặc được định nghĩa trong các mô-đun được thiết kế để có thể lặp lại. Ví dụ: các tệp đang mở trong Python có thể lặp lại. Như bạn sẽ sớm thấy trong phần hướng dẫn về tệp I/O, việc lặp qua một đối tượng tệp đang mở sẽ đọc dữ liệu từ tệp

    Trên thực tế, hầu hết mọi đối tượng trong Python đều có thể được lặp lại. Ngay cả các đối tượng do người dùng định nghĩa cũng có thể được thiết kế theo cách mà chúng có thể được lặp đi lặp lại. [Bạn sẽ tìm hiểu cách thực hiện điều đó trong bài viết sắp tới về lập trình hướng đối tượng. ]

    vòng lặp

    Được rồi, bây giờ bạn đã biết ý nghĩa của việc một đối tượng có thể lặp lại và bạn biết cách sử dụng

    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    7 để lấy một trình vòng lặp từ đối tượng đó. Khi bạn đã có một iterator, bạn có thể làm gì với nó?

    Trình lặp về cơ bản là trình tạo giá trị tạo ra các giá trị liên tiếp từ đối tượng có thể lặp được liên kết của nó. Hàm tích hợp

    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    0 được sử dụng để lấy giá trị tiếp theo từ trong iterator

    Đây là một ví dụ sử dụng cùng một danh sách như trên

    >>>

    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    

    Trong ví dụ này,

    >>> iter[42]                                   # Integer
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[42]
    TypeError: 'int' object is not iterable
    
    >>> iter[3.1]                                  # Float
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[3.1]
    TypeError: 'float' object is not iterable
    
    >>> iter[len]                                  # Built-in function
    Traceback [most recent call last]:
      File "", line 1, in 
        iter[len]
    TypeError: 'builtin_function_or_method' object is not iterable
    
    6 là một danh sách có thể lặp lại và
    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    2 là trình vòng lặp được liên kết, thu được với
    >>> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    7. Mỗi cuộc gọi
    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    4 nhận được giá trị tiếp theo từ
    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    2

    Lưu ý cách một iterator giữ trạng thái bên trong. Nó biết những giá trị nào đã được lấy, vì vậy khi bạn gọi

    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    0, nó sẽ biết giá trị nào sẽ trả về tiếp theo

    Điều gì xảy ra khi iterator hết giá trị?

    >>>

    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    

    Nếu tất cả các giá trị từ một iterator đã được trả về, một cuộc gọi

    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    0 tiếp theo sẽ tạo ra một ngoại lệ
    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    9. Mọi nỗ lực tiếp theo để lấy giá trị từ trình vòng lặp sẽ không thành công

    Bạn chỉ có thể lấy các giá trị từ một trình vòng lặp theo một hướng. Bạn không thể đi lùi. Không có chức năng

    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    0. Nhưng bạn có thể định nghĩa hai trình vòng lặp độc lập trên cùng một đối tượng có thể lặp lại

    >>>

    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    

    Ngay cả khi iterator

    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    1 đã ở cuối danh sách, thì
    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    2 vẫn ở đầu. Mỗi iterator duy trì trạng thái bên trong của chính nó, độc lập với các iterator khác

    Nếu bạn muốn lấy tất cả các giá trị từ một trình vòng lặp cùng một lúc, bạn có thể sử dụng hàm

    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    3 tích hợp. Trong số các cách sử dụng có thể khác,
    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    3 lấy một trình vòng lặp làm đối số của nó và trả về một danh sách bao gồm tất cả các giá trị mà trình vòng lặp mang lại

    >>>

    for [i = 1; i >> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    5 và
    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    6 tích hợp lần lượt trả về một bộ và một tập hợp từ tất cả các giá trị mà trình vòng lặp tạo ra

    >>>

    for [i = 1; i >> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    0. Các mục không được tạo cho đến khi chúng được yêu cầu

    Khi bạn sử dụng

    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    3,
    >>> a
    ['foo', 'bar', 'baz']
    
    >>> itr1 = iter[a]
    >>> itr2 = iter[a]
    
    >>> next[itr1]
    'foo'
    >>> next[itr1]
    'bar'
    >>> next[itr1]
    'baz'
    
    >>> next[itr2]
    'foo'
    
    5 hoặc tương tự, bạn đang buộc trình vòng lặp tạo tất cả các giá trị của nó cùng một lúc, vì vậy tất cả chúng có thể được trả về. Nếu tổng số đối tượng mà trình vòng lặp trả về rất lớn, có thể mất nhiều thời gian

    Trên thực tế, có thể tạo một trình lặp trong Python trả về một chuỗi đối tượng vô tận bằng cách sử dụng các hàm tạo và

    for [i = 1; i >> a = ['foo', 'bar', 'baz']
    
    >>> itr = iter[a]
    >>> itr
    
    
    >>> next[itr]
    'foo'
    >>> next[itr]
    'bar'
    >>> next[itr]
    'baz'
    
    7Hàm tích hợp được sử dụng để lấy một trình vòng lặp từ một

    Bây giờ, hãy xem xét lại vòng lặp

    for  in :
        
    
    0 đơn giản được trình bày ở phần đầu của hướng dẫn này

    >>>

    >>> a = ['foo', 'bar', 'baz']
    >>> for i in a:
    ..     print[i]
    ...
    foo
    bar
    baz
    

    Vòng lặp này có thể được mô tả hoàn toàn bằng các khái niệm bạn vừa học về. Để thực hiện phép lặp vòng lặp

    for  in :
        
    
    0 này mô tả, Python thực hiện như sau

    • Gọi
      >>> a = ['foo', 'bar', 'baz']
      
      >>> itr = iter[a]
      >>> itr
      
      
      >>> next[itr]
      'foo'
      >>> next[itr]
      'bar'
      >>> next[itr]
      'baz'
      
      7 để lấy iterator cho
      >>> iter[42]                                   # Integer
      Traceback [most recent call last]:
        File "", line 1, in 
          iter[42]
      TypeError: 'int' object is not iterable
      
      >>> iter[3.1]                                  # Float
      Traceback [most recent call last]:
        File "", line 1, in 
          iter[3.1]
      TypeError: 'float' object is not iterable
      
      >>> iter[len]                                  # Built-in function
      Traceback [most recent call last]:
        File "", line 1, in 
          iter[len]
      TypeError: 'builtin_function_or_method' object is not iterable
      
      6
    • Gọi liên tục _______55_______0 để lấy lần lượt từng mục từ iterator
    • Chấm dứt vòng lặp khi
      >>> next[itr]
      Traceback [most recent call last]:
        File "", line 1, in 
          next[itr]
      StopIteration
      
      0 tăng ngoại lệ
      >>> next[itr]
      Traceback [most recent call last]:
        File "", line 1, in 
          next[itr]
      StopIteration
      
      9

    Thân vòng lặp được thực hiện một lần cho mỗi mục

    >>> next[itr]
    Traceback [most recent call last]:
      File "", line 1, in 
        next[itr]
    StopIteration
    
    0 trả về, với biến vòng lặp
    for  in :
        
    
    7 được đặt thành mục đã cho cho mỗi lần lặp

    Chuỗi sự kiện này được tóm tắt trong sơ đồ sau

    Sơ đồ của một Python cho vòng lặp

    Có lẽ điều này có vẻ giống như rất nhiều công việc khỉ không cần thiết, nhưng lợi ích là đáng kể. Python xử lý việc lặp qua tất cả các lần lặp theo cách chính xác theo cách này và trong Python, rất nhiều lần lặp và trình vòng lặp

    • Nhiều đối tượng tích hợp và thư viện có thể lặp lại

    • Có một mô-đun Thư viện chuẩn có tên là

      for [i = 1; i >> a = ['foo', 'bar', 'baz']
      
      >>> itr = iter[a]
      >>> itr
      
      
      >>> next[itr]
      'foo'
      >>> next[itr]
      'bar'
      >>> next[itr]
      'baz'
      
      7, vì vậy bạn biết rằng các từ điển phải có thể lặp lại được. Điều gì xảy ra khi bạn lặp qua một từ điển?

      >>>

      for [i = 1; i >> 
      for [i = 1; i > 
      for [i = 1; i >> 
      for [i = 1; i > 
      for [i = 1; i >> 
      for [i = 1; i  a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      3 hoặc
      >>> a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      5. Trong phiên REPL, đó có thể là một cách thuận tiện để hiển thị nhanh các giá trị

      >>>

      for i in 
          
      
      2

      Tuy nhiên, khi

      for [i = 1; i >> a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      3 hoặc
      >>> a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      5 theo cách này thường được coi là thông lệ kém. Giống như các trình vòng lặp, các đối tượng
      for [i = 1; i >> a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      3 hoặc
      >>> a
      ['foo', 'bar', 'baz']
      
      >>> itr1 = iter[a]
      >>> itr2 = iter[a]
      
      >>> next[itr1]
      'foo'
      >>> next[itr1]
      'bar'
      >>> next[itr1]
      'baz'
      
      >>> next[itr2]
      'foo'
      
      5 trên đối tượng
      for [i = 1; i  
      for i in 
          
      
      4

      Tất cả các tham số được chỉ định cho

      for [i = 1; i 

    Chủ Đề