Tôi đang cố gắng đặt cho những điểm này một số tên là
>>> x+=1>>> x6>>> id(x)94529957049408
4.
Ngoài ra, hãy tạo hai danh sách riêng biệt một chỉ có tên điểm
>>> x+=1>>> x6>>> id(x)94529957049408
5 và tên còn lại có tên điểm và tọa độ của nó là
>>> x+=1>>> x6>>> id(x)94529957049408
6
Tôi có mã sau để tạo các điểm ngẫu nhiên.
n = 10
#print(n)
#for k in n:
V = []
V=range(n)
#print("vertices",V)
# Create n random points
random.seed()
pos = {i:(random.randint(0,4000),random.randint(0,5000)) for i in V}
#print("pos =", pos)
points = []
positions = []
for i in pos:
points.append(pos[i])
positions.append(i)
positions.append(pos[i])
7 được xác định ở trên với tọa độ của chúng, nhưng với các tên khác nhau. Có thể ai đó xin vui lòng giúp tôi với điều này?
Tạo các đối tượng Python tùy chỉnh để dễ sử dụng This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Pointers and Objects in Python
Các phương pháp này cho phép bạn mô phỏng các con trỏ trong Python mà không hy sinh sự an toàn bộ nhớ mà Python cung cấp.
Cảm ơn vì đã đọc. Nếu bạn vẫn còn thắc mắc, hãy thoải mái tiếp cận trong phần bình luận hoặc trên Twitter.
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Con trỏ và đồ vật trong Python
Làm thế nào để bạn viết một điểm trong Python?
Để tạo một điểm tại vị trí (7, 6) hiện cần ba dòng mã:.
p = point () p. x = 7 p. ....
Điểm lớp: "" "lớp điểm để đại diện và thao tác với tọa độ x, y." "" ".
>>> p = điểm (4, 2) >>> q = điểm (6, 3) >>> r = point () # r đại diện cho nguồn gốc (0, 0) >>> in (p ..
Có gợi ý trong Python?
Python có xu hướng cố gắng trừu tượng hóa các chi tiết triển khai như địa chỉ bộ nhớ từ người dùng. Python thường tập trung vào khả năng sử dụng thay vì tốc độ. Kết quả là, con trỏ trong Python don lồng thực sự có ý nghĩa. Mặc dù không sợ hãi, Python, theo mặc định, cung cấp cho bạn một số lợi ích của việc sử dụng con trỏ.
Hiểu gợi ý trong Python đòi hỏi một đường vòng ngắn vào các chi tiết triển khai của Python. Cụ thể, bạn sẽ cần phải hiểu:
Các đối tượng bất biến và có thể thay đổi
Biến/tên Python
Giữ địa chỉ bộ nhớ của bạn và để bắt đầu.
Đối tượng trong Python
Trong Python, mọi thứ đều là một đối tượng. Để chứng minh, bạn có thể mở ra một bản phát hành và khám phá bằng
Mã này cho bạn thấy rằng mọi thứ trong Python thực sự là một đối tượng. Mỗi đối tượng chứa ít nhất ba phần dữ liệu:
Số lượng tham chiếu
Loại hình
Giá trị
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Không phải tất cả các đối tượng đều giống nhau mặc dù. Có một sự khác biệt quan trọng khác mà bạn sẽ cần phải hiểu: các đối tượng bất biến và có thể thay đổi. Hiểu được sự khác biệt giữa các loại đối tượng thực sự giúp làm rõ lớp đầu tiên của hành tây là con trỏ trong Python.
Các đối tượng bất biến và có thể thay đổi
Trong Python, có hai loại đối tượng:
Các đối tượng bất biến có thể thay đổi. can’t be changed.
Các đối tượng có thể thay đổi có thể được thay đổi. can be changed.
Hiểu được sự khác biệt này là chìa khóa đầu tiên để điều hướng cảnh quan của con trỏ trong Python. Ở đây, một sự cố của các loại phổ biến và liệu chúng có thể thay đổi hay không thay đổi:
Loại hình
Immutable?
Giá trị
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Không phải tất cả các đối tượng đều giống nhau mặc dù. Có một sự khác biệt quan trọng khác mà bạn sẽ cần phải hiểu: các đối tượng bất biến và có thể thay đổi. Hiểu được sự khác biệt giữa các loại đối tượng thực sự giúp làm rõ lớp đầu tiên của hành tây là con trỏ trong Python.
Các đối tượng bất biến và có thể thay đổi
Không phải tất cả các đối tượng đều giống nhau mặc dù. Có một sự khác biệt quan trọng khác mà bạn sẽ cần phải hiểu: các đối tượng bất biến và có thể thay đổi. Hiểu được sự khác biệt giữa các loại đối tượng thực sự giúp làm rõ lớp đầu tiên của hành tây là con trỏ trong Python.
Các đối tượng bất biến và có thể thay đổi
Không phải tất cả các đối tượng đều giống nhau mặc dù. Có một sự khác biệt quan trọng khác mà bạn sẽ cần phải hiểu: các đối tượng bất biến và có thể thay đổi. Hiểu được sự khác biệt giữa các loại đối tượng thực sự giúp làm rõ lớp đầu tiên của hành tây là con trỏ trong Python.
Các đối tượng bất biến và có thể thay đổi
Trong Python, có hai loại đối tượng: returns the object’s memory address.
Mã này cho bạn thấy rằng mọi thứ trong Python thực sự là một đối tượng. Mỗi đối tượng chứa ít nhất ba phần dữ liệu:
Số lượng tham chiếu
Loại hình
Giá trị
Số lượng tham chiếu là để quản lý bộ nhớ. Để có cái nhìn sâu sắc về nội bộ của quản lý bộ nhớ trong Python, bạn có thể đọc quản lý bộ nhớ bằng Python.
Loại được sử dụng ở lớp Cpython để đảm bảo loại an toàn trong thời gian chạy. Cuối cùng, có giá trị, là giá trị thực tế được liên kết với đối tượng.
Không phải tất cả các đối tượng đều giống nhau mặc dù. Có một sự khác biệt quan trọng khác mà bạn sẽ cần phải hiểu: các đối tượng bất biến và có thể thay đổi. Hiểu được sự khác biệt giữa các loại đối tượng thực sự giúp làm rõ lớp đầu tiên của hành tây là con trỏ trong Python.
Các đối tượng bất biến và có thể thay đổi
Trong Python, có hai loại đối tượng:
Các đối tượng bất biến có thể thay đổi.
Các đối tượng có thể thay đổi có thể được thay đổi.
Hiểu được sự khác biệt này là chìa khóa đầu tiên để điều hướng cảnh quan của con trỏ trong Python. Ở đây, một sự cố của các loại phổ biến và liệu chúng có thể thay đổi hay không thay đổi:
4 ban đầu. Điều này trái ngược hoàn toàn với cách các tên Python hoạt động.
Tên trong Python
Python không có biến. Nó có tên. Vâng, đây là một điểm phạm vi, và bạn chắc chắn có thể sử dụng thuật ngữ biến nhiều như bạn muốn. Điều quan trọng là phải biết rằng có một sự khác biệt giữa các biến và tên.
Hãy cùng lấy mã tương đương từ ví dụ C ở trên và viết nó bằng Python:
Giống như trong C, mã trên được chia thành một số bước riêng biệt trong quá trình thực thi:
0) hiện đang ngồi trong bộ nhớ với số lượng tham chiếu là 0 và sẽ được dọn dẹp bởi người thu gom rác.
Bạn có thể giới thiệu một tên mới,
>>> x=1000>>> y=1000>>> xisyTrue
5, vào hỗn hợp như trong ví dụ C:
Trong bộ nhớ, bạn sẽ có một tên mới, nhưng không nhất thiết là một đối tượng mới:
Bây giờ bạn có thể thấy rằng một đối tượng Python mới chưa được tạo, chỉ là một tên mới chỉ vào cùng một đối tượng. Ngoài ra, đối tượng REFCOUNT đã tăng thêm một. Bạn có thể kiểm tra công bằng nhận dạng đối tượng để xác nhận rằng chúng giống nhau:
Tuyên bố trên dẫn đến cùng trạng thái bộ nhớ cuối như bổ sung. Để tóm tắt lại, trong Python, bạn không chỉ định các biến. Thay vào đó, bạn liên kết tên với các tài liệu tham khảo.
Một lưu ý về các đối tượng thực tập trong Python
Bây giờ bạn đã hiểu làm thế nào các đối tượng Python được tạo ra và tên bị ràng buộc với các đối tượng đó, đã đến lúc ném một cái cờ lê vào máy móc. Cờ lê đó đi theo tên của các đối tượng thực tập.
Có phải điều này lãng phí? Vâng, đúng vậy, nhưng đó là cái giá mà bạn phải trả cho tất cả những lợi ích tuyệt vời của Python. Bạn không bao giờ phải lo lắng về việc làm sạch các đối tượng trung gian này hoặc thậm chí cần biết rằng chúng tồn tại! Niềm vui là các hoạt động này tương đối nhanh và bạn không bao giờ phải biết bất kỳ chi tiết nào trong số đó cho đến bây giờ.
Có phải điều này lãng phí? Vâng, đúng vậy, nhưng đó là cái giá mà bạn phải trả cho tất cả những lợi ích tuyệt vời của Python. Bạn không bao giờ phải lo lắng về việc làm sạch các đối tượng trung gian này hoặc thậm chí cần biết rằng chúng tồn tại! Niềm vui là các hoạt động này tương đối nhanh và bạn không bao giờ phải biết bất kỳ chi tiết nào trong số đó cho đến bây giờ.
Các nhà phát triển Python cốt lõi, trong sự khôn ngoan của họ, cũng nhận thấy chất thải này và quyết định thực hiện một vài tối ưu hóa. Những tối ưu hóa này dẫn đến hành vi có thể gây ngạc nhiên cho người mới đến:
Trong ví dụ này, bạn thấy gần như cùng một mã như trước đây, ngoại trừ lần này kết quả là
2. Đây là kết quả của các đối tượng thực tập. Python tạo trước một tập hợp con của các đối tượng trong bộ nhớ và giữ chúng trong không gian tên toàn cầu để sử dụng hàng ngày.
>>> s[0]="R"Traceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment
9 là có thể thay đổi.
Hãy nhớ rằng, điều này chỉ mô phỏng hành vi con trỏ và không trực tiếp ánh xạ tới các con trỏ thực sự trong C hoặc C ++. Điều đó có nghĩa là, các hoạt động này đắt hơn so với C hoặc C ++.
Sử dụng các đối tượng Python
Tùy chọn
>>> s[0]="R"Traceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment
9 là một cách tuyệt vời để mô phỏng các con trỏ trong Python, nhưng đôi khi thật tẻ nhạt khi nhớ tên khóa bạn đã sử dụng. Điều này đặc biệt đúng nếu bạn sử dụng từ điển trong các phần khác nhau trong ứng dụng của bạn. Đây là nơi một lớp Python tùy chỉnh thực sự có thể giúp đỡ.
Để xây dựng trên ví dụ cuối cùng, giả sử rằng bạn muốn theo dõi các số liệu trong ứng dụng của mình. Tạo một lớp là một cách tuyệt vời để trừu tượng các chi tiết phiền phức:
79. Điều này sẽ cung cấp cho bạn khả năng đột biến mà bạn cần. Bây giờ bạn chỉ cần có khả năng truy cập các giá trị này. Một cách hay để làm điều này là với các thuộc tính:
>>> s[0]="R"Traceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment
9 là có thể thay đổi.
>>> x=5>>> id(x)94529957049376
2
Hãy nhớ rằng, điều này chỉ mô phỏng hành vi con trỏ và không trực tiếp ánh xạ tới các con trỏ thực sự trong C hoặc C ++. Điều đó có nghĩa là, các hoạt động này đắt hơn so với C hoặc C ++.
>>> s[0]="R"Traceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment
9 là một cách tuyệt vời để mô phỏng các con trỏ trong Python, nhưng đôi khi thật tẻ nhạt khi nhớ tên khóa bạn đã sử dụng. Điều này đặc biệt đúng nếu bạn sử dụng từ điển trong các phần khác nhau trong ứng dụng của bạn. Đây là nơi một lớp Python tùy chỉnh thực sự có thể giúp đỡ.
Để xây dựng trên ví dụ cuối cùng, giả sử rằng bạn muốn theo dõi các số liệu trong ứng dụng của mình. Tạo một lớp là một cách tuyệt vời để trừu tượng các chi tiết phiền phức:
>>> x=5>>> id(x)94529957049376
4
Mã này xác định một lớp >>> isinstance(1, object)
True
>>> isinstance(list(), object)
True
>>> isinstance(True, object)
True
>>> def foo():
... pass
...
>>> isinstance(foo, object)
True
77. Lớp này vẫn sử dụng >>> s[0] = "R"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
9 để giữ dữ liệu thực tế, nằm trong biến thành viên >>> isinstance(1, object)
True
>>> isinstance(list(), object)
True
>>> isinstance(True, object)
True
>>> def foo():
... pass
...
>>> isinstance(foo, object)
True
79. Điều này sẽ cung cấp cho bạn khả năng đột biến mà bạn cần. Bây giờ bạn chỉ cần có khả năng truy cập các giá trị này. Một cách hay để làm điều này là với các thuộc tính:
85 ở nhiều nơi khác nhau trong các ứng dụng của bạn và mô phỏng các con trỏ trong Python. Điều này rất hữu ích khi bạn có một cái gì đó giống như các số liệu cần được sử dụng và cập nhật thường xuyên trong các phần khác nhau trong các ứng dụng của bạn.
Tốt đẹp! Số nguyên của bạn đã được tăng lên bởi một. Xin chúc mừng, bạn đã sử dụng thành công con trỏ thực sự trong Python.
Sự kết luận
Bây giờ bạn có một sự hiểu biết tốt hơn về giao điểm giữa các đối tượng Python và con trỏ. Mặc dù một số sự khác biệt giữa tên và biến có vẻ như phạm vi, về cơ bản hiểu các thuật ngữ chính này mở rộng sự hiểu biết của bạn về cách Python xử lý các biến.
Bạn cũng đã học được một số cách tuyệt vời để mô phỏng con trỏ trong Python:
Sử dụng các vật thể có thể thay đổi làm con trỏ thấp
Các phương pháp này cho phép bạn mô phỏng các con trỏ trong Python mà không hy sinh sự an toàn bộ nhớ mà Python cung cấp.
Cảm ơn vì đã đọc. Nếu bạn vẫn còn thắc mắc, hãy thoải mái tiếp cận trong phần bình luận hoặc trên Twitter.
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Con trỏ và đồ vật trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Pointers and Objects in Python
Làm thế nào để bạn viết một điểm trong Python?
Để tạo một điểm tại vị trí (7, 6) hiện cần ba dòng mã:..
p = point () p. x = 7 p. ....
Điểm lớp: "" "lớp điểm để đại diện và thao tác với tọa độ x, y." "" ".
>>> p = điểm (4, 2) >>> q = điểm (6, 3) >>> r = point () # r đại diện cho nguồn gốc (0, 0) >>> in (p ..
Có gợi ý trong Python?
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ư chuyển các con trỏ theo giá trị trong C. Chúng ta có các biến Python không phải là một con trỏ.. The objects are passed to function by reference. The mechanism used in Python is exactly like passing pointers by the value in C. We have Python variables which is not a pointer.
Làm thế nào để bạn tìm thấy tọa độ của một điểm trong Python?
Khoa học dữ liệu thực tế sử dụng Python..
Đặt kích thước hình và điều chỉnh phần đệm giữa và xung quanh các ô phụ ..
Tạo danh sách các điểm dữ liệu x và y ..
Vẽ các điểm dữ liệu X và Y với màu đỏ và điểm đánh dấu được đóng vai chính ..
Đặt một số thuộc tính trục ..
Lặp lại X và Y để hiển thị các tọa độ trên cốt truyện ..
Tại sao con trỏ không được sử dụng trong Python?
Con trỏ có xu hướng tạo ra sự phức tạp trong mã, trong đó Python chủ yếu tập trung vào khả năng sử dụng hơn là tốc độ.Do đó, Python không hỗ trợ con trỏ.Tuy nhiên, Python mang lại một số lợi ích của việc sử dụng con trỏ.Trước khi hiểu con trỏ trong Python, chúng ta cần có ý tưởng cơ bản về các điểm sau.