Hướng dẫn why does python not have pointers? - tại sao python không có con trỏ?

2 Câu trả lời cho câu hỏi này.

Từ một quan điểm, & nbsp; mọi thứ & nbsp; là a & nbsp; con trỏ & nbsp; in & nbsp; python. Ví dụ của bạn hoạt động rất giống mã C ++. (Một tương đương gần hơn sẽ sử dụng một số loại chia sẻ_ptr thay vì int*.)everything is a pointer in Python. Your example works a lot like the C++ code. (A closer equivalent would use some type of shared_ptr instead of int* .)

Python & nbsp; không cần & nbsp; Con trỏ & nbsp; để đạt được điều này vì mọi biến là một tham chiếu đến một đối tượng. Các tài liệu tham khảo này hơi khác so với các tài liệu tham khảo C ++, trong đó chúng có thể được gán cho - giống như & nbsp; Con trỏ & nbsp; trong C ++. & NBSP; Python & nbsp; cách xử lý tiêu chuẩn hỗ trợ bạn. Trong & nbsp; python & nbsp; mỗi biến là một tài liệu tham khảo. doesn't need pointers in order to achieve this as every variable is a reference to an object. These references are slightly different from C++ references, in that they can be assigned to - much like pointers in C++. Python standard way of handling things supports you. In python every variable is a reference.

Hi vọng điêu nay co ich!!

Nếu bạn cần tìm hiểu thêm về Python, nên tham gia & nbsp; Python đào tạo & nbsp; ngày nay.

Thanks!

Hướng dẫn why does python not have pointers? - tại sao python không có con trỏ?
Đã trả lời ngày 16 tháng 12 năm 2020by Gitika • & NBSP; 65.870 điểm EditedJul 8, 2021by Sarfaraz Dec 16, 2020 by Gitika
• 65,870 points

edited Jul 8, 2021 by Sarfaraz

Các câu hỏi liên quan trong Python

Tôi đã viết lớp đơn giản sau đây, một cách hiệu quả, một cách để mô phỏng một con trỏ trong Python:

class Parameter:
    """Syntactic sugar for getter/setter pair
    Usage:

    p = Parameter(getter, setter)

    Set parameter value:
    p(value)
    p.val = value
    p.set(value)

    Retrieve parameter value:
    p()
    p.val
    p.get()
    """
    def __init__(self, getter, setter):
        """Create parameter

        Required positional parameters:
        getter: called with no arguments, retrieves the parameter value.
        setter: called with value, sets the parameter.
        """
        self._get = getter
        self._set = setter

    def __call__(self, val=None):
        if val is not None:
            self._set(val)
        return self._get()

    def get(self):
        return self._get()

    def set(self, val):
        self._set(val)

    @property
    def val(self):
        return self._get()

    @val.setter
    def val(self, val):
        self._set(val)

Dưới đây là một ví dụ về việc sử dụng (từ trang Notebook Jupyter):

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]

Tất nhiên, cũng dễ dàng thực hiện công việc này cho các mục hoặc thuộc tính của một đối tượng. Thậm chí còn có một cách để làm những gì OP yêu cầu, sử dụng Globals ():

def setter(val, dict=globals(), key='a'):
    dict[key] = val

def getter(dict=globals(), key='a'):
    return dict[key]

pa = Parameter(getter, setter)
pa(2)
print(a)
pa(3)
print(a)

Điều này sẽ in ra 2, tiếp theo là 3.

Làm rối với không gian tên toàn cầu theo cách này là một ý tưởng khủng khiếp, nhưng nó cho thấy rằng có thể (nếu không thể chấp nhận được) để làm những gì OP yêu cầu.

Ví dụ là, tất nhiên, khá vô nghĩa. Nhưng tôi đã thấy lớp này hữu ích trong ứng dụng mà tôi đã phát triển nó: một mô hình toán học có hành vi được điều chỉnh bởi nhiều tham số toán học có thể xử lý người dùng, thuộc các loại khác nhau (vì chúng phụ thuộc vào các đối số dòng lệnh, không được biết tại thời điểm biên dịch). Và một khi quyền truy cập vào một cái gì đó đã được gói gọn trong một đối tượng tham số, tất cả các đối tượng như vậy có thể được thao tác theo cách thống nhất.

Mặc dù nó trông không giống con trỏ C hoặc C ++, nhưng đây là giải quyết một vấn đề mà tôi đã giải quyết bằng con trỏ nếu tôi viết bằng C ++.

Tiếp theo → ← Prev

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về con trỏ trong Python và xem tại sao Python không hỗ trợ các khái niệm con trỏ.

