Biến và các tài liệu tham khảo khác
Một chương trình Python truy cập các giá trị dữ liệu thông qua các tài liệu tham khảo. Tham chiếu là một tên đề cập đến vị trí cụ thể trong bộ nhớ của một giá trị [đối tượng]. Tài liệu tham khảo có dạng biến, thuộc tính và mục. Trong Python, một biến hoặc tham chiếu khác không có loại nội tại. Tuy nhiên, đối tượng mà một tham chiếu được ràng buộc tại một thời điểm nhất định có một loại, tuy nhiên. Bất kỳ tham chiếu nhất định có thể bị ràng buộc với các đối tượng thuộc các loại khác nhau trong quá trình thực hiện một chương trình.reference is a name that refers to the specific location in memory of a value [object]. References take the form of variables, attributes, and items. In Python, a variable or other reference has no intrinsic type. The object to which a reference is bound at a given time does have a type, however. Any given reference may be bound to objects of different types during the execution of a program.
Biến
Trong Python, không có tuyên bố. Sự tồn tại của một biến phụ thuộc vào một câu lệnh binds
biến, hoặc, nói cách khác, đặt một tên để giữ một tham chiếu đến một số đối tượng. Bạn cũng có thể unbind
một biến bằng cách đặt lại tên để nó không còn giữ một tham chiếu nữa. Các câu lệnh gán là cách phổ biến nhất để liên kết các biến và các tài liệu tham khảo khác. Tuyên bố del
không liên kết tài liệu tham khảo.
Liên kết một tài liệu tham khảo đã bị ràng buộc còn được gọi là rebinding
nó. Bất cứ khi nào ràng buộc được đề cập trong cuốn sách này, việc phục hồi được bao gồm hoàn toàn ngoại trừ nơi nó được loại trừ rõ ràng. Rebinding hoặc không liên kết một tham chiếu không có tác dụng đối với đối tượng mà tham chiếu bị ràng buộc, ngoại trừ một đối tượng biến mất khi không có gì đề cập đến nó. Việc dọn dẹp tự động các đối tượng mà không có tài liệu tham khảo nào được gọi là garbage
collection
.
Bạn có thể đặt tên cho một biến với bất kỳ định danh nào ngoại trừ 29 được bảo lưu dưới dạng từ khóa Python [xem Phần 4.1.2.2 trước đó trong chương này]. Một biến có thể là toàn cầu hoặc địa phương. GlobalVarable là một thuộc tính của một đối tượng mô -đun [Chương 7 bao gồm các mô -đun]. Một địa phương có thể sống trong một không gian tên địa phương chức năng [xem phần 4.10 sau đó trong chương này].global variable is an attribute of a module object [Chapter 7 covers modules]. A local variable lives in a function’s local namespace [see Section 4.10 later in this chapter].
Thuộc tính và mục đối tượng
Sự khác biệt giữa các thuộc tính và mục của một đối tượng nằm trong cú pháp bạn sử dụng để truy cập chúng. Một
a = b = c = 00 của một đối tượng được biểu thị bằng một tham chiếu đến đối tượng, theo sau là một khoảng thời gian [.], Tiếp theo là một định danh gọi là ____10
a = b = c = 02 [tức là, ____ 13 .____ 14 đề cập đến thuộc tính của đối tượng
a = b = c = 03 được đặt tên là
a = b = c = 04].
Một
a = b = c = 07 của một đối tượng được biểu thị bằng một tham chiếu đến đối tượng, theo sau là một biểu thức trong ngoặc [
a = b = c = 08]. Biểu thức trong ngoặc được gọi là
a = b = c = 09 hoặc
a, b, c = x0 đối với mục và đối tượng được gọi là
a, b, c = x1 của mục [tức là,
a = b = c = 03
a, b, c = x3
a = b = c = 04
a, b, c = x5 đề cập đến mục tại khóa hoặc chỉ mục
a = b = c = 04 trong đối tượng container
a = b = c = 03].
Các thuộc tính có thể gọi còn được gọi là
a, b, c = x8. Python không có sự khác biệt mạnh mẽ giữa các thuộc tính có thể gọi và không thể gọi được, như các ngôn ngữ khác làm. Các quy tắc chung về các thuộc tính cũng áp dụng cho các thuộc tính có thể gọi [Phương thức].
Truy cập các tài liệu tham khảo không tồn tại
Một lỗi lập trình phổ biến là cố gắng truy cập một tham chiếu không tồn tại. Ví dụ: một biến có thể không bị ràng buộc hoặc tên thuộc tính hoặc chỉ mục mục có thể không hợp lệ cho đối tượng mà bạn áp dụng. Trình biên dịch Python, khi phân tích và biên dịch mã nguồn, chỉ chẩn đoán lỗi cú pháp. Biên dịch không chẩn đoán các lỗi ngữ nghĩa như cố gắng truy cập thuộc tính, mục hoặc biến không liên kết. Python chỉ chẩn đoán các lỗi ngữ nghĩa khi mã sai lầm thực thi, tức là, khi chạy. Khi một hoạt động là một lỗi ngữ nghĩa Python, việc cố gắng làm tăng một ngoại lệ [xem Chương 6]. Truy cập một biến không tồn tại, thuộc tính hoặc mục, giống như bất kỳ lỗi ngữ nghĩa nào khác, làm tăng một ngoại lệ.
Báo cáo chuyển nhượng
Báo cáo chuyển nhượng có thể là đơn giản hoặc tăng cường. Gán đơn giản cho một biến [ví dụ:
a = b = c = 02
a, b = b, a0
a, b = b, a1] là cách bạn tạo một biến mới hoặc viết lại một biến hiện có thành một giá trị mới. Gán đơn giản cho một thuộc tính đối tượng [ví dụ: ____ 32 .________ 33
a, b = b, a0
a, b = b, a1] là một yêu cầu đối tượng
a, b = b, a2 để tạo hoặc tái lập thuộc tính
a, b = b, a3. Bài tập đơn giản cho một mục trong một container [ví dụ:
a, b = b, a2
a, b, c = x3
a, b, c = x0
binds
1 a, b = b, a1] là một yêu cầu để container
a, b = b, a2 để tạo hoặc lật lại mục với INDEX
a, b, c = x0.
Bài tập tăng cường [ví dụ:
a = b = c = 02
binds
6 a, b = b, a1] không thể, mỗi se, tạo ra các tài liệu tham khảo mới. Bài tập tăng cường có thể làm nổi bật một biến, yêu cầu một đối tượng để phản bác một trong các thuộc tính hoặc mục hiện có của nó hoặc yêu cầu đối tượng đích để tự sửa đổi [tất nhiên, một đối tượng có thể tạo các tài liệu tham khảo mới tùy ý trong khi trả lời các yêu cầu]. Khi bạn đưa ra yêu cầu cho một đối tượng, tùy thuộc vào đối tượng để quyết định có nên tôn trọng yêu cầu hay nêu ra một ngoại lệ.
Plain assignment
A plain assignment statement in the simplest form has the syntax:
target
=expression
The target is also known as the left-hand side, and the expression as the right-hand side. When the assignment statement executes, Python evaluates the right-hand side expression, then binds the expression’s value to the left-hand side target. The binding does not depend on the type of the value. In particular, Python draws no strong distinction between callable and non-callable objects, as some other languages do, so you can bind functions, methods, types, and other callables to variables.
Details of the binding do depend on the kind of target, however. The target in an assignment may be an identifier, an attribute reference, an indexing, or a slicing:
An identifier is a variable’s name: assignment to an identifier binds the variable with this name.
An attribute reference has the syntax
a, b = b, a
2.a = b = c = 0
2.a, b = b, a
2 is an expression denoting an object, anda = b = c = 0
2 is an identifier, called an attribute name of the object. Assignment to an attribute reference asks objecta, b = b, a
2 to bind its attribute nameda = b = c = 0
2.An indexing has the syntax
a, b = b, a
2a, b, c = x
3unbind
6a, b, c = x
5.a, b = b, a
2 andunbind
6 are expressions denoting any objects. Assignment to an indexing asks containera, b = b, a
2 to bind its item selected by the value ofunbind
6, also known as the index or key of the item.A slicing has the syntax
a, b = b, a
2a, b, c = x
3del
4:del
5a, b, c = x
5 ora, b = b, a
2a, b, c = x
3del
4:del
5:rebinding
1a, b, c = x
5.a, b = b, a
2,del
4,del
5, andrebinding
1 are expressions denoting any objects.del
4,del
5, andrebinding
1 are all optional [i.e.,a, b = b, a
2a, b, c = x
3:del
5garbage
3 is also a syntactically correct slicing, equivalent toa, b = b, a
2garbage
5:del
5garbage
7]. Assignment to a slicing asks containera, b = b, a
2 to bind or unbind some of its items.
We’ll come back to indexing and slicing targets later in this chapter when we discuss operations on lists and dictionaries.
When the target of the assignment is an identifier, the assignment statement specifies the binding of a variable. This is never disallowed: when you request it, it takes place. In all other cases, the assignment statement specifies a request to an object to bind one or more of its attributes or items. An object may refuse to create or rebind some [or all] attributes or items, raising an exception if you attempt a disallowed creation or rebinding.
There can be multiple targets and equals signs [
a, b = b, a0] in a plain assignment. For example:
a = b = c = 0
binds
variables collection
0, collection
1, and collection
2 to the value collection
3. Each time the statement executes, the right-hand side expression is evaluated once. Each target gets bound to the single object returned by the expression, just as if several simple assignments executed one after the other.
The target in a plain assignment can list two or more references separated by commas, optionally enclosed in parentheses or brackets. For example:
a, b, c = x
This requires
a = b = c = 03 to be a sequence with three items, and binds
collection
0 to the first item, collection
1 to the second, and collection
2 to the third. This kind of assignment is called an unpacking assignment, and, in general, the right-hand side expression must be a sequence with exactly as many items as
there are references in the target; otherwise, an exception is raised. Each reference in the target is bound to the corresponding item in the sequence. An unpacking assignment can also swap references:a, b = b, a
This rebinds collection
0 to refer to what collection
1 was bound to, and vice versa.
Augmented assignment
An augmented assignment differs from a plain assignment in that, instead of an equals sign [
a, b = b, a0] between the target and the expression, it uses an
a = b = c = 001
a = b = c = 002: a binary operator followed by
a, b = b, a0. The augmented operators are
binds
6, a = b = c = 005,
a = b = c = 006,
a = b = c = 007,
a = b = c = 008,
a = b = c = 009,
a = b = c = 010,
a = b = c = 011,
a = b = c = 012,
a = b = c = 013,
a = b = c = 014, and
a = b = c = 015. An augmented assignment can have only one target on the left-hand side; that is, augmented assignment doesn’t support multiple targets.
In an augmented assignment, just as in a plain one, Python first evaluates the right-hand side expression. Then, if the left-hand side refers to an object that has a special method for the appropriate in-place version of the operator, Python calls the method with the right-hand side value as its argument. It is up to the method to modify the left-hand side object appropriately and return the modified object [Chapter 5 covers special methods]. If the left-hand side object has no appropriate in-place special method, Python applies the corresponding binary operator to the left-hand side and right-hand side objects, then rebinds the target reference to the operator’s result. For example,
a = b = c = 03
binds
6 a = b = c = 04 is like
a = b = c = 03
a, b = b, a0
a = b = c = 03
a = b = c = 022
a = b = c = 04
a = b = c = 024 when
a = b = c = 03 has special method
a = b = c = 026. Otherwise
a = b = c = 03
binds
6 a = b = c = 04 is like
a = b = c = 03
a, b = b, a0
a = b = c = 03
a = b = c = 033
a = b = c = 04.
Bài tập tăng cường không bao giờ tạo ra tham chiếu mục tiêu của nó: Mục tiêu phải bị ràng buộc khi thực hiện gán tăng cường. Bài tập tăng cường có thể gắn lại tham chiếu mục tiêu vào một đối tượng mới hoặc sửa đổi cùng một đối tượng mà tham chiếu đích đã bị ràng buộc. Ngược lại, gán đơn giản có thể tạo hoặc khôi phục tham chiếu mục tiêu bên trái, nhưng nó không bao giờ sửa đổi đối tượng, nếu có, tham chiếu mục tiêu trước đó bị ràng buộc. Sự khác biệt giữa các đối tượng và tham chiếu đến các đối tượng là rất quan trọng ở đây. Ví dụ:
a = b = c = 03
a, b = b, a0
a = b = c = 03
a = b = c = 033
a = b = c = 04 Không sửa đổi đối tượng mà tên
a = b = c = 03 ban đầu bị ràng buộc. Thay vào đó, nó làm nổi bật tên
a = b = c = 03 để chỉ một đối tượng mới.
a = b = c = 03
binds
6 a = b = c = 04, ngược lại, sửa đổi đối tượng mà tên
a = b = c = 03 bị ràng buộc khi đối tượng đó có phương pháp đặc biệt
a = b = c = 026; Mặt khác,
a = b = c = 03
binds
6 a = b = c = 04 Rebind tên
a = b = c = 03, giống như
a = b = c = 03
a, b = b, a0
a = b = c = 03
a = b = c = 033
a = b = c = 04.
DEL tuyên bố
Mặc dù tên của nó, một tuyên bố del
không xóa các đối tượng: thay vào đó, nó không liên kết các tài liệu tham khảo. Xóa đối tượng có thể theo hậu quả, bằng cách thu gom rác, khi không còn tham chiếu đến một đối tượng.
Một câu lệnh del
bao gồm từ khóa del
, theo sau là một hoặc nhiều tham chiếu mục tiêu được phân tách bằng dấu phẩy [,]. Mỗi mục tiêu có thể là một biến, tham chiếu thuộc tính, lập chỉ mục hoặc cắt, giống như đối với các câu lệnh gán và phải được ràng buộc tại thời điểm del
thực thi. Khi mục tiêu del
là một định danh, câu lệnh del
chỉ định sự kết hợp của biến. Miễn là định danh bị ràng buộc, không liên kết, nó không bao giờ được phép: khi được yêu cầu, nó diễn ra.
Trong tất cả các trường hợp khác, câu lệnh del
chỉ định yêu cầu đến một đối tượng để giải phóng một hoặc nhiều thuộc tính hoặc mục của nó. Một đối tượng có thể từ chối giải phóng một số [hoặc tất cả] các thuộc tính hoặc vật phẩm, nêu ra một ngoại lệ nếu cố gắng không được phép không liên kết [xem thêm __delattr__ trong Chương 5]. Không liên kết với một sự cắt lát thường có tác dụng tương tự như gán một chuỗi trống cho lát cắt đó, nhưng tùy thuộc vào đối tượng container để thực hiện sự tương đương này.
Nhận Python một cách ngắn gọn với nền tảng học tập O hèReilly.learning platform.
Các thành viên của O hèReilly trải nghiệm đào tạo trực tuyến trực tiếp, cộng với sách, video và nội dung kỹ thuật số từ gần 200 nhà xuất bản.nearly 200 publishers.