01/10/2018, 09:46

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:

www.vietjack.com

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

Henry viết 12:02 ngày 01/10/2018

bạn chỉ rõ chỗ nào được không mình thấy đâu có gì sai đâu nhỉ

tutu viết 11:51 ngày 01/10/2018

Đâ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á

Henry viết 11:46 ngày 01/10/2018

thì dict là một đối tượng mà bạn

Henry viết 11:51 ngày 01/10/2018

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()

Tao Không Ngu. viết 11:59 ngày 01/10/2018

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.

Henry viết 11:49 ngày 01/10/2018

Function là một Function có kiểu trả về

e nghĩ cái này cũng không hẳn

tutu viết 11:48 ngày 01/10/2018

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?

Henry viết 12:02 ngày 01/10/2018

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

Tao Không Ngu. viết 11:56 ngày 01/10/2018

Hi tutu.
Họ nói không sai.

Đào An viết 12:01 ngày 01/10/2018

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

Hung viết 11:51 ngày 01/10/2018

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ên dict và đặt trước tên hàm len và nối với nhau bằng dấu chấm .
len(dict)
dict len() đem dict lên đầu
dict.len() nối lại bằng dấu chấm

tutu viết 11:47 ngày 01/10/2018

Vậ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 ư?

tutu viết 11:51 ngày 01/10/2018

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?

Hung viết 11:54 ngày 01/10/2018

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ành Student_name(student)student.age() thành Student_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

Tao Không Ngu. viết 12:00 ngày 01/10/2018

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.

tutu viết 12:01 ngày 01/10/2018

Em cảm ơn mọi người đã cho em câu trả lời. Em đã hiểu rồi ạ.

Bài liên quan
0