Chúng ta cũng sẽ hiểu làm thế nào chúng ta có thể mô phỏng con trỏ trong Python. Dưới đây là sự ra đời của con trỏ cho những người không có bất kỳ điều gì về nó.

Chúng ta cũng sẽ hiểu làm thế nào chúng ta có thể mô phỏng con trỏ trong Python. Dưới đây là sự ra đời của con trỏ cho những người không có bất kỳ điều gì về nó.

Con trỏ là gì?

Con trỏ là một công cụ rất phổ biến và hữu ích để lưu trữ địa chỉ của biến. Nếu ai đó đã từng làm việc với một ngôn ngữ cấp thấp như C. C ++, anh ấy/cô ấy có thể sẽ quen thuộc với các gợi ý. Nó quản lý mã rất hiệu quả. Nó có thể hơi khó khăn cho người mới bắt đầu, nhưng nó là một trong những khái niệm quan trọng của chương trình. Tuy nhiên, nó có thể dẫn đến các lỗi quản lý bộ nhớ khác nhau. Do đó, định nghĩa của con trỏ -

"Con trỏ là các biến giữ địa chỉ bộ nhớ của một biến khác. Các biến con trỏ được biểu thị bằng dấu hoa thị (*)."

Hãy xem ví dụ sau đây về con trỏ trong ngôn ngữ lập trình C.

Ví dụ - Cách sử dụng con trỏ trong C

Output:

Address of o: 2686784
Value of o: 22

Address of pointer po: 2686784
Content of pointer po: 22

Address of pointer po: 2686784
Content of pointer po: 11

Address of o: 2686784
Value of o: 2

Bên cạnh việc hữu ích, gợi ý không được sử dụng trong Python. Trong chủ đề này, chúng tôi sẽ thảo luận về mô hình đối tượng của Python và tìm hiểu lý do tại sao con trỏ trong Python không tồn tại. Chúng tôi cũng sẽ học các cách khác nhau để mô phỏng con trỏ trong Python. Đầu tiên, chúng ta hãy thảo luận tại sao Python không hỗ trợ con trỏ.

Tại sao Python không hỗ trợ con trỏ

Lý do chính xác cho việc không hỗ trợ con trỏ không rõ ràng. Con trỏ trong Python có thể tồn tại nguyên bản không? Khái niệm chính về Python là sự đơn giản của nó, nhưng con trỏ đã vi phạm Zen of Python. Con trỏ chủ yếu được khuyến khích thay đổi ngầm hơn là những thay đổi rõ ràng. Họ cũng phức tạp, đặc biệt là cho người mới bắt đầu.Zen of Python. Pointers are mainly encouraged implicit changes rather than explicit ones. They are also complex, especially for beginners.

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.

  • Các đối tượng bất biến so với có thể thay đổi
  • Biến/tên Python

Đối tượng trong Python

Trong Python, mọi thứ đều là một đối tượng, thậm chí lớp, chức năng, biến, v.v ... 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ị

Hãy thảo luận từng người một.

Đếm tham chiếu - Nó được sử dụng để quản lý bộ nhớ. Để có thêm thông tin về quản lý bộ nhớ Python, hãy đọc Quản lý bộ nhớ trong Python. It is used for memory management. To get more information regarding Python memory management, read Memory Management in Python.

Loại - Lớp Cpython được sử dụng làm loại để đảm bảo an toàn loại trong thời gian chạy. Cuối cùng, có một giá trị, đó là giá trị thực tế được liên kết với đối tượng. The CPython layer is used as the type to make sure type safety during runtime. Finally, there is a value, which is the actual value associated with the object.

Nếu chúng ta đi sâu trong đối tượng này, chúng ta sẽ tìm thấy không phải tất cả các đối tượng đều giống nhau. Sự khác biệt quan trọng giữa các loại đối tượng là bất biến và có thể thay đổi. Trước hết, chúng ta cần hiểu sự khác biệt giữa các loại đối tượng vì nó khám phá con trỏ trong Python.

Các đối tượng bất biến so với có thể thay đổi

Các đối tượng bất biến không thể được sửa đổi, trong đó các đối tượng có thể thay đổi có thể được sửa đổi. Hãy xem bảng sau đây của các loại phổ biến và liệu chúng có thể thay đổi hay không.

Các đối tượngLoại hình
IntBất biến
Trôi nổiBất biến
Trôi nổiBất biến
Trôi nổiBool
Danh sáchBool
Danh sáchBool
Danh sáchBất biến
Trôi nổiBất biến
Trôi nổiBool

