Hướng dẫn how do you add statements in python? - làm thế nào để bạn thêm các câu lệnh trong python?

Một tuyên bố đơn giản được bao gồm trong một dòng logic duy nhất. Một số tuyên bố đơn giản có thể xảy ra trên một dòng được phân tách bằng dấu chấm phẩy. Cú pháp cho các câu lệnh đơn giản là:

simple_stmt ::=  expression_stmt
                 | assert_stmt
                 | assignment_stmt
                 | augmented_assignment_stmt
                 | annotated_assignment_stmt
                 | pass_stmt
                 | del_stmt
                 | return_stmt
                 | yield_stmt
                 | raise_stmt
                 | break_stmt
                 | continue_stmt
                 | import_stmt
                 | future_stmt
                 | global_stmt
                 | nonlocal_stmt

7.1. Tuyên bố biểu thức JoExpression statements¶

Các câu lệnh biểu thức được sử dụng [chủ yếu là tương tác] để tính toán và ghi một giá trị, hoặc [thường] để gọi một thủ tục [một hàm trả về không có kết quả có ý nghĩa; trong Python, các thủ tục trả về giá trị

class Cls:
    x = 3             # class variable
inst = Cls[]
inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
0]. Việc sử dụng các câu lệnh biểu thức khác được cho phép và đôi khi hữu ích. Cú pháp cho câu lệnh biểu thức là:

expression_stmt ::=  starred_expression

Một câu lệnh biểu thức đánh giá danh sách biểu thức [có thể là một biểu thức duy nhất].

Trong chế độ tương tác, nếu giá trị không phải là

class Cls:
    x = 3             # class variable
inst = Cls[]
inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
0, nó được chuyển đổi thành một chuỗi bằng hàm
class Cls:
    x = 3             # class variable
inst = Cls[]
inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
2 tích hợp và chuỗi kết quả được ghi thành đầu ra tiêu chuẩn trên một dòng [trừ khi kết quả là
class Cls:
    x = 3             # class variable
inst = Cls[]
inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
0 không gây ra bất kỳ đầu ra nào.]

7.2. Báo cáo chuyển nhượng JoAssignment statements¶

Các câu lệnh gán được sử dụng để [re] liên kết tên với các giá trị và để sửa đổi các thuộc tính hoặc mục của các đối tượng có thể thay đổi:

assignment_stmt ::=  [target_list "="]+ [starred_expression | yield_expression]
target_list     ::=  target ["," target]* [","]
target          ::=  identifier
                     | "[" [target_list] "]"
                     | "[" [target_list] "]"
                     | attributeref
                     | subscription
                     | slicing
                     | "*" target

.Primaries for the syntax definitions for attributeref, subscription, and slicing.]

Một câu lệnh gán đánh giá danh sách biểu thức [hãy nhớ rằng đây có thể là một biểu thức duy nhất hoặc danh sách được phân tách bằng dấu phẩy, phần sau mang lại một tuple] và gán đối tượng kết quả duy nhất cho từng danh sách mục tiêu, từ trái sang phải.

Bài tập được xác định đệ quy tùy thuộc vào hình thức của mục tiêu [danh sách]. Khi mục tiêu là một phần của đối tượng có thể thay đổi [tham chiếu thuộc tính, đăng ký hoặc cắt], đối tượng có thể thay đổi cuối cùng phải thực hiện bài tập và quyết định về tính hợp lệ của nó và có thể tăng một ngoại lệ nếu không thể chấp nhận được. Các quy tắc được quan sát bởi nhiều loại khác nhau và các ngoại lệ được nêu ra với định nghĩa của các loại đối tượng [xem phần phân cấp loại tiêu chuẩn].The standard type hierarchy].

