Hướng dẫn does python have reference semantics? - python có ngữ nghĩa tham chiếu không?

Phần này sẽ bắt đầu bao gồm các ngữ nghĩa cơ bản của ngôn ngữ Python. Trái ngược với cú pháp được đề cập trong phần trước, ngữ nghĩa của một ngôn ngữ liên quan đến ý nghĩa của các tuyên bố. Như với cuộc thảo luận của chúng tôi về cú pháp, ở đây chúng tôi sẽ xem trước một vài trong số các công trình ngữ nghĩa thiết yếu trong Python để cung cấp cho bạn một khung tham chiếu tốt hơn để hiểu mã trong các phần sau.

Phần này sẽ bao gồm ngữ nghĩa của các biến và đối tượng, đó là những cách chính bạn lưu trữ, tham khảo và hoạt động trên dữ liệu trong tập lệnh Python.

Các biến Python là Con trỏ

Việc gán các biến trong Python cũng dễ dàng như đặt một tên biến ở bên trái của dấu hiệu bằng (=):

# assign 4 to the variable x
x = 4

Điều này có vẻ đơn giản, nhưng nếu bạn có mô hình tinh thần sai về những gì hoạt động này làm, cách thức hoạt động của Python có vẻ khó hiểu. Chúng tôi sẽ đào sâu vào đó ở đây.

Trong nhiều ngôn ngữ lập trình, các biến được cho là tốt nhất là các thùng chứa hoặc xô mà bạn đặt dữ liệu. Vì vậy, trong C, ví dụ, khi bạn viết

Về cơ bản, bạn đang xác định một "thùng bộ nhớ" có tên x và đặt giá trị 4 vào đó. Trong Python, ngược lại, các biến được cho là tốt nhất không phải là container mà là con trỏ. Vì vậy, trong Python, khi bạn viết

Về cơ bản, bạn đang xác định một con trỏ có tên x chỉ vào một số nhóm khác chứa giá trị 4. Lưu ý Một hậu quả của điều này: Bởi vì các biến Python chỉ chỉ ra các đối tượng khác nhau, không cần phải "khai báo" biến hoặc thậm chí yêu cầu biến luôn chỉ vào thông tin cùng loại! Đây là ý nghĩa trong đó mọi người nói Python được gõ tự động: tên biến có thể trỏ đến các đối tượng thuộc bất kỳ loại nào. Vì vậy, trong Python, bạn có thể làm những việc như thế này:

Mặc dù người dùng các ngôn ngữ được đánh rơi có thể bỏ lỡ an toàn loại đi kèm với các khai báo như những ngôn ngữ được tìm thấy trong C,

Loại gõ động này là một trong những tác phẩm làm cho Python rất nhanh để viết và dễ đọc.

Có một hậu quả của cách tiếp cận "biến là con trỏ" này mà bạn cần phải nhận thức được. Nếu chúng ta có hai tên biến chỉ vào cùng một đối tượng có thể thay đổi, thì việc thay đổi cái này cũng sẽ thay đổi cái kia! Ví dụ: hãy tạo và sửa đổi danh sách:

Chúng tôi đã tạo hai biến xy mà cả hai đều chỉ vào cùng một đối tượng. Bởi vì điều này, nếu chúng tôi sửa đổi danh sách thông qua một trong các tên của nó, chúng tôi sẽ thấy rằng danh sách "khác" cũng sẽ được sửa đổi:

Hành vi này có vẻ khó hiểu nếu bạn nghĩ sai về các biến dưới dạng các thùng chứa dữ liệu. Nhưng nếu bạn nghĩ chính xác các biến là con trỏ đến các đối tượng, thì hành vi này có ý nghĩa.

Ngoài ra, lưu ý rằng nếu chúng ta sử dụng "=" để gán một giá trị khác cho x, điều này sẽ không ảnh hưởng đến giá trị của y - gán chỉ đơn giản là một sự thay đổi của đối tượng mà biến chỉ vào:

Một lần nữa, điều này có ý nghĩa hoàn hảo nếu bạn nghĩ về xy là con trỏ và toán tử "=" như một hoạt động thay đổi những gì tên chỉ ra.

Bạn có thể tự hỏi liệu ý tưởng con trỏ này có làm cho các hoạt động số học trong Python khó theo dõi hay không, nhưng Python được thiết lập để đây không phải là vấn đề. Số, chuỗi và các loại đơn giản khác là bất biến: bạn không thể thay đổi giá trị của chúng - bạn chỉ có thể thay đổi giá trị nào các biến chỉ ra. Vì vậy, ví dụ, hoàn toàn an toàn khi thực hiện các hoạt động như sau:

