Sự khác nhau giữa Function và Method trong lập trình Python
Mọi người cho em hỏi chút về Function và Method trong lập trình Python được không ạ?
Hai cái này em đã tìm hiểu trên google trước thì có phân biệt được rằng Function là tên gọi hàm được sử dụng trong các ngôn ngữ lập trình cấu trúc vi dụ như C còn Method sử dụng trong các ngôn ngữ lập trình hướng đối tượng như Java.
Nhưng vấn đề là khi tìm hiểu về python trên trang vietjack thì em thấy họ có ghi cả hàm và phương thức trong bài học và cách gọi hàm và gọi phương thức trong bài họ nêu ra cũng khác nhau.
ví dụ như ở bài học này:
Dictionary trong Python
Dictionary trong Python - Học Python cơ bản và nâng cao theo các bước đơn giản từ Tổng quan, Cài đặt, Biến, Toán tử, Cú pháp cơ bản, Hướng đối tượng, Vòng lặp, Chuỗi, Number, List, Dictionary, Tuple, Module, Xử lý ngoại lệ, Tool, Exception Handling,...
Có thể giải thích giúp em được ko ạ? @Jack_Viet
bạn chỉ rõ chỗ nào được không mình thấy đâu có gì sai đâu nhỉ
Đây là cách gọi hàm:
Còn đây là cách gọi phương thức:
Để em nói rõ lại thắc mắc của em nhé:
Thứ 1: Em được biết ở trong lập trình hướng đối tượng người ta chỉ dùng từ Method chứ không dùng từ Function mà ở đây Vietjack lại ghi có cả hàm và phương thức.
Thứ 2: Em cũng được biết sự khác nhau giữa Method và Function là một Function có kiểu trả về còn Method thì không. Nhưng ở đây Vietjack ghi phương thức có trả về? Điều này có đúng không và nếu thế thì chúng khác nhau ở đâu?
Thêm 1 điểm nữa đấy là cách gọi của chúng cũng khác nhau. Ví dụ Vietjack có ghi gọi một phương thức của Dictionary trong Python bằng cách: dict.items()
Còn gọi hàm: len(dict)
Có sự khác nhau mặc dù Vietjack không chỉ rõ ra hàm và phương thức ở đây khác nhau như thế nào ạ?
Làm em bối rối quá
thì dict là một đối tượng mà bạn
có phải khi tạo class thì khi sử dụng cái method bạn phải để đối tượng đằng trước không ví dụ
person.sayHi()
còn nếu là một hàm thì bạn đâu cần cái đối tượng phía trước. chỉ làsayHi()
Hi tutu.
Thứ 1: Em được biết ở trong lập trình hướng đối tượng người ta chỉ dùng từ Method chứ không dùng từ Function mà ở đây Vietjack lại ghi có cả hàm và phương thức.
Trong lập trình hướng đối tượng của Python bạn vấ có hàm như bình thường.
Thứ 2: Em cũng được biết sự khác nhau giữa Method và Function là một Function có kiểu trả về còn Method thì không. Nhưng ở đây Vietjack ghi phương thức có trả về? Điều này có đúng không và nếu thế thì chúng khác nhau ở đâu?
Cả hàm và phương thức đều có kiểu trả về.
Nói chung là có vẻ bạn hiểu sai hơi nhiều.
e nghĩ cái này cũng không hẳn
Vâng. Em còn phải tìm hiểu nhiều lắm ấy :D. Em đọc về sự khác biệt ở trên trang này, họ phân tích như thê: https://kipalog.com/posts/Difference-between-method-and-function. Họ nói sai à các anh?
thật ra dict, list, string nó đều là một đối tượng. Nên nó có methods là điều đương nhiên. những cái như sort rồi reverse đều là method
Hi tutu.
Họ nói không sai.
Method là action của 1 obj, đc xây dựng trong 1 class.
Function là hàm trong lập trình hướg thủ tục
Method là function với tham số đầu tiên được gán giá trị ngầm.
Ví dụ hàm
len
để tính độ dài:len(dict)
len
là tên hàm,dict
là tham số và cũng là tham số đầu tiên của hàm.Giờ chuyển hàm
len
thành method thì di chuyển tham số đầu tiêndict
và đặt trước tên hàmlen
và nối với nhau bằng dấu chấm.
len(dict)
dict len()
đem dict lên đầudict.len()
nối lại bằng dấu chấmVậy là em có thể viết cả hai cách len(dict) hay dict.len() đều cho kết quả như nhau ạ? Em có thể áp dụng cách này cho tất cả các hàm và phương thức còn lại ư?
Họ nói : Khái niệm Methods chỉ tồn tại trong OOP (object orented programming) còn Funtion chỉ tồn tại trong FP (functional programming).
Nhưng anh lại vừa bảo trong Python có cả hàm và phương thức. Mà Python chẳng phải là OOP hay sao anh?
Nếu bạn đào sâu bộ thông dịch của Python nó sẽ dịch method của class thành function.
Mình ví dụ 1 class:
class Student:
–def name(self):
----return “Student name”
–def age(self):
----return 18
(dấu - để indent code cho đẹp)
Class student có 2 method là name, và age. Trong định nghĩa bất kì method nào luôn có tham số đầu tiên là self, chính là vị trí mà biến trước dấu chấm được đặt vào.
Khi thông dịch thì
student.name
thànhStudent_name(student)
vàstudent.age()
thànhStudent_age(student)
Rõ ràng hơn bạn vô official docs phần tutorial tác giả nói kĩ về phần function này, tác giả cũng không gọi nó là method như trong OOP, mà chỉ xem là hàm với tham số đầu tiên được gán giá trị mặc định của đối tượng của class.
Quote nhầm đứa rồi
Hi tutu.
Trong bài viết họ nói đến java thường được phân loại là ngôn ngữ lập trình thuần hướng đối tượng. Không có khái niện hàm. Tuy nhiên trong các ngôn ngữ lập trình hướng đối tượng khác vẫn có hàm như C++, Python, lua. Điển hình là hàm main().
Việc dùng hàm hay phương thức phụ thuộc nhiều và kinh nghiệm người code. Nhiều trường hợp không có nguyên tắc rõ ràng là dùng hàm hay phương thức. Mình ưu tiên dùng phương thức trong trường hợp của bạn.
Em cảm ơn mọi người đã cho em câu trả lời. Em đã hiểu rồi ạ.