Danh sáchid() method. This method returns the object's memory address.

Có thể thay đổi

Output:

140720979625920

Bộ

Output:

140720979625888

Tổ hợpstr.

Output:

2315970974512
JavaTpoint
1977728175088

Tuple

Output:

Traceback (most recent call last):
  File "C:/Users/DEVANSH SHARMA/PycharmProjects/MyPythonProject/python1.py", line 34, in 
    s[0] = T
NameError: name 'T' is not defined

Frozensetstr is the immutable objects.

DIGN

Output:

2571132658944
[3, 4, 8, 4]
2571132658944

Chúng ta có thể kiểm tra loại đối tượng trên bằng phương thức ID (). Phương thức này trả về địa chỉ bộ nhớ của đối tượng.my_list has the id originally, and we have appended with 5 to the list; my_list has the same id because the list supports the mutability.

Chúng tôi đang gõ các dòng dưới đây trong một môi trường thay thế.

Trong mã trên, chúng tôi đã gán giá trị 10 cho x. Nếu chúng tôi sửa đổi giá trị này bằng cách thay thế, chúng tôi sẽ nhận được các đối tượng mới.

Như chúng ta có thể thấy, chúng tôi sửa đổi mã trên và nhận các đối tượng mới làm phản hồi. Hãy lấy một ví dụ khác về str.

Một lần nữa, chúng tôi sửa đổi giá trị của X bằng cách thêm một chuỗi mới và chúng tôi nhận được địa chỉ bộ nhớ mới. Hãy cố gắng thêm chuỗi trực tiếp vào s.

Mã trên trả về lỗi, nó có nghĩa là chuỗi không hỗ trợ đột biến. Vì vậy, STR là các đối tượng bất biến.

Bây giờ, chúng ta sẽ thấy đối tượng có thể thay đổi như danh sách.

  • Như chúng ta có thể thấy trong mã trên, my_list có ID ban đầu và chúng tôi đã thêm 5 vào danh sách; My_list có cùng một ID vì danh sách hỗ trợ khả năng đột biến.
  • Hiểu các biến python
  • Cách xác định các biến trong Python khác nhiều so với C hoặc C ++. Biến Python không xác định kiểu dữ liệu. Trong thực tế, Python có tên, không phải là biến.

Vì vậy, chúng ta cần hiểu sự khác biệt giữa các biến và tên và đặc biệt là đúng khi chúng ta đang điều hướng chủ đề khó khăn của con trỏ trong Python.

Hướng dẫn why does python not have pointers? - tại sao python không có con trỏ?

Hãy hiểu cách thức hoạt động của biến trong C và cách tên hoạt động trong Python.

Các biến trong c

Trong ngôn ngữ C, một biến là nó giữ giá trị hoặc giá trị lưu trữ. Nó được xác định với kiểu dữ liệu. Hãy xem mã sau xác định biến.

Phân bổ đủ bộ nhớ cho một số nguyên.

Chúng tôi gán giá trị 286 cho vị trí bộ nhớ đó.

X đại diện cho giá trị đó.

Hướng dẫn why does python not have pointers? - tại sao python không có con trỏ?

Nếu chúng ta đại diện cho quan điểm của bộ nhớ -

Như chúng ta có thể thấy, X có vị trí bộ nhớ cho giá trị 286. Bây giờ, chúng ta sẽ gán giá trị mới cho x.

x = 250

  1. Giá trị mới này ghi đè lên giá trị trước đó. Nó có nghĩa là biến x có thể thay đổi.
  2. Vị trí giá trị của x là giống nhau, nhưng giá trị đã thay đổi. Đó là một điểm quan trọng chỉ ra rằng X là vị trí bộ nhớ, không chỉ tên của nó.
  3. Bây giờ, chúng tôi giới thiệu biến mới lấy X, sau đó Y tạo hộp bộ nhớ mới.
  4. Biến Y tạo hộp mới có tên Y sao chép giá trị từ X vào hộp.
  5. Tên trong Python
  6. Như chúng ta đã thảo luận trước đó Python không có các biến. Nó có tên và chúng tôi sử dụng thuật ngữ này làm biến. Nhưng có một sự khác biệt giữa các biến và tên. Hãy xem ví dụ sau.

Mã trên được chia nhỏ trong quá trình thực thi.

Hướng dẫn why does python not have pointers? - tại sao python không có con trỏ?

Tạo một pyobject

Đặt mã đánh máy thành Integer cho Pyobject

Đặt giá trị thành 289 cho Pyobjectrefcount also increased by one. We can confirm it as follows.