Khi chúng tôi gọi =4, chúng tôi không sửa đổi giá trị của đối tượng =5 được chỉ ra bởi x; Chúng tôi đang thay đổi biến x để nó trỏ đến một đối tượng số nguyên mới có giá trị =8. Vì lý do này, giá trị của y không bị ảnh hưởng bởi hoạt động.

Mọi thứ đều là một đối tượng

Python là một ngôn ngữ lập trình hướng đối tượng, và trong Python, mọi thứ đều là một đối tượng.

Chúng ta hãy tìm hiểu ý nghĩa của điều này. Trước đó, chúng tôi đã thấy rằng các biến chỉ đơn giản là con trỏ và chính các tên biến không có thông tin loại đính kèm. Điều này dẫn đến một số người tuyên bố sai lầm rằng Python là ngôn ngữ không có loại. Nhưng đây không phải là trường hợp! Xem xét những điều sau:

Python có các loại; Tuy nhiên, các loại được liên kết không phải với các tên biến mà với chính các đối tượng.

Trong các ngôn ngữ lập trình hướng đối tượng như Python, một đối tượng là một thực thể chứa dữ liệu cùng với siêu dữ liệu và/hoặc chức năng liên quan. Trong Python, mọi thứ đều là một đối tượng, có nghĩa là mọi thực thể đều có một số siêu dữ liệu (được gọi là thuộc tính) và chức năng liên quan (được gọi là phương thức). Các thuộc tính và phương thức này được truy cập thông qua cú pháp DOT.

Ví dụ: trước khi chúng tôi thấy danh sách đó có phương thức x0, thêm một mục vào danh sách và được truy cập thông qua cú pháp DOT ("x1"):

Mặc dù có thể mong đợi các đối tượng hỗn hợp như danh sách có thuộc tính và phương thức, nhưng đôi khi điều bất ngờ là trong Python, ngay cả các loại đơn giản cũng có các thuộc tính và phương thức đính kèm. Ví dụ: các loại số có thuộc tính x2 và x3 trả về phần thực và tưởng tượng của giá trị, nếu được xem là một số phức tạp:

Các phương thức giống như các thuộc tính, ngoại trừ chúng là các hàm mà bạn có thể gọi bằng cách sử dụng dấu ngoặc đơn mở và đóng. Ví dụ: số điểm nổi có một phương thức gọi là x4 kiểm tra xem giá trị có phải là số nguyên hay không:

Khi chúng ta nói rằng mọi thứ trong Python là một đối tượng, chúng ta thực sự có nghĩa là mọi thứ đều là một đối tượng - ngay cả các thuộc tính và phương thức của các đối tượng là đối tượng với thông tin x5 của chính họ:

Chúng tôi sẽ thấy rằng sự lựa chọn thiết kế của Python mọi thứ cho phép một số cấu trúc ngôn ngữ rất thuận tiện.

Có tài liệu tham khảo trong Python không?

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.. A 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.

Ngữ nghĩa trong python là gì?

Python sử dụng ngữ nghĩa động, có nghĩa là các biến của nó là các đối tượng động.Về cơ bản, đó chỉ là một khía cạnh khác của Python là một ngôn ngữ cấp cao.Trong ví dụ danh sách ở trên, một ngôn ngữ cấp thấp như C yêu cầu bạn xác định tĩnh loại biến.dynamic semantics, meaning that its variables are dynamic objects. Essentially, it's just another aspect of Python being a high-level language. In the list example above, a low-level language like C requires you to statically define the type of a variable.

Python có con trỏ hoặc tài liệu tham khảo không?

Không, chúng tôi không có bất kỳ loại con trỏ nào trong ngôn ngữ Python.Các đối tượng được truyền đến chức năng bằng cách tham chiếu.Cơ chế được sử dụng trong Python giống hệt như vượt qua các con trỏ bằng giá trị trong C.. The objects are passed to function by reference. The mechanism used in Python is exactly like passing pointers by the value in C.

Python có vượt qua tham chiếu hay giá trị không?

Mô hình truyền cho đối số của Python không phải là người vượt qua giá trị, hay vượt qua bằng cách tham chiếu, nhưng đó là cách vượt qua tham chiếu đối tượng.Các mô hình của Pass Pass By Value, Pass Pass By tham chiếu và Pass Pass By By Accident Tham khảo đối tượng có thể được hiểu bằng cách khám phá các hàm ví dụ dưới đây.neither “Pass by Value” nor “Pass by Reference” but it is “Pass by Object Reference”. The paradigms of “Pass by value”, “Pass by Reference” and “Pass by object Reference” can be understood by exploring the below example functions.