Gọi thủ tục có nghĩa là gì 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ố câu lệnh đơ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. Câu lệnh biểu thức

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à viết một giá trị hoặc [thường] để gọi một thủ tục [một hàm trả về kết quả không 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]. Các cách sử dụng khác của câu lệnh biểu thức được cho phép và đôi khi hữu ích. Cú pháp cho một 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]

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ó sẽ được chuyển đổi thành một chuỗi bằng cách sử dụng hàm tích hợp sẵn và chuỗi kết quả được tự ghi vào đầu ra tiêu chuẩn trên một dòng [ngoại trừ nếu 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, do đó thủ tục gọi do . ]

7. 2. Câu lệnh gán

Các câu lệnh gán được sử dụng để [tái] 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

[Xem phần định nghĩa cú pháp cho thuộc tính tham chiếu, đăng ký và cắt. ]

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 đơn hoặc danh sách được phân tách bằng dấu phẩy, danh sách sau mang lại một bộ] và gán đối tượng kết quả duy nhất cho từng danh sách đích, từ trái sang phải

Chuyển nhượng đượ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 phép gán và quyết định về tính hợp lệ của nó và có thể đưa ra ngoại lệ nếu phép gán không được chấp nhận. Các quy tắc được tuân theo bởi các loại khác nhau và các ngoại lệ nêu ra được đưa ra cùng với định nghĩa của các loại đối tượng [xem phần ]

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

  • Nếu danh sách mục tiêu là một mục tiêu không có dấu phẩy ở cuối, tùy chọn trong ngoặc đơn, thì đối tượng được gán cho mục tiêu đó

  • Khác

    • Nếu danh sách mục tiêu chứa một mục tiêu có tiền tố là dấu hoa thị, được gọi là mục tiêu "được gắn dấu sao". Đối tượng phải là một đối tượng có thể lặp lại với ít nhất nhiều mục bằng số mục tiêu trong danh sách mục tiêu, trừ đi một. Các mục đầu tiên của iterable được chỉ định, từ trái sang phải, cho các mục tiêu trước mục tiêu được gắn dấu sao. Các mục cuối cùng của lần lặp được gán cho các mục tiêu sau mục tiêu được gắn dấu sao. Một danh sách các mục còn lại trong iterable sau đó được gán cho mục tiêu được gắn dấu sao [danh sách có thể trống]

    • Khác. Đối tượng phải là một đối tượng có thể lặp lại với cùng số mục như có cá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, cho 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 được định nghĩa đệ quy như sau

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

    • Nếu tên không xuất hiện trong câu lệnh hoặc 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

    • Nếu không thì. tên được liên kết với đối tượng trong không gian tên chung hoặc không gian tên bên ngoài được xác định bởi , tương ứng

    Tên được phục hồ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 đó được liên kết với tên về 0, khiến đối tượng bị hủy cấp phát và hàm hủy của nó [nếu có] đượ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 được; . Đối tượng đó sau đó được yêu cầu gán đối tượng đã gán cho thuộc tính đã cho;

    Ghi chú. Nếu đối tượng là một thể hiện của lớp và tham chiếu thuộc tính xảy ra ở cả hai phía của toán tử gán, thì 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 tồn tại thuộc tính thể hiện] 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. 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 đề cập đến cùng một thuộc tính. nếu biểu thức bên phải đề cập đến một thuộc tính lớp, thì bên trái sẽ tạo một thuộc tính thể hiện mới làm mục tiêu của phép gán

    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

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

    Nếu đối tượng chính là một đối tượng chuỗi có thể thay đổi [chẳng hạn như danh sách], thì chỉ số dưới phải mang lại một số nguyên. Nếu nó âm, độ dài của chuỗi được thêm vào nó. Giá trị kết quả phải là một số nguyên không âm nhỏ hơn độ dài của chuỗi và chuỗi được yêu cầu gán đối tượng đã 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, được nâng lên [gán cho một chuỗi được chỉ định không thể thêm các mục mới vào danh sách]

    Nếu đối tượng chính là đối tượng ánh xạ [chẳng hạn như từ điển], thì chỉ số dưới phải có loại tương thích với loại khóa của ánh xạ và sau đó ánh xạ được yêu cầu tạo một cặp khóa/mốc để ánh xạ chỉ số dưới tới đối tượng được chỉ định. Đ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 tồn tại khóa có cùng giá trị]

    Đối với các đối tượng do người dùng định nghĩa, 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 lát cắ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 [chẳng hạn như 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à giới hạn trên được đánh giá, trong phạm vi chúng hiện diện; . Các giới hạn nên đánh giá số nguyên. Nếu một trong hai giới hạn là âm, độ dài của chuỗi được thêm vào nó. Các giới hạn kết quả được cắt bớt để nằm giữa 0 và độ dài của chuỗi, bao gồm. Cuối cùng, đối tượng chuỗi được yêu cầu thay thế lát cắt bằng các mục của chuỗi được chỉ định. Độ dài của lát có thể khác với độ dài của trình tự được chỉ định, do đó thay đổi độ dài của trình tự mục tiêu, nếu trình tự mục tiêu 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ệ sẽ 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

Mặc dù định nghĩa về phép gán ngụ ý rằng sự trùng lặp giữa vế trái và vế 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 đôi khi sự trùng lặp trong tập hợp các biến được gán cho xảy ra từ trái sang phải . Chẳng hạn, chương trình sau in ra
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 - Giải nén lặp lại mở rộng

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. Câu lệnh gán tăng cường

Phép gán tăng cường là sự kết hợp, trong một câu lệnh, của phép toán nhị phân và câu lệnh gán

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

Chủ Đề