Hướng dẫn for loop in python with variable - vòng lặp for trong python với biến

Tương tự với mã c

Bạn đang tưởng tượng rằng

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2
7 của bạn trong Python giống như mã C này:

for [int i = 0; i < 10; i++]
    if [i == 5]
        i += 3;

Nó giống như mã C này:

int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
    int i = r[j];
    if [i == 5]
        i += 3;
}

Vì vậy, việc sửa đổi

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2
8 trong vòng lặp không có tác dụng bạn mong đợi.

Ví dụ tháo gỡ

Bạn có thể nhìn vào việc tháo gỡ mã Python để xem điều này:

>>> from dis import dis
>>> def foo[]:
...     for i in range [0,10]:
...         if i==5:
...             i+=3
...         print i
... 
>>> dis[foo]
  2           0 SETUP_LOOP              53 [to 56]
              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
             15 GET_ITER            
        >>   16 FOR_ITER                36 [to 55]
             19 STORE_FAST               0 [i]

  3          22 LOAD_FAST                0 [i]
             25 LOAD_CONST               3 [5]
             28 COMPARE_OP               2 [==]
             31 POP_JUMP_IF_FALSE       47

  4          34 LOAD_FAST                0 [i]
             37 LOAD_CONST               4 [3]
             40 INPLACE_ADD         
             41 STORE_FAST               0 [i]
             44 JUMP_FORWARD             0 [to 47]

  5     >>   47 LOAD_FAST                0 [i]
             50 PRINT_ITEM          
             51 PRINT_NEWLINE       
             52 JUMP_ABSOLUTE           16
        >>   55 POP_BLOCK           
        >>   56 LOAD_CONST               0 [None]
             59 RETURN_VALUE        
>>> 

Phần này tạo ra một phạm vi từ 0 đến 10 và nhận ra nó:

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2

Tại thời điểm này, đỉnh của ngăn xếp chứa phạm vi.

Điều này nhận được một trình lặp trên đối tượng trên đỉnh của ngăn xếp, tức là phạm vi:

         15 GET_ITER  

Tại thời điểm này, đỉnh của ngăn xếp chứa một trình lặp qua phạm vi nhận ra.

For_iter bắt đầu lặp lại trên vòng lặp bằng cách sử dụng trình lặp ở đầu estack:

    >>   16 FOR_ITER                36 [to 55]

Tại thời điểm này, phần trên của ngăn xếp chứa giá trị tiếp theo của trình lặp.

Và ở đây bạn có thể thấy rằng đỉnh của ngăn xếp được bật và gán cho

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2
8:

         19 STORE_FAST               0 [i]

Vì vậy,

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2
8 sẽ bị ghi đè bất kể bạn làm gì trong vòng lặp.

Đây là một cái nhìn tổng quan về các máy ngăn xếp nếu bạn chưa thấy điều này trước đây.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đối với các vòng lặp trong Python [Lặp lại xác định] This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: For Loops in Python [Definite Iteration]

Hướng dẫn này sẽ chỉ cho bạn cách thực hiện lần lặp xác định với vòng lặp Python

         15 GET_ITER  
1.definite iteration with a Python
         15 GET_ITER  
1 loop.

Trong hướng dẫn trước đây trong loạt giới thiệu này, bạn đã học được như sau:

  • Việc thực hiện lặp đi lặp lại của cùng một khối mã lặp đi lặp lại được gọi là lặp.iteration.
  • Có hai loại lặp:
    • Lặp lại xác định, trong đó số lần lặp lại được chỉ định trước iteration, in which the number of repetitions is specified explicitly in advance
    • Lặp lại không xác định, trong đó khối mã thực thi cho đến khi một số điều kiện được đáp ứng iteration, in which the code block executes until some condition is met
  • Trong Python, lần lặp không xác định được thực hiện với vòng lặp
             15 GET_ITER  
    
    2.

Ở đây, những gì bạn bao gồm trong hướng dẫn này:

  • Bạn sẽ bắt đầu với việc so sánh một số mô hình khác nhau được sử dụng bởi các ngôn ngữ lập trình để thực hiện lặp lại xác định.

  • Sau đó, bạn sẽ tìm hiểu về Iterables và Iterators, hai khái niệm tạo thành cơ sở của việc lặp lại xác định trong Python.iterables and iterators, two concepts that form the basis of definite iteration in Python.

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