Output:

True

Tạo một tên gọi là x

Point X vào Pyobject mới

Tăng số tiền của Pyobject lên 1

Nó sẽ trông giống như dưới đây.

  • Chúng ta có thể hiểu hoạt động nội bộ của một biến trong Python. Biến X trỏ đến tham chiếu của đối tượng và nó không có không gian bộ nhớ như trước. Nó cũng hiển thị x = 289 là ràng buộc tên X với một tham chiếu.
  • Bây giờ, chúng tôi giới thiệu biến mới và gán x cho nó.

Trong Python, biến y sẽ không tạo đối tượng mới; Nó chỉ là một tên mới chỉ vào cùng một đối tượng. Các đối tượng refcount cũng tăng thêm một. Chúng tôi có thể xác nhận nó như sau.

Nếu chúng ta tăng giá trị của y lên một, nó sẽ không còn đề cập đến cùng một đối tượng.

Điều đó có nghĩa là, trong Python, chúng tôi không gán các biến. Thay vào đó, chúng tôi liên kết tên để tham khảo.

Mô phỏng con trỏ trong Python

Như chúng ta đã thảo luận, Python không hỗ trợ con trỏ, nhưng chúng ta có thể nhận được lợi ích của việc sử dụng con trỏ. Python cung cấp các cách khác để sử dụng con trỏ trong Python. Hai cách này được đưa ra dưới đây.

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
0

Sử dụng các loại có thể thay đổi làm con trỏ

Sử dụng các đối tượng Python tùy chỉnh

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
1

Chúng tôi đã sử dụng tuple trong mã trên, một đối tượng bất biến, vì vậy nó đã trả lại lỗi. Chúng ta cũng có thể sử dụng từ điển để mô phỏng con trỏ trong Python.

Hãy hiểu ví dụ sau đây chúng tôi sẽ đếm mọi hoạt động xảy ra trong chương trình. Chúng ta có thể sử dụng dict để đạt được điều này.

Thí dụ -

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
2

Giải trình -

Trong ví dụ trên, chúng tôi đã sử dụng từ điển đếm, theo dõi số lượng các cuộc gọi chức năng. Khi hàm foo () được gọi, bộ đếm được tăng 2 vì dict có thể thay đổi.count dictionary, which kept track of the number of function calls. When the foo() function is called, the counter is increased 2 because dict is mutable.

Sử dụng các đối tượng Python

Trong ví dụ trước, chúng tôi đã sử dụng dict để mô phỏng con trỏ trong Python, nhưng đôi khi thật khó để nhớ tất cả các tên khóa đã sử dụng. Chúng ta có thể sử dụng lớp tùy chỉnh Python thay cho từ điển. Hãy hiểu ví dụ sau.

Thí dụ -

Giải trình -

Trong ví dụ trên, chúng tôi đã sử dụng từ điển đếm, theo dõi số lượng các cuộc gọi chức năng. Khi hàm foo () được gọi, bộ đếm được tăng 2 vì dict có thể thay đổi.@property decorator. If you don't familiar with decorators, visit our Python decorator tutorial. The @property decorator will access funCalls and catPicture_served. Now, we will create an object of the Pointer class.

Sử dụng các đối tượng Python

Trong ví dụ trước, chúng tôi đã sử dụng dict để mô phỏng con trỏ trong Python, nhưng đôi khi thật khó để nhớ tất cả các tên khóa đã sử dụng. Chúng ta có thể sử dụng lớp tùy chỉnh Python thay cho từ điển. Hãy hiểu ví dụ sau.

Trong mã trên, chúng tôi đã xác định lớp con trỏ. Lớp này đã sử dụng Dict để giữ dữ liệu thực tế trong biến thành viên _Metrics. Nó sẽ cung cấp khả năng đột biến cho chương trình của chúng tôi. Chúng ta có thể làm điều này như sau.

Chúng tôi đã sử dụng công cụ trang trí @Property. Nếu bạn không quen thuộc với các nhà trang trí, hãy truy cập hướng dẫn trang trí Python của chúng tôi. Nhà trang trí @Property sẽ truy cập các funcalls và catpicture_served. Bây giờ, chúng tôi sẽ tạo một đối tượng của lớp con trỏ.

Ở đây chúng ta cần tăng các giá trị này.

Chúng tôi đã xác định hai phương thức mới - tăng () và cat_pics (). Chúng tôi đã sửa đổi các giá trị bằng cách sử dụng các chức năng này trong ma trận. Ở đây, chúng ta có thể thay đổi lớp giống như chúng ta đang sửa đổi con trỏ.