Việc gán một đối tượng cho một danh sách đích, tùy chọn được đặt trong ngoặc đơn hoặc dấu ngoặc vuông, được định nghĩa đệ quy như sau.

  • Nếu danh sách đích là một mục tiêu duy nhất không có dấu phẩy kéo dài, tùy chọn trong ngoặc đơn, đối tượng được gán cho mục tiêu đó.

  • Else:

    • Nếu danh sách mục tiêu chứa một tiền tố mục tiêu với dấu hoa thị, được gọi là mục tiêu được đóng vai chính của người dùng: đối tượng phải là một mục tiêu có thể có ít nhất nhiều mục như có mục tiêu trong danh sách mục tiêu, trừ một mục tiêu. Các mục đầu tiên của Itable được gán, từ trái sang phải, cho đến các mục tiêu trước mục tiêu được đóng vai chính. Các mục cuối cùng của ITEBLE được gán cho các mục tiêu sau khi mục tiêu được đánh dấu sao. Một danh sách các mục còn lại trong ITEBREBLE sau đó được gán cho mục tiêu được đánh dấu sao [danh sách có thể trống].

    • Khác: Đối tượng phải là một số lượng có cùng số lượng mục như có mục tiêu trong danh sách mục tiêu và các mục được gán, từ trái sang phải, đến các mục tiêu tương ứng.

Việc gán một đối tượng cho một mục tiêu duy nhất được định nghĩa đệ quy như sau.

  • Nếu mục tiêu là một định danh [tên]:

    • Nếu tên không xảy ra trong câu lệnh

      class Cls:
          x = 3             # class variable
      inst = Cls[]
      inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
      
      4 hoặc
      class Cls:
          x = 3             # class variable
      inst = Cls[]
      inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
      
      5 trong khối mã hiện tại: tên được liên kết với đối tượng trong không gian tên cục bộ hiện tại.

    • Mặt khác: Tên được liên kết với đối tượng trong không gian tên toàn cầu hoặc không gian tên bên ngoài được xác định bởi

      class Cls:
          x = 3             # class variable
      inst = Cls[]
      inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
      
      5, tương ứng.

    Tên được bật lại nếu nó đã bị ràng buộc. Điều này có thể khiến số lượng tham chiếu cho đối tượng trước đó liên kết với tên sẽ đạt đến 0, khiến đối tượng bị phân loại và bộ hủy diệt của nó [nếu nó có một] được gọi.

  • Nếu mục tiêu là một tham chiếu thuộc tính: biểu thức chính trong tham chiếu được đánh giá. Nó sẽ mang lại một đối tượng với các thuộc tính có thể gán; Nếu đây không phải là trường hợp,

    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    
    7 được nâng lên. Đối tượng đó sau đó được yêu cầu gán đối tượng được gán cho thuộc tính đã cho; Nếu nó không thể thực hiện bài tập, nó sẽ tăng một ngoại lệ [thường nhưng không nhất thiết là
    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    
    8].

    Lưu ý: Nếu đối tượng là một thể hiện lớp và tham chiếu thuộc tính xảy ra ở cả hai phía của toán tử gán, biểu thức bên phải,

    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    
    9 có thể truy cập thuộc tính thể hiện hoặc [nếu không có thuộc tính thể hiện tồn tại] thuộc tính lớp. Mục tiêu phía bên trái
    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    
    9 luôn được đặt làm thuộc tính thể hiện, tạo nó nếu cần thiết. Do đó, hai lần xuất hiện của
    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    
    9 không nhất thiết phải đề cập đến cùng một thuộc tính: nếu biểu thức bên phải đề cập đến thuộc tính lớp, phía bên trái sẽ tạo một thuộc tính thể hiện mới là mục tiêu của bài tập:

    class Cls:
        x = 3             # class variable
    inst = Cls[]
    inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3
    

    Mô tả này không nhất thiết áp dụng cho các thuộc tính mô tả, chẳng hạn như các thuộc tính được tạo bằng

    x = [0, 1]
    i = 0
    i, x[i] = 1, 2         # i is updated, then x[i] is updated
    print[x]
    
    2.

  • Nếu mục tiêu là một thuê bao: biểu thức chính trong tham chiếu được đánh giá. Nó sẽ mang lại một đối tượng chuỗi có thể thay đổi [chẳng hạn như danh sách] hoặc một đối tượng ánh xạ [như từ điển]. Tiếp theo, biểu thức phụ được đánh giá.

    Nếu chính là một đối tượng chuỗi có thể thay đổi [như danh sách], chỉ số phải mang lại một số nguyên. Nếu nó là âm, độ dài trình tự của Lừa được thêm vào nó. Giá trị kết quả phải là một số nguyên không âm ít hơn độ dài của chuỗi và trình tự được yêu cầu gán đối tượng được gán cho mục của nó với chỉ mục đó. Nếu chỉ mục nằm ngoài phạm vi,

    x = [0, 1]
    i = 0
    i, x[i] = 1, 2         # i is updated, then x[i] is updated
    print[x]
    
    3 sẽ được nâng lên [gán cho chuỗi được đăng ký không thể thêm các mục mới vào danh sách].

    Nếu chính là một đối tượng ánh xạ [chẳng hạn như từ điển], chỉ số phải có loại tương thích với loại khóa ánh xạ và bản đồ sau đó được yêu cầu tạo một cặp khóa/mốc ánh xạ chỉ số cho đối tượng được gán. Điều này có thể thay thế một cặp khóa/giá trị hiện có bằng cùng một giá trị khóa hoặc chèn một cặp khóa/giá trị mới [nếu không có khóa có cùng giá trị tồn tại].

    Đối với các đối tượng do người dùng xác định, phương thức

    x = [0, 1]
    i = 0
    i, x[i] = 1, 2         # i is updated, then x[i] is updated
    print[x]
    
    4 được gọi với các đối số thích hợp.

  • Nếu mục tiêu là một sự cắt lát: biểu thức chính trong tham chiếu được đánh giá. Nó sẽ mang lại một đối tượng chuỗi có thể thay đổi [như một danh sách]. Đối tượng được gán phải là một đối tượng chuỗi cùng loại. Tiếp theo, các biểu thức giới hạn dưới và trên được đánh giá, trong chừng mực chúng có mặt; Mặc định bằng không và độ dài chuỗi. Các giới hạn nên đánh giá cho các số nguyên. Nếu một trong hai giới hạn là âm, độ dài trình tự được thêm vào nó. Các giới hạn kết quả được cắt để nằm giữa 0 và độ dài trình tự, bao gồm. Cuối cùng, đối tượng trình tự được yêu cầu thay thế lát cắt bằng các mục của chuỗi được gán. Độ dài của lát cắt có thể khác với độ dài của chuỗi được gán, do đó thay đổi độ dài của chuỗi đích, nếu chuỗi đích cho phép.