Một cuộc khảo sát về lặp lại xác định trong lập trình

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

         15 GET_ITER  
1 vì
         15 GET_ITER  
1 là từ khóa được sử dụng để giới thiệu chúng trong gần như tất cả các ngôn ngữ lập trình, bao gồm cả Python.
         15 GET_ITER  
1
loops because
         15 GET_ITER  
1 is the keyword that is used to introduce them in nearly all programming languages, including Python.

Trong lịch sử, các ngôn ngữ lập trình đã cung cấp một vài hương vị của vòng lặp

         15 GET_ITER  
1. Đây được mô tả ngắn gọn trong các phần sau.

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

Vòng lặp

         15 GET_ITER  
1 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, cơ thể của vòng lặp được thực hiện mười lần. Biến

          3 LOAD_GLOBAL              0 [range]
          6 LOAD_CONST               1 [0]
          9 LOAD_CONST               2 [10]
         12 CALL_FUNCTION            2
8 giả định giá trị
         15 GET_ITER  
9 trên lần lặp thứ nhất,
    >>   16 FOR_ITER                36 [to 55]
0 trên thứ hai, v.v. Loại vòng
         15 GET_ITER  
1 này được sử dụng trong các ngôn ngữ Basic, algol và pascal.

Vòng lặp ba biểu hiện

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

         15 GET_ITER  
1 được phổ biến bởi ngôn ngữ lập trình C chứa ba phần:

  • Một khởi tạo
  • Một biểu thức chỉ đị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ó hình thức sau:

