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à: Show
simple_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 30). 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 ::= 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 30, 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 32 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 30 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 ::= ( .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.
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.
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 UnpackingThô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 ::= (Xem phần Nguyên thủy cho các định nghĩa cú pháp của ba ký hiệu cuối cùng.)Primaries for the syntax definitions of the last three symbols.) Một phân công tăng cường đánh giá mục tiêu (không giống như các câu lệnh gán thông thường, không thể là một giải nén) và danh sách biểu thức, thực hiện hoạt động nhị phân cụ thể cho loại gán trên hai toán hạng và gán kết quả cho mục tiêu ban đầu. Mục tiêu chỉ được đánh giá một lần. Một biểu thức gán tăng cường như x = [0, 1] i = 0 i, x[i] = 1, 2 # i is updated, then x[i] is updated print(x)8 có thể được viết lại dưới dạng x = [0, 1] i = 0 i, x[i] = 1, 2 # i is updated, then x[i] is updated print(x)9 để đạt được hiệu ứng tương tự, nhưng không chính xác. Trong phiên bản tăng cường, augmented_assignment_stmt ::=0 chỉ được đánh giá một lần. Ngoài ra, khi có thể, hoạt động thực tế được thực hiện tại chỗ, có nghĩa là thay vì tạo một đối tượng mới và gán nó cho mục tiêu, đối tượng cũ được sửa đổi thay thế. Không giống như các bài tập bình thường, các bài tập tăng cường đánh giá phía bên trái trước khi đánh giá phía bên phải. Ví dụ: augmented_assignment_stmt ::=1 nhìn lên đầu tiên augmented_assignment_stmt ::=2, sau đó nó đánh giá augmented_assignment_stmt ::=3 và thực hiện bổ sung, và cuối cùng, nó ghi kết quả trở lại augmented_assignment_stmt ::=2. Ngoại trừ việc gán cho các bộ dữ liệu và nhiều mục tiêu trong một câu lệnh duy nhất, bài tập được thực hiện bằng các câu lệnh gán tăng cường được xử lý giống như các bài tập bình thường. Tương tự, ngoại trừ hành vi tại chỗ có thể, hoạt động nhị phân được thực hiện bằng cách gán tăng cường giống như các hoạt động nhị phân bình thường. Đối với các mục tiêu là tài liệu tham khảo thuộc tính, cùng một cảnh báo về các thuộc tính lớp và thể hiện được áp dụng như đối với các bài tập thông thường.caveat about class and instance attributes applies as for regular assignments. 7.2.2. Báo cáo gán chú thích JorAnnotated assignment statements¶Bài tập chú thích là sự kết hợp, trong một câu lệnh, của chú thích biến hoặc thuộc tính và câu lệnh gán tùy chọn: assignment is the combination, in a single statement, of a variable or attribute annotation and an optional assignment statement: annotated_assignment_stmt ::= Sự khác biệt so với các câu lệnh gán thông thường là chỉ cho phép mục tiêu duy nhất.Assignment statements is that only single target is allowed. Đối với các tên đơn giản là mục tiêu gán, nếu trong phạm vi lớp hoặc mô -đun, các chú thích được đánh giá và lưu trữ trong một thuộc tính lớp hoặc mô -đun đặc biệt augmented_assignment_stmt ::=5 là ánh xạ từ điển từ các tên biến (được xua tan nếu riêng tư) để đánh giá. Thuộc tính này có thể ghi và được tạo tự động khi bắt đầu thực hiện cơ thể lớp hoặc mô -đun, nếu các chú thích được tìm thấy một cách thống trị. Đối với các biểu thức là mục tiêu gán, các chú thích được đánh giá nếu trong lớp hoặc phạm vi mô -đun, nhưng không được lưu trữ. Nếu một tên được chú thích trong một phạm vi hàm, thì tên này là cục bộ cho phạm vi đó. Chú thích không bao giờ được đánh giá và lưu trữ trong phạm vi chức năng. Nếu mặt bên phải có mặt, một nhiệm vụ được chú thích sẽ thực hiện bài tập thực tế trước khi đánh giá các chú thích (nếu có). Nếu phía bên tay phải không có mặt cho mục tiêu biểu thức, thì trình thông dịch sẽ đánh giá mục tiêu ngoại trừ cuộc gọi x = [0, 1] i = 0 i, x[i] = 1, 2 # i is updated, then x[i] is updated print(x)4 hoặc augmented_assignment_stmt ::=7 cuối cùng. Xem thêm PEP 526 - Cú pháp để chú thích biến - Syntax for Variable AnnotationsĐề xuất đã thêm cú pháp để chú thích các loại biến (bao gồm các biến lớp và biến thể hiện), thay vì biểu thị chúng thông qua các bình luận. PEP 484 - Loại gợi ý - Type hintsĐề xuất đã thêm mô -đun augmented_assignment_stmt ::=8 để cung cấp cú pháp tiêu chuẩn cho các chú thích loại có thể được sử dụng trong các công cụ phân tích tĩnh và IDE. Thay đổi trong phiên bản 3.8: Các bài tập được chú thích hiện cho phép các biểu thức tương tự ở phía bên phải là các bài tập thông thường. Trước đây, một số biểu thức (như các biểu thức tuple không được đặt) đã gây ra lỗi cú pháp.Now annotated assignments allow same expressions in the right hand side as the regular assignments. Previously, some expressions (like un-parenthesized tuple expressions) caused a syntax error. 7.3. Tuyên bố augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression) augtarget ::= identifier | attributeref | subscription | slicing augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" | ">>=" | "<<=" | "&=" | "^=" | "|=" 9The augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression) augtarget ::= identifier | attributeref | subscription | slicing augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" | ">>=" | "<<=" | "&=" | "^=" | "|=" 9 statement¶Khẳng định các câu lệnh là một cách thuận tiện để chèn các xác nhận gỡ lỗi vào một chương trình: assert_stmt ::= "assert" Hình thức đơn giản, annotated_assignment_stmt ::=0, tương đương với if __debug__: if not expression: raise AssertionError Mẫu mở rộng, annotated_assignment_stmt ::=1, tương đương với if __debug__: if not expression1: raise AssertionError(expression2) Các tương đương này giả định rằng annotated_assignment_stmt ::=2 và annotated_assignment_stmt ::=3 đề cập đến các biến tích hợp với các tên đó. Trong quá trình triển khai hiện tại, biến tích hợp annotated_assignment_stmt ::=2 là annotated_assignment_stmt ::=5 trong các trường hợp bình thường, annotated_assignment_stmt ::=6 khi yêu cầu tối ưu hóa (tùy chọn dòng lệnh annotated_assignment_stmt ::=7). Trình tạo mã hiện tại phát ra không có mã nào cho một câu lệnh ASPER khi tối ưu hóa được yêu cầu vào thời điểm biên dịch. Lưu ý rằng không cần thiết phải bao gồm mã nguồn cho biểu thức không thành công trong thông báo lỗi; Nó sẽ được hiển thị như một phần của dấu vết ngăn xếp. Nhiệm vụ cho annotated_assignment_stmt ::=2 là bất hợp pháp. Giá trị cho biến tích hợp được xác định khi trình thông dịch bắt đầu. 7.4. Tuyên bố annotated_assignment_stmt ::= augtarget ":" expression ["=" (starred_expression | yield_expression)] 9The annotated_assignment_stmt ::= augtarget ":" expression ["=" (starred_expression | yield_expression)] 9 statement¶expression_stmt ::= 0annotated_assignment_stmt ::=9 là một hoạt động null - khi nó được thực hiện, không có gì xảy ra. Nó rất hữu ích như một trình giữ chỗ khi cần phải có câu lệnh, nhưng không cần phải thực thi mã, ví dụ: expression_stmt ::= 17.5. Tuyên bố assert_stmt ::= "assert" expression ["," expression] 1The assert_stmt ::= "assert" expression ["," expression] 1 statement¶expression_stmt ::= 2Việc xóa được định nghĩa đệ quy rất giống với cách xác định gán. Thay vì đánh vần nó trong chi tiết đầy đủ, đây là một số gợi ý. Xóa danh sách mục tiêu xóa đệ quy từng mục tiêu, từ trái sang phải. Việc xóa tên sẽ loại bỏ liên kết của tên đó khỏi không gian tên cục bộ hoặc toàn cầu, tùy thuộc vào việc tên 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 34 trong cùng một khối mã. Nếu tên không bị ràng buộc, ngoại lệ assert_stmt ::= "assert"3 sẽ được nêu ra. Việc xóa các tài liệu tham khảo thuộc tính, đăng ký và glicings được chuyển đến đối tượng chính liên quan; Việc xóa cắt lát nói chung tương đương với việc gán một lát trống thuộc loại đúng (nhưng ngay cả điều này được xác định bởi đối tượng cắt lát). Đã thay đổi trong phiên bản 3.2: Trước đây, việc xóa tên khỏi không gian tên cục bộ là bất hợp pháp nếu nó xảy ra như một biến miễn phí trong một khối lồng nhau.Previously it was illegal to delete a name from the local namespace if it occurs as a free variable in a nested block. 7.6. Tuyên bố assert_stmt ::= "assert" expression ["," expression] 4The assert_stmt ::= "assert" expression ["," expression] 4 statement¶expression_stmt ::= 3assert_stmt ::= "assert"4 chỉ có thể xảy ra được lồng về mặt cú pháp trong một định nghĩa hàm, không phải trong định nghĩa lớp lồng nhau. Nếu một danh sách biểu thức có mặt, nó được đánh giá, khác class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 30 được thay thế. assert_stmt ::= "assert"4 để lại cuộc gọi hàm hiện tại với danh sách biểu thức (hoặc class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 30) là giá trị trả về. Khi assert_stmt ::= "assert"4 chuyển quyền kiểm soát ra khỏi câu lệnh if __debug__: if not expression: raise AssertionError0 với mệnh đề if __debug__: if not expression: raise AssertionError1, mệnh đề if __debug__: if not expression: raise AssertionError1 đó được thực thi trước khi thực sự rời khỏi chức năng. Trong hàm máy phát, câu lệnh assert_stmt ::= "assert"4 chỉ ra rằng trình tạo được thực hiện và sẽ khiến if __debug__: if not expression: raise AssertionError4 được nâng lên. Giá trị trả về (nếu có) được sử dụng làm đối số để xây dựng if __debug__: if not expression: raise AssertionError4 và trở thành thuộc tính if __debug__: if not expression: raise AssertionError6. Trong hàm tạo không đồng bộ, một câu lệnh assert_stmt ::= "assert"4 trống chỉ ra rằng trình tạo không đồng bộ được thực hiện và sẽ khiến if __debug__: if not expression: raise AssertionError8 được nâng lên. Câu lệnh không trống assert_stmt ::= "assert"4 là lỗi cú pháp trong hàm tạo không đồng bộ. 7.7. Tuyên bố if __debug__: if not expression1: raise AssertionError(expression2) 0The if __debug__: if not expression1: raise AssertionError(expression2) 0 statement¶expression_stmt ::= 4Một tuyên bố if __debug__: if not expression1: raise AssertionError(expression2)0 tương đương về mặt ngữ nghĩa với biểu thức năng suất. Câu lệnh năng suất có thể được sử dụng để bỏ qua các dấu ngoặc đơn nếu không sẽ được yêu cầu trong câu lệnh biểu thức năng suất tương đương. Ví dụ: các báo cáo năng suấtyield expression. The yield statement can be used to omit the parentheses that would otherwise be required in the equivalent yield expression statement. For example, the yield statements expression_stmt ::= 5tương đương với các câu lệnh biểu thức năng suất expression_stmt ::= 6Các biểu thức và câu lệnh năng suất chỉ được sử dụng khi xác định hàm máy phát và chỉ được sử dụng trong phần thân của hàm máy phát. Sử dụng năng suất trong một định nghĩa chức năng là đủ để gây ra định nghĩa đó để tạo hàm máy phát thay vì hàm bình thường.generator function, and are only used in the body of the generator function. Using yield in a function definition is sufficient to cause that definition to create a generator function instead of a normal function. Để biết chi tiết đầy đủ của ngữ nghĩa if __debug__: if not expression1: raise AssertionError(expression2)0, hãy tham khảo phần Biểu thức năng suất.Yield expressions section. 7.8. Tuyên bố if __debug__: if not expression1: raise AssertionError(expression2) 3The if __debug__: if not expression1: raise AssertionError(expression2) 3 statement¶expression_stmt ::= 7Nếu không có biểu thức nào có mặt, if __debug__: if not expression1: raise AssertionError(expression2)3 tái cấu trúc ngoại lệ hiện đang được xử lý, còn được gọi là ngoại lệ hoạt động. Nếu hiện tại có một ngoại lệ hoạt động, một ngoại lệ if __debug__: if not expression1: raise AssertionError(expression2)5 được nêu ra cho thấy rằng đây là một lỗi. Mặt khác, if __debug__: if not expression1: raise AssertionError(expression2)3 đánh giá biểu thức đầu tiên là đối tượng ngoại lệ. Nó phải là một lớp con hoặc một thể hiện là if __debug__: if not expression1: raise AssertionError(expression2)7. Nếu đó là một lớp, trường hợp ngoại lệ sẽ có được khi cần bằng cách khởi tạo lớp mà không có đối số. Loại ngoại lệ là lớp thể hiện ngoại lệ, giá trị là chính trường hợp. Một đối tượng Traceback thường được tạo tự động khi một ngoại lệ được nâng lên và gắn vào nó dưới dạng thuộc tính if __debug__: if not expression1: raise AssertionError(expression2)8, có thể ghi được. Bạn có thể tạo một ngoại lệ và đặt TraceBack của riêng mình trong một bước bằng phương thức ngoại lệ if __debug__: if not expression1: raise AssertionError(expression2)9 (trả về cùng một trường hợp ngoại lệ, với Traceback được đặt thành đối số của nó), như vậy: expression_stmt ::= 8Điều khoản expression_stmt ::= 00 được sử dụng cho chuỗi ngoại lệ: nếu được đưa ra, biểu thức thứ hai phải là một loại hoặc một trường hợp ngoại lệ khác. Nếu biểu thức thứ hai là một thể hiện ngoại lệ, nó sẽ được gắn vào ngoại lệ được nâng lên dưới dạng thuộc tính expression_stmt ::= 01 (có thể ghi). Nếu biểu thức là một lớp ngoại lệ, lớp sẽ được khởi tạo và trường hợp ngoại lệ kết quả sẽ được gắn vào ngoại lệ được nâng lên dưới dạng thuộc tính expression_stmt ::= 01. Nếu ngoại lệ được nâng lên không được xử lý, cả hai trường hợp ngoại lệ sẽ được in:expression_stmt ::= 9Một cơ chế tương tự hoạt động ngầm nếu một ngoại lệ mới được nâng lên khi một ngoại lệ đã được xử lý. Một ngoại lệ có thể được xử lý khi mệnh đề expression_stmt ::= 03 hoặc if __debug__: if not expression: raise AssertionError1 hoặc câu lệnh expression_stmt ::= 05, được sử dụng. Ngoại lệ trước đó sau đó được đính kèm là thuộc tính ngoại lệ mới ____ ____106:assignment_stmt ::= (0 Chuỗi ngoại lệ có thể được đàn áp rõ ràng bằng cách chỉ định class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 30 trong mệnh đề expression_stmt ::= 00:assignment_stmt ::= (1 Thông tin bổ sung về các ngoại lệ có thể được tìm thấy trong các ngoại lệ và thông tin về các ngoại lệ xử lý là trong phần Tuyên bố thử.Exceptions, and information about handling exceptions is in section The try statement. Đã thay đổi trong phiên bản 3.3: class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 30 is now permitted as expression_stmt ::= 10 in expression_stmt ::= 11.Mới trong phiên bản 3.3: Thuộc tính expression_stmt ::= 12 attribute to suppress automatic display of the exception context.7.9. Tuyên bố expression_stmt ::= starred_expression 13The expression_stmt ::= starred_expression 13 statement¶assignment_stmt ::= (2 expression_stmt ::= 13 chỉ có thể xảy ra được lồng về mặt cú pháp trong vòng lặp expression_stmt ::= 15 hoặc expression_stmt ::= 16, nhưng không được lồng trong một hàm hoặc định nghĩa lớp trong vòng lặp đó.Nó chấm dứt vòng lặp bao quanh gần nhất, bỏ qua mệnh đề expression_stmt ::= 17 tùy chọn nếu vòng lặp có một.Nếu vòng lặp expression_stmt ::= 15 bị chấm dứt bởi expression_stmt ::= 13, mục tiêu điều khiển vòng lặp giữ giá trị hiện tại của nó.Khi expression_stmt ::= 13 chuyển quyền kiểm soát ra khỏi tuyên bố if __debug__: if not expression: raise AssertionError0 với mệnh đề if __debug__: if not expression: raise AssertionError1, mệnh đề if __debug__: if not expression: raise AssertionError1 đó được thực thi trước khi thực sự rời khỏi vòng lặp. 7.10. Tuyên bố expression_stmt ::= starred_expression 24The expression_stmt ::= starred_expression 24 statement¶assignment_stmt ::= (3 expression_stmt ::= 24 chỉ có thể xảy ra được lồng về mặt cú pháp trong vòng lặp expression_stmt ::= 15 hoặc expression_stmt ::= 16, nhưng không được lồng trong một hàm hoặc định nghĩa lớp trong vòng lặp đó. Nó tiếp tục với chu kỳ tiếp theo của vòng lặp bao quanh gần nhất.Khi expression_stmt ::= 24 chuyển quyền kiểm soát ra khỏi câu lệnh if __debug__: if not expression: raise AssertionError0 với mệnh đề if __debug__: if not expression: raise AssertionError1, mệnh đề if __debug__: if not expression: raise AssertionError1 đó được thực thi trước khi thực sự bắt đầu chu kỳ vòng lặp tiếp theo. 7.11. Tuyên bố expression_stmt ::= starred_expression 32The expression_stmt ::= starred_expression 32 statement¶assignment_stmt ::= (4 Tuyên bố nhập cơ bản (Điều khoản không expression_stmt ::= 00) được thực thi trong hai bước:
Khi tuyên bố chứa nhiều mệnh đề (cách nhau bằng dấu phẩy), hai bước được thực hiện riêng cho mỗi mệnh đề, giống như các điều khoản đã được tách ra thành các báo cáo nhập khẩu riêng lẻ. Các chi tiết của bước đầu tiên, tìm kiếm và tải các mô -đun được mô tả chi tiết hơn trong phần trên hệ thống nhập, cũng mô tả các loại gói và mô -đun khác nhau có thể được nhập, cũng như tất cả các móc có thể được sử dụng Tùy chỉnh hệ thống nhập. Lưu ý rằng các lỗi trong bước này có thể chỉ ra rằng không thể định vị được mô -đun hoặc lỗi xảy ra trong khi khởi tạo mô -đun, bao gồm thực thi mã mô -đun.import system, which also describes the various types of packages and modules that can be imported, as well as all the hooks that can be used to customize the import system. Note that failures in this step may indicate either that the module could not be located, or that an error occurred while initializing the module, which includes execution of the module’s code. Nếu mô -đun được yêu cầu được truy xuất thành công, nó sẽ được cung cấp trong không gian tên địa phương theo một trong ba cách:
Mẫu expression_stmt ::= 00 sử dụng quy trình phức tạp hơn một chút:
Examples: assignment_stmt ::= (5 Nếu danh sách các định danh được thay thế bằng một ngôi sao ( expression_stmt ::= 42), tất cả các tên công khai được xác định trong mô -đun đều được ràng buộc trong không gian tên cục bộ cho phạm vi trong đó câu lệnh expression_stmt ::= 32 xảy ra.Các tên công khai được xác định bởi một mô -đun được xác định bằng cách kiểm tra không gian tên mô -đun cho một biến có tên expression_stmt ::= 44; Nếu được xác định, nó phải là một chuỗi các chuỗi được xác định hoặc nhập bởi mô -đun đó. Các tên được đưa ra trong expression_stmt ::= 44 đều được coi là công khai và được yêu cầu tồn tại. Nếu expression_stmt ::= 44 không được xác định, tập hợp các tên công khai bao gồm tất cả các tên được tìm thấy trong không gian tên mô -đun không bắt đầu với ký tự dấu gạch dưới (expression_stmt ::= 47). expression_stmt ::= 44 nên chứa toàn bộ API công khai. Nó được dự định để tránh vô tình xuất các mục không phải là một phần của API (chẳng hạn như các mô -đun thư viện được nhập và sử dụng trong mô -đun).Mẫu thẻ hoang dã của nhập khẩu - expression_stmt ::= 49 - chỉ được phép ở cấp độ mô -đun. Cố gắng sử dụng nó trong các định nghĩa trong lớp hoặc chức năng sẽ tăng expression_stmt ::= 50.Khi chỉ định mô -đun nào để nhập, bạn không phải chỉ định tên tuyệt đối của mô -đun. Khi một mô -đun hoặc gói được chứa trong một gói khác, có thể thực hiện nhập tương đối trong cùng một gói hàng đầu mà không cần phải đề cập đến tên gói. Bằng cách sử dụng các dấu chấm hàng đầu trong mô -đun hoặc gói được chỉ định sau expression_stmt ::= 00, bạn có thể chỉ định mức độ cao để vượt qua hệ thống phân cấp gói hiện tại mà không cần chỉ định tên chính xác. Một chấm hàng đầu có nghĩa là gói hiện tại nơi mô -đun tạo ra nhập. Hai dấu chấm có nghĩa là lên một cấp gói. Ba chấm đã tăng hai cấp độ, v.v. Vì vậy, nếu bạn thực thi expression_stmt ::= 52 từ một mô -đun trong gói expression_stmt ::= 53 thì cuối cùng bạn sẽ nhập expression_stmt ::= 54. Nếu bạn thực thi expression_stmt ::= 55 từ trong vòng expression_stmt ::= 56, bạn sẽ nhập expression_stmt ::= 57. Thông số kỹ thuật cho nhập khẩu tương đối được chứa trong phần nhập khẩu tương đối.Package Relative Imports section.expression_stmt ::= 58 được cung cấp để hỗ trợ các ứng dụng xác định động các mô -đun sẽ được tải.Tăng một sự kiện kiểm toán expression_stmt ::= 32 với các đối số expression_stmt ::= 60, expression_stmt ::= 61, expression_stmt ::= 62, expression_stmt ::= 63, expression_stmt ::= 64.auditing event expression_stmt ::= 32 with arguments expression_stmt ::= 60, expression_stmt ::= 61, expression_stmt ::= 62, expression_stmt ::= 63, expression_stmt ::= 64.7.11.1. Tuyên bố trong tương lai lorFuture statements¶Một tuyên bố trong tương lai là một chỉ thị cho trình biên dịch rằng một mô -đun cụ thể nên được biên dịch bằng cú pháp hoặc ngữ nghĩa sẽ có sẵn trong một bản phát hành Python trong tương lai trong tương lai nơi tính năng trở thành tiêu chuẩn. Tuyên bố trong tương lai nhằm mục đích dễ dàng di chuyển sang các phiên bản Python trong tương lai giới thiệu những thay đổi không tương thích cho ngôn ngữ. Nó cho phép sử dụng các tính năng mới trên cơ sở mỗi mô-đun trước khi phát hành trong đó tính năng trở thành tiêu chuẩn. assignment_stmt ::= (6 Một tuyên bố trong tương lai phải xuất hiện gần đỉnh của mô -đun. Các dòng duy nhất có thể xuất hiện trước một tuyên bố trong tương lai là:
Tính năng duy nhất yêu cầu sử dụng câu lệnh trong tương lai là expression_stmt ::= 65 (xem PEP 563).PEP 563).Tất cả các tính năng lịch sử được kích hoạt bởi tuyên bố trong tương lai vẫn được Python 3. Danh sách bao gồm expression_stmt ::= 66, expression_stmt ::= 67, expression_stmt ::= 68, expression_stmt ::= 69, expression_stmt ::= 70, expression_stmt ::= 71, expression_stmt ::= 72 và expression_stmt ::= 73. Tất cả đều dư thừa vì chúng luôn được bật và chỉ được giữ để tương thích ngược.Một tuyên bố trong tương lai được công nhận và xử lý đặc biệt tại thời điểm biên dịch: các thay đổi đối với ngữ nghĩa của các cấu trúc cốt lõi thường được thực hiện bằng cách tạo mã khác nhau. Nó thậm chí có thể là trường hợp một tính năng mới giới thiệu cú pháp mới không tương thích (chẳng hạn như một từ dành riêng mới), trong trường hợp đó, trình biên dịch có thể cần phân tích mô -đun khác nhau. Những quyết định như vậy không thể được đẩy ra cho đến khi chạy. Đối với bất kỳ bản phát hành nhất định nào, trình biên dịch biết tên tính năng nào đã được xác định và nêu ra lỗi thời gian biên dịch nếu một câu lệnh trong tương lai chứa một tính năng không được biết đến. Các ngữ nghĩa thời gian chạy trực tiếp giống như đối với bất kỳ câu lệnh nhập nào: Có một mô -đun tiêu chuẩn expression_stmt ::= 74, được mô tả sau và nó sẽ được nhập theo cách thông thường tại thời điểm tuyên bố trong tương lai được thực thi.Các ngữ nghĩa thời gian chạy thú vị phụ thuộc vào tính năng cụ thể được kích hoạt bởi tuyên bố trong tương lai. Lưu ý rằng không có gì đặc biệt về tuyên bố: assignment_stmt ::= (7 Đó không phải là một tuyên bố trong tương lai; Nó là một tuyên bố nhập khẩu thông thường không có hạn chế ngữ nghĩa hoặc cú pháp đặc biệt. Mã được biên dịch bởi các cuộc gọi đến các chức năng tích hợp expression_stmt ::= 75 và expression_stmt ::= 76 xảy ra trong mô-đun expression_stmt ::= 77 chứa một câu lệnh trong tương lai, theo mặc định, sẽ sử dụng cú pháp mới hoặc ngữ nghĩa liên quan đến tuyên bố trong tương lai. Điều này có thể được kiểm soát bởi các đối số tùy chọn thành expression_stmt ::= 76 - xem tài liệu của hàm đó để biết chi tiết.Một tuyên bố trong tương lai được gõ tại một dấu nhắc thông dịch tương tác sẽ có hiệu lực cho phần còn lại của phiên phiên dịch. Nếu một trình thông dịch được bắt đầu với tùy chọn expression_stmt ::= 79, được chuyển tên tập lệnh để thực thi và tập lệnh bao gồm một câu lệnh trong tương lai, nó sẽ có hiệu lực trong phiên tương tác bắt đầu sau khi tập lệnh được thực thi.Xem thêm PEP 236 - Quay lại __future__ - Back to the __future__Đề xuất ban đầu cho cơ chế __future__. 7.12. Tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 4The class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 4 statement¶assignment_stmt ::= (8 Tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34 là một tuyên bố giữ cho toàn bộ khối mã hiện tại. Nó có nghĩa là các định danh được liệt kê sẽ được hiểu là toàn cầu. Không thể gán cho một biến toàn cầu mà không có class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34, mặc dù các biến miễn phí có thể đề cập đến Globals mà không được tuyên bố toàn cầu. Tên được liệt kê 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 34 không được sử dụng trong cùng một khối mã trước khi tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34. Các tên được liệt kê trong một 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 34 không được định nghĩa là các tham số chính thức hoặc là mục tiêu trong các câu lệnh expression_stmt ::= 05 hoặc expression_stmt ::= 03 hoặc trong danh sách mục tiêu expression_stmt ::= 15, định nghĩa expression_stmt ::= 89, định nghĩa chức năng, câu lệnh expression_stmt ::= 32 hoặc chú thích biến.Chi tiết triển khai CPYThon: Việc triển khai hiện tại không thực thi một số hạn chế này, nhưng các chương trình không nên lạm dụng sự tự do này, vì việc triển khai trong tương lai có thể thực thi chúng hoặc âm thầm thay đổi ý nghĩa của chương trình. The current implementation does not enforce some of these restrictions, but programs should not abuse this freedom, as future implementations may enforce them or silently change the meaning of the program. Lập trình viên Lưu ý: class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34 is a directive to the parser. It applies only to code parsed at the same time as the class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34 statement. In particular, a class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34 statement contained in a string or code object supplied to the built-in expression_stmt ::= 75 function does not affect the code block containing the function call, and code contained in such a string is unaffected by class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34 statements in the code containing the function call. The same applies to the expression_stmt ::= 96 and
expression_stmt ::= 76 functions.7.13. Tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 5The class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 5 statement¶assignment_stmt ::= (9 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 35 khiến các định danh được liệt kê tham khảo các biến bị ràng buộc trước đó trong phạm vi kèm theo gần nhất không bao gồm toàn cầu. Điều này rất quan trọng vì hành vi mặc định để ràng buộc là tìm kiếm không gian tên cục bộ trước. Tuyên bố cho phép mã được đóng gói để lặp lại các biến bên ngoài phạm vi cục bộ bên cạnh phạm vi toàn cầu (mô -đun). Các tên được liệt kê trong một tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 35, không giống như các tên được liệt kê trong một tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 34, phải tham khảo các ràng buộc có sẵn trong một phạm vi kèm theo (phạm vi mà một ràng buộc mới nên được tạo ra không thể được xác định rõ ràng). Tên được liệt kê trong một tuyên bố class Cls: x = 3 # class variable inst = Cls() inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 35 không được va chạm với các ràng buộc có sẵn trong phạm vi địa phương. Xem thêm PEP 236 - Quay lại __future__ - Access to Names in Outer ScopesĐề xuất ban đầu cho cơ chế __future__. Làm thế nào để bạn viết nhiều tuyên bố trong Python?Bán kết được sử dụng để phân tách nhiều câu lệnh trên một dòng duy nhất (;). (;).
Làm thế nào để bạn bắt đầu viết một tuyên bố trong Python?Trong Python, chúng tôi sử dụng biểu tượng băm (#) để bắt đầu viết bình luận.Nó mở rộng lên đến nhân vật Newline.Nhận xét là cho các lập trình viên để hiểu rõ hơn một chương trình.Thông dịch viên Python bỏ qua ý kiến.use the hash (#) symbol to start writing a comment. It extends up to the newline character. Comments are for programmers to better understand a program. Python Interpreter ignores comments.
3 tuyên bố có điều kiện trong Python là gì?Chúng tôi có các loại câu lệnh có điều kiện khác nhau như nếu, nếu-else, elif, lồng nhau nếu và các câu lệnh if-else được kiểm soát việc thực hiện chương trình của chúng tôi.if, if-else, elif, nested if, and nested if-else statements which control the execution of our program.
Các tuyên bố trong lập trình Python là gì?Một câu lệnh là một hướng dẫn mà trình thông dịch Python có thể thực thi.Chúng tôi đã thấy hai loại tuyên bố: in và gán.Khi bạn nhập một câu lệnh trên dòng lệnh, Python thực hiện nó và hiển thị kết quả, nếu có.Kết quả của một câu lệnh in là một giá trị.an instruction that the Python interpreter can execute. We have seen two kinds of statements: print and assignment. When you type a statement on the command line, Python executes it and displays the result, if there is one. The result of a print statement is a value. |