Chi tiết triển khai CPYThon: Trong quá trình triển khai hiện tại, cú pháp cho các mục tiêu được coi là giống như đối với các biểu thức và cú pháp không hợp lệ bị từ chối trong giai đoạn tạo mã, gây ra các thông báo lỗi ít chi tiết hơn. In the current implementation, the syntax for targets is taken to be the same as for expressions, and invalid syntax is rejected during the code generation phase, causing less detailed error messages.

Mặc dù định nghĩa về gán ngụ ý rằng sự chồng chéo giữa phía bên trái và phía bên phải là 'đồng thời' [ví dụ

x = [0, 1]
i = 0
i, x[i] = 1, 2         # i is updated, then x[i] is updated
print[x]
5 hoán đổi hai biến], nhưng sự chồng chéo trong bộ sưu tập các biến được gán xảy ra dẫn đến nhầm lẫn. Chẳng hạn, chương trình sau đây in
x = [0, 1]
i = 0
i, x[i] = 1, 2         # i is updated, then x[i] is updated
print[x]
6:

x = [0, 1]
i = 0
i, x[i] = 1, 2         # i is updated, then x[i] is updated
print[x]

Xem thêm

PEP 3132 - Khả năng giải nén có thể mở rộng - Extended Iterable Unpacking

Thông số kỹ thuật cho tính năng

x = [0, 1]
i = 0
i, x[i] = 1, 2         # i is updated, then x[i] is updated
print[x]
7.

7.2.1. Tuyên bố phân công tăng cườngAugmented assignment statements¶

Bài tập tăng cường là sự kết hợp, trong một tuyên bố duy nhất của một hoạt động nhị phân và một câu lệnh gán:

augmented_assignment_stmt ::=  augtarget augop [expression_list | yield_expression]
augtarget                 ::=  identifier | attributeref | subscription | slicing
augop                     ::=  "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="
                               | ">>=" | ">=" | ">=" | ">=" | ">=" | ">=" | ">=" | ">=" | ">=" | ">=" | ">=" | "

Chủ Đề