for [i = 1; i >   16 FOR_ITER                36 [to 55]
5.
  • Tăng
              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    8 bằng
             15 GET_ITER  
    
    9 sau mỗi lần lặp lại vòng lặp.
  • Các vòng lặp ba biểu hiện

             15 GET_ITER  
    
    1 rất phổ biến vì các biểu thức được chỉ định cho ba phần có thể là gần như mọi thứ, vì vậy điều này có độ 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
             15 GET_ITER  
    
    1 này cũng được giới thiệu 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 vòng lặp

    Loại vòng lặp này lặp lại trên 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 thông qua vòng lặp, biến

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    8 có giá trị của đối tượng tiếp theo trong
             19 STORE_FAST               0 [i]
    
    1. Loại vòng
             15 GET_ITER  
    
    1 này được cho là tổng 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
             19 STORE_FAST               0 [i]
    
    3 thay vì
             15 GET_ITER  
    
    1.

    Vòng lặp Python
             15 GET_ITER  
    
    1

    Trong số các loại vòng được liệt kê ở trên, Python chỉ thực hiện lần lặp lại cuối cùng: Lặp lại dựa trên bộ sưu tập. Lúc đầu, điều đó có vẻ như là một thỏa thuận thô, nhưng hãy yên tâm rằng việc thực hiện Python, việc lặp lại xác định rất linh hoạt đến nỗi bạn đã giành được cảm giác bị lừa!

    Một thời gian ngắn, bạn sẽ đào sâu vào các ruột của Python từ

             15 GET_ITER  
    
    1 một cách chi tiết. Nhưng bây giờ, hãy để bắt đầu với một nguyên mẫu và ví dụ nhanh chóng, chỉ để làm quen.

    Vòng lặp Python từ

             15 GET_ITER  
    
    1 trông như thế này:

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    0

             19 STORE_FAST               0 [i]
    
    8 là một tập hợp các đối tượng, ví dụ, một danh sách hoặc tuple.
             19 STORE_FAST               0 [i]
    
    9 trong thân vòng được biểu thị bằng vết lõm, như với tất cả các cấu trúc điều khiển Python và được thực hiện một lần cho mỗi mục trong
             19 STORE_FAST               0 [i]
    
    8. Biến vòng lặp
    for i = 1 to 10
        
    
    1 có giá trị của phần tử tiếp theo trong
             19 STORE_FAST               0 [i]
    
    8 mỗi lần thông qua vòng lặp.

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

    >>>

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    1

    Trong ví dụ này,

             19 STORE_FAST               0 [i]
    
    8 là danh sách
    for i = 1 to 10
        
    
    4 và
    for i = 1 to 10
        
    
    1 là biến
              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    8. Mỗi lần thông qua vòng lặp,
              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    8 đảm nhận một mục liên tiếp trong
    for i = 1 to 10
        
    
    4, do đó
    for i = 1 to 10
        
    
    9 hiển thị các giá trị
    for [i = 1; i  def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    0

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    Gọi

    for [i = 1; i >>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    1

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    2

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    3

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    4

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    5

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp
             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    Gọi

    for [i = 1; i >

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    6

    Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện lần lặp lại vòng lặp

             15 GET_ITER  
    
    1 này mô tả, Python làm như sau:

    Gọi

    for [i = 1; i >

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    7

    Lưu ý rằng

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    28 trả về một đối tượng của lớp
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    38, không phải là danh sách hoặc tuple của các giá trị. Bởi vì một đối tượng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    38 là một điều có thể đi được, bạn có thể thu được các giá trị bằng cách lặp lại chúng bằng một vòng lặp
             15 GET_ITER  
    
    1:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    8

    Bạn cũng có thể lấy tất cả các giá trị cùng một lúc với

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    01 hoặc
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    03. Trong một phiên thay thế, đó có thể là một cách thuận tiện để nhanh chóng hiển thị các giá trị là gì:

    >>>

    >>> from dis import dis
    >>> def foo[]:
    ...     for i in range [0,10]:
    ...         if i==5:
    ...             i+=3
    ...         print i
    ... 
    >>> dis[foo]
      2           0 SETUP_LOOP              53 [to 56]
                  3 LOAD_GLOBAL              0 [range]
                  6 LOAD_CONST               1 [0]
                  9 LOAD_CONST               2 [10]
                 12 CALL_FUNCTION            2
                 15 GET_ITER            
            >>   16 FOR_ITER                36 [to 55]
                 19 STORE_FAST               0 [i]
    
      3          22 LOAD_FAST                0 [i]
                 25 LOAD_CONST               3 [5]
                 28 COMPARE_OP               2 [==]
                 31 POP_JUMP_IF_FALSE       47
    
      4          34 LOAD_FAST                0 [i]
                 37 LOAD_CONST               4 [3]
                 40 INPLACE_ADD         
                 41 STORE_FAST               0 [i]
                 44 JUMP_FORWARD             0 [to 47]
    
      5     >>   47 LOAD_FAST                0 [i]
                 50 PRINT_ITEM          
                 51 PRINT_NEWLINE       
                 52 JUMP_ABSOLUTE           16
            >>   55 POP_BLOCK           
            >>   56 LOAD_CONST               0 [None]
                 59 RETURN_VALUE        
    >>> 
    
    9

    Tuy nhiên, khi

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    28 được sử dụng trong mã là một phần của ứng dụng lớn hơn, nó thường được coi là thực hành kém để sử dụng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    01 hoặc
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    03 theo cách này. Giống như trình lặp, các đối tượng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    38 là lười biếng, các giá trị trong phạm vi được chỉ định không được tạo cho đến khi chúng được yêu cầu. Sử dụng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    01 hoặc
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    03 trên đối tượng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    38 buộc tất cả các giá trị sẽ được trả về cùng một lúc. Điều này hiếm khi cần thiết, và nếu danh sách dài, nó có thể lãng phí thời gian và trí nhớ.

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    50 trả về một số lượng có thể mang lại số nguyên bắt đầu bằng
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    51, cho đến nhưng không bao gồm
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    36. Nếu được chỉ định,
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    53 cho biết số lượng bỏ qua giữa các giá trị [tương tự với giá trị sải chân được sử dụng cho chuỗi và cắt danh sách]:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    0

    Nếu

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    53 bị bỏ qua, nó mặc định là
             15 GET_ITER  
    
    9:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    1

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

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    28 phải là số nguyên, nhưng bất kỳ tham số nào có thể âm. Đương nhiên, nếu
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    51 lớn hơn
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    36,
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    53 phải âm [nếu bạn muốn có bất kỳ kết quả nào]:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    2

    Thay đổi hành vi vòng lặp
             15 GET_ITER  
    
    1

    Bạn đã thấy trong hướng dẫn trước đây trong loạt giới thiệu này làm thế nào việc thực hiện vòng lặp

             15 GET_ITER  
    
    2 có thể bị gián đoạn với các câu lệnh
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    62 và
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    63 và được sửa đổi bằng mệnh đề
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    64. Những khả năng này cũng có sẵn với vòng lặp
             15 GET_ITER  
    
    1.

    Các câu lệnh
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    62 và
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    63

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    62 và
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    63 hoạt động theo cùng một cách với các vòng
             15 GET_ITER  
    
    1 như với các vòng
             15 GET_ITER  
    
    2.
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    62 chấm dứt hoàn toàn vòng lặp và tiến hành câu lệnh đầu tiên sau vòng lặp:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    3

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    63 chấm dứt lần lặp hiện tại và tiến hành lần lặp tiếp theo:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    4

    Điều khoản
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    64

    Một vòng lặp

             15 GET_ITER  
    
    1 cũng có thể có mệnh đề
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    64. Việc giải thích tương tự như vòng lặp
             15 GET_ITER  
    
    2. Điều khoản
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    64 sẽ được thực thi nếu vòng lặp chấm dứt thông qua sự kiệt sức của điều đó:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    5

    Điều khoản

    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    64 won won được thực thi nếu danh sách bị phá vỡ bằng tuyên bố
    int r[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for [int j = 0; j < sizeof[r]/sizeof[r[0]]; j++] {
        int i = r[j];
        if [i == 5]
            i += 3;
    }
    
    62:

    >>>

              3 LOAD_GLOBAL              0 [range]
              6 LOAD_CONST               1 [0]
              9 LOAD_CONST               2 [10]
             12 CALL_FUNCTION            2
    
    6

    Sự kết luận

    Hướng dẫn này đã trình bày vòng lặp

             15 GET_ITER  
    
    1, công việc của sự lặp lại xác định trong Python.definite iteration in Python.

    Bạn cũng đã tìm hiểu về các hoạt động bên trong của các phép lặp và lặp, hai loại đối tượng quan trọng làm nền tảng cho phép lặp xác định, nhưng cũng nổi bật trong một loạt các mã Python khác.iterables and iterators, two important object types that underlie definite iteration, but also figure prominently in a wide variety of other Python code.

    Trong hai hướng dẫn tiếp theo trong chuỗi giới thiệu này, bạn sẽ chuyển bánh răng một chút và khám phá cách các chương trình Python có thể tương tác với người dùng thông qua đầu vào từ bàn phím và đầu ra vào bảng điều khiển.input from the keyboard and output to the console.

    Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đối với các vòng lặp trong Python [Lặp lại xác định] This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: For Loops in Python [Definite Iteration]

    Bạn có thể sử dụng các biến trong A For Loop không?

    Bất kỳ biến nào được khai báo bên trong cho hoặc trong khi vòng lặp hoặc bên trong dấu ngoặc đơn của một câu lệnh chỉ có thể được sử dụng trong phần thân của vòng lặp. Chúng không thể được in hoặc truy cập theo bất kỳ cách nào sau khi vòng lặp bị chấm dứt.. They cannot be printed or accessed in any way after the loop is terminated.

    Làm thế nào để bạn in một biến trong một vòng lặp trong Python?

    Python cho vòng lặp..
    Tham số: ... .
    Cú pháp: cho trong phạm vi []: ....
    Cú pháp: cho "biến" trong phạm vi ["start_number", "end_number"]: ....
    Ví dụ: >>> cho một trong phạm vi [2,19,5]: in [a] 2 7 12 17 >>>.

    Làm thế nào để bạn lặp lại một biến trong Python?

    Bạn chỉ nên sử dụng một danh sách. Sau đó, bạn sẽ có thể lặp lại các yếu tố bằng cách sử dụng một vòng lặp.Bạn cũng sẽ có thể giải quyết các yếu tố theo chỉ mục: x [i].Hãy nhớ rằng các chỉ số danh sách bắt đầu từ số 0 chứ không phải một.use a list. You'll then be able to iterate over the elements using a for loop. You will also be able to address the elements by index: x[i] . Bear in mind that list indices start from zero and not one.

    Điều gì xảy ra với biến được tạo ra trong A For Loop Python?

    Một vòng lặp For chỉ định biến vòng lặp cho phần tử đầu tiên của chuỗi.Nó thực thi mọi thứ trong khối mã.Sau đó, nó gán biến vòng lặp cho phần tử tiếp theo của chuỗi và thực thi lại khối mã.Nó tiếp tục cho đến khi không có thêm các yếu tố trong chuỗi để gán.assigns the looping variable to the first element of the sequence. It executes everything in the code block. Then it assigns the looping variable to the next element of the sequence and executes the code block again. It continues until there are no more elements in the sequence to assign.

    Bài Viết Liên Quan

    Chủ Đề