Python là các lớp được truyền theo tham chiếu
Bản tóm tắt. Các biến được truyền theo tham chiếu đối tượng trong Python. Do đó, các đối tượng có thể thay đổi được truyền theo tham chiếu trong khi các đối tượng không thay đổi được truyền theo giá trị trong Python. Để chuyển các đối tượng bất biến bằng tham chiếu, bạn có thể trả về và gán lại giá trị cho biến hoặc chuyển nó vào trong từ điển/danh sách hoặc tạo một lớp và sử dụng biến self để tham khảo Show
Làm cách nào để chuyển một biến theo tham chiếu trong Python? Xem video này trên YouTube Vấn đề. Làm cách nào để chuyển một biến theo tham chiếu trong Python? Để sử dụng các hàm và lớp trong Python hoặc bất kỳ ngôn ngữ lập trình nào khác, điều cực kỳ quan trọng là chúng ta phải hiểu cách gọi hàm hoạt động dựa trên Gọi theo tham chiếu hoặc Gọi theo giá trị hoặc Gọi theo tham chiếu đối tượng. Hãy để chúng tôi thảo luận từng khái niệm này trước khi chúng tôi đi đến giải pháp cuối cùng Nguyên tắc cơ bản của cuộc gọi theo giá trịTrong phương thức gọi theo giá trị, giá trị của một đối số được sao chép vào tham số của hàm. Do đó, bất kỳ thay đổi nào được thực hiện đối với tham số bên trong hàm được gọi không được phản ánh trong các tham số thực tế của hàm gọi vì biến bên trong hàm được gọi và hàm gọi đề cập đến hai vị trí khác nhau trong bộ nhớ Thí dụ def func(): a = 10 print("Before Function call value of a = ",a) increment(a) print("After Function call is over value of a = ",a) print("Identity of a in func() is ",id(a)) def increment(k): a = k+10 print("Inside function call Value of a = ",a) print("Identity of a in increment() is ",id(a)) return a func() đầu ra Before Function call value of a = 10 Inside function call Value of a = 20 Identity of a in increment() is 140578841094464 After Function call is over value of a = 10 Identity of a in func() is 140578841094144 Nguyên tắc cơ bản của cuộc gọi theo tham chiếuTrong phương thức Gọi theo tham chiếu, địa chỉ của đối số được truyền cho hàm được gọi. Do đó, chúng tôi đang tham chiếu đến địa chỉ của biến trong trường hợp này và mọi thay đổi được thực hiện trong tham số bên trong hàm cũng được phản ánh bên ngoài hàm Gọi theo tham chiếu được hỗ trợ bởi các ngôn ngữ như Java. Chúng ta hãy xem một chương trình java nhỏ để hình dung định lý làm việc của lời gọi bằng phương thức tham chiếu. ( Tôi chủ ý sử dụng Java ở đây để chúng ta có thể so sánh và đối chiếu sự khác biệt khi thảo luận về Gọi theo phương thức tham chiếu đối tượng using Python in a while.) public class Reference{ int data=10; public static void main(String args[]){ Reference obj=new Reference(); System.out.println("before change "+obj.data); obj.change(obj);//passing object System.out.println("after change "+obj.data); } void change(Reference obj){ obj.data=obj.data+100;//changes will be in the instance variable } } đầu ra before change 10 after change 110 Để hiểu sự khác biệt với Phương thức gọi theo tham chiếu và Gọi theo giá trị, vui lòng xem hình ảnh động được cung cấp bên dưới Nguyên tắc cơ bản của cuộc gọi theo tham chiếu đối tượngNhiều người trong số các bạn có thể đã bắt gặp cách gọi theo tham chiếu và gọi theo giá trị của các phương thức gọi hàm nhưng nếu bạn là người mới trong thế giới Python, thì có lẽ thuật ngữ Gọi theo tham chiếu đối tượng còn mới đối với bạn. Đây là lời nhắc dành cho bạn trước khi chúng ta thảo luận về cách hoạt động của lệnh gọi hàm trong Python – Mọi thứ đều là đối tượng trong Python. Python không sử dụng cuộc gọi theo giá trị cũng như cuộc gọi theo tham chiếu. Nó sử dụng tham chiếu theo đối tượng/gọi theo chỉ định có nghĩa là. -
Thí dụ. Chương trình sau minh họa khái niệm trên trong đó Python thực hiện gọi theo tham chiếu trong trường hợp đối tượng có thể thay đổi như danh sách trong khi gọi theo giá trị trong trường hợp đối tượng không thay đổi như chuỗi. - def refer(l): l.append(5) print("list inside function : ",l) return l def value(n): name = "Python" print("Name within function : ",name) return name li = [1,2,3,4] print("list before function return : ",li) refer(li) print("list after function return : ",li) name = "Finxter" print("Name before function return : ",name) value(name) print("Name after function return : ",name) đầu ra list before function return : [1, 2, 3, 4] list inside function : [1, 2, 3, 4, 5] list after function return : [1, 2, 3, 4, 5] Name before function return : Finxter Name within function : Python Name after function return : Finxter Bây giờ điều đó đưa chúng ta đến câu hỏi quan trọng về nhiệm vụ Làm cách nào để chuyển một biến bất biến theo tham chiếu trong Python?Đây sẽ không phải là vấn đề trong trường hợp các đối tượng có thể thay đổi nhưng trong trường hợp đối tượng không thể thay đổi, chúng ta phải rút ra một vài thủ thuật từ túi của mình để thay đổi chúng. Chúng ta hãy xem xét một số trong số đó trong giai đoạn tiếp theo của bài viết của chúng tôi Phương pháp 1. Trả lại giá trị mới và gán lạiMột cách giải quyết đơn giản để chuyển một biến bất biến như chuỗi theo tham chiếu là chấp nhận biến đó, thực hiện các sửa đổi trên biến đó và trả về giá trị. Sau khi trả về biến, hãy gán lại giá trị được trả về từ hàm cho biến vì nó nằm ngoài phạm vi cục bộ của hàm Điều này có thể hơi khó hiểu nhưng đoạn mã sau đây sẽ giúp bạn hiểu rõ mọi thứ def change(n): n = "Sayon" return n name = "Shubham" print("Name before function call is ", name) name = change(name) print("Name after function call is ", name) đầu ra Name before function call is Shubham Name after function call is Sayon Phương pháp 2. Truyền giá trị bất biến bằng từ điển hoặc danh sáchBây giờ, phương pháp này là một mẹo nhỏ để xử lý việc vượt qua tham chiếu của các đối tượng không thay đổi. Vì Từ điển Python là các đối tượng kiểu ánh xạ và có thể thay đổi nên bạn có thể xác định các biến bất biến của mình bên trong từ điển rồi chuyển chúng vào hàm. Tuy nhiên, mặc dù danh sách không được sử dụng để ánh xạ đối tượng, bạn vẫn có thể sử dụng chúng như từ điển vì có thể truy cập các mục của danh sách bằng cách sử dụng chỉ mục của chúng và danh sách có thể thay đổi Chúng ta hãy xem cách chúng ta xác định một chuỗi và một số và chuyển chúng dưới dạng tham chiếu bằng cách sử dụng danh sách và từ điển ________số 8đầu ra ***Values Before Function Call*** Name: Christian Number: 4 ***Values After Function Call*** Name: Mayer Number: 5 Phương pháp 3. Sử dụng Lớp và bản thân Từ khóaTừ khóa Before Function call value of a = 10 Inside function call Value of a = 20 Identity of a in increment() is 140578841094464 After Function call is over value of a = 10 Identity of a in func() is 1405788410941442 được sử dụng để truy cập các thuộc tính của phiên bản. Chúng ta có thể đặt các thuộc tính bên trong Before Function call value of a = 10 Inside function call Value of a = 20 Identity of a in increment() is 140578841094464 After Function call is over value of a = 10 Identity of a in func() is 1405788410941443 và sau đó thay đổi giá trị của chúng trong các phương thức mẫu Chúng ta hãy xem chương trình sau đây để hiểu cách thức hoạt động của chương trình này đối với chúng tôi Before Function call value of a = 10 Inside function call Value of a = 20 Identity of a in increment() is 140578841094464 After Function call is over value of a = 10 Identity of a in func() is 1405788410941440 đầu ra Before Function call value of a = 10 Inside function call Value of a = 20 Identity of a in increment() is 140578841094464 After Function call is over value of a = 10 Identity of a in func() is 1405788410941441 Sự kết luậnSau đây là những điểm chính rút ra từ bài viết này. -
Tôi hy vọng bạn tìm thấy bài viết này hữu ích. Hãy đăng ký và theo dõi các bài viết thú vị hơn trong tương lai Shubham Sayon Tôi là một người tạo nội dung và Blogger Python chuyên nghiệp. Tôi đã xuất bản nhiều bài báo và tạo các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc với tư cách là một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Networking Các lớp có được chuyển qua tham chiếu không?Đạt một lớp theo tham chiếu
. Ngoài việc chuyển lớp theo giá trị, bạn có thể chuyển lớp theo tham chiếu .
Python gọi theo giá trị hay tham chiếu?Python sử dụng một hệ thống, được gọi là “ Gọi theo tham chiếu đối tượng ” hoặc “Gọi theo chỉ định”. Trong trường hợp bạn truyền các đối số như số nguyên, chuỗi hoặc bộ dữ liệu cho một hàm, thì việc truyền giống như gọi theo giá trị vì bạn không thể thay đổi giá trị của các đối tượng bất biến được truyền cho hàm.
Mọi thứ trong Python có phải là tài liệu tham khảo không?Mọi thứ được truyền theo giá trị nhưng giá trị đó là tham chiếu đến đối tượng ban đầu . Nếu bạn sửa đổi đối tượng, những thay đổi sẽ hiển thị cho người gọi, nhưng bạn không thể gán lại tên. Hơn nữa, nhiều đối tượng là bất biến (int, float, string, tuple). |