Mô -đun Python CtypesincrPointer.c into an object called incrPointer.o. The second command accepts object file and produce libinic.so to collaborate with ctypes.

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
3

Mô-đun Python Ctypes cho phép chúng tôi tạo một con trỏ loại C trong Python. Mô -đun này rất hữu ích nếu chúng tôi muốn thực hiện cuộc gọi chức năng đến thư viện C yêu cầu một con trỏ. Hãy hiểu ví dụ sau.ctypes.CDLL returns a shared object called libinic.so. It contains the incrPointer() function. If we need to specify the pointer to the functions we define in a shared object, we have to specify it using the ctypes. Let's see the below example.

Ví dụ - C ngôn ngữ

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
4

Trong hàm trên, chúng tôi đã tăng giá trị của X. Giả sử chúng ta lưu tệp trên có tên là incrpulum.c và lệnh loại sau trong thiết bị đầu cuối.

Lệnh đầu tiên biên dịch incppulum.c vào một đối tượng có tên là incrpulum.o. Lệnh thứ hai chấp nhận tệp đối tượng và tạo ra libinic.so để hợp tác với CTYPE.byref() which used to pass the variable reference.

Output:

l1 = list(range(10))
def l1_5_getter(lst=l1, number=5):
    return lst[number]

def l1_5_setter(val, lst=l1, number=5):
    lst[number] = val

[
    l1_5_getter(),
    l1_5_setter(12),
    l1,
    l1_5_getter()
]

Out = [5, None, [0, 1, 2, 3, 4, 12, 6, 7, 8, 9], 12]

p = Parameter(l1_5_getter, l1_5_setter)

print([
    p(),
    p.get(),
    p.val,
    p(13),
    p(),
    p.set(14),
    p.get()
])
p.val = 15
print(p.val, l1)

[12, 12, 12, 13, 13, None, 14]
15 [0, 1, 2, 3, 4, 15, 6, 7, 8, 9]
5

Trong mã trên, ctypes.cdll trả về một đối tượng được chia sẻ gọi là libinic.so. Nó chứa hàm incrpulum (). Nếu chúng ta cần chỉ định con trỏ đến các chức năng mà chúng ta xác định trong một đối tượng được chia sẻ, chúng ta phải chỉ định nó bằng cách sử dụng CTYPE. Hãy xem ví dụ dưới đây.

Nếu chúng ta gọi chức năng bằng cách sử dụng các loại khác nhau, nó sẽ thông qua một lỗi.

Điều này là do incrpinter yêu cầu một con trỏ và ctypes là một cách để vượt qua con trỏ trong Python.


v là một biến C. CTYPE cung cấp phương thức được gọi là byref () được sử dụng để truyền tham chiếu biến.Python 2D array

Chúng tôi đã tăng giá trị bằng cách sử dụng biến tham chiếu.

Tại sao con trỏ không được sử dụng trong Java và Python?

Vì vậy, tổng thể Java không có con trỏ (theo nghĩa C/C ++) bởi vì nó không cần chúng cho chương trình OOP mục đích chung.Hơn nữa, việc thêm các gợi ý vào Java sẽ làm suy yếu sự an toàn và sự mạnh mẽ và làm cho ngôn ngữ trở nên phức tạp hơn.it doesn't need them for general purpose OOP programming. Furthermore, adding pointers to Java would undermine security and robustness and make the language more complex.

Danh sách Python có sử dụng con trỏ không?

Bạn chỉ có thể tham chiếu các đối tượng trong Python.Danh sách, bộ dữ liệu, từ điển và tất cả các cấu trúc dữ liệu khác chứa con trỏ.Lists, tuples, dictionaries, and all other data structures contain pointers.

Tại sao chúng ta không sử dụng con trỏ?

Con trỏ cần để không gian bộ nhớ trong thời gian chạy.Để giảm việc sử dụng không gian bộ nhớ, Java không hỗ trợ con trỏ.Và cũng là con trỏ mất nhiều thời gian hơn trong thời gian chạy.to reduce the usage of memory spaces java does not support pointers. and also pointers take more time at the run time.

Làm thế nào để bạn tạo một con trỏ trong Python?

Mô-đun Python Ctypes cho phép chúng tôi tạo một con trỏ loại C trong Python.Mô -đun này rất hữu ích nếu chúng tôi muốn thực hiện cuộc gọi chức năng đến thư viện C yêu cầu một con trỏ.Hãy hiểu ví dụ sau.Trong hàm trên, chúng tôi đã tăng giá trị của X.