Hàm hay phương thức trong Python đều là một khối lệnh được viết để thực hiện một công việc nào đó. Khi cần xử lý công việc thì chỉ cần gọi hàm hay phương thức đó ra để thực thi. Ví dụ một chương trình đơn giản sau đây có sử dụng cả hàm, cả phương thức:

s = 'Gửi gió cho mây ngàn bay'
s = s.upper()
x = len(s)
print(s)
print(x)

Trong ví dụ trên đây có sử dụng các hàm: len(), print() và phương thức upper().

Để phân biệt hàm và phương thức, ta cùng tiềm hiểu các khái niệm của chúng:

Hàm trong Python (Python Functions)

Hàm là một nhóm các lệnh có liên quan đến nhau được dùng để thực hiện một tác vụ, nhiệm vụ cụ thể nào đó. Hàm giúp chia chương trình Python thành những phần nhỏ hơn – giúp chương trình có tổ chức và dễ quản lý hơn.
Hàm còn có một tác dụng vô cùng quan trọng nữa là tránh việc phải lặp lại code để thực thi những tác vụ tương tự nhau, giúp code gọn hơn và có thể tái sử dụng.

Hàm Python được khởi tạo bởi từ khóa def,  được phần chia thành 2 loại: các hàm dựng sẵn (built-in) và hàm do người dùng định nghĩa (user-defined).

Hàm người dùng tự định nghĩa (User-Defined Functions)

Giống như bất kỳ ngôn ngữ lập trình nào khác, Python cho phép chúng ta xác định các hàm của riêng mình. Hãy lấy một ví dụ:

def cong(a, b):
    c = a + b
    return c
x = cong(4, 5)
print(x)

Chương trình trên sẽ có output là 9.

Chúng ta gọi hàm ‘cong()’ và truyền vào 2 tham số a, b; với a = 4 và b = 5. Hàm cong sẽ trả về (return) kết quả a + b .

Sau khi đã được định nghĩa, hàm có thể được gọi bất cứ vị trí nào trong chương trình mà không phải viết lại những dòng lệnh trong hàm.

Hàm dựng sẵn (Build-in function)

Trong Python 3.9.7 có 69 hàm dựng sẵn (xem tại đây). Đây là những hàm mà Python cung cấp sẵn cho chúng ta trong đó có một số hàm được sử dụng thường xuyên khi làm việc với Python như print(), input(), int(), float(),…

Chúng ta hãy xem xét một chương trình sử dụng một số trong số này.

def viduham(a,b):
  """
//This function is to demonstrate a few built-in functions in Python
  """
  print("Begin")
  print(max(a,b))
  print(abs(a),abs(b))
  print(float(a),b)
  print(callable(a))
  print(hash(a),hash(b))
  print(len('ab'))
  print(type(a))
  for i in range(2,4): print(i)

viduham(2,3)

Ta sẽ được ouput:

Begin
3
2 3
2.0 3
False
2 3
2
2
3

Phương thức trong Python (Python Methods)

Các phương thức là các hàm được định nghĩa bên trong phần thân của một lớp. Chúng được sử dụng để xác định các hành vi của một đối tượng. Phương thức có thể trả về hoặc không trả về dữ liệu.

Ta gọi một phương thức trên một đối tượng và nó có thể thực hiện các tác động đến đối với đối tượng đó.

Xét ví dụ sau:

class robot:
  def __init__(self,name,madein):
    self.name = name
    self.madein = madein
  def chao(self):
    print(f'Xin chào, tôi là robot {self.name}')
  def xuatxu(self):
    print(f"Tôi đến từ {self.madein}")
  def cong(self,a,b):
	  return a+b

rb = robot('Rồng vàng', 'Việt Nam')
rb2 = robot('Bò tót', 'Tây Ban Nha')
rb.chao()
rb.xuatxu()
rb2.chao()
x = rb.cong(2, 3)
print(x)

Dòng 14 in ra: Xin chào, tôi là robot Rồng vàng
Dòng 15 in ra: Tôi đến từ Việt Nam
Dòng 16 in ra; Xin chào, tôi là robot Bò tót
Dòng 18 in ra: 5

Ở chương trình trên, đầu tiên ta định nghĩa lớp ‘robot’. Sau đó, ta tạo đối tượng ‘rb’ và ‘rb2’. Ở đây, init () là một phương thức đóng vai trò khởi tạo cho lớp. Phương thức chao() và xuatxu() cho phép chúng ta làm những gì chúng ta muốn. Lưu ý rằng phương thức Python phải có tham số ‘self’ để cho phép chúng tham chiếu đến đối tượng hiện tại.

Khác nhau giữa phương thức và hàm trong Python

Phương thức trong Python được gọi trên một đối tượng, không giống như một hàm. Trong ví dụ ở trên, ta gọi chao() trên đối tượng ‘rb’, ‘rb2’. Ngược lại, với hàm ta không gọi nó trên bất kỳ đối tượng nào mà chỉ cần gọi theo tên hàm.

Về cú pháp,

Hàm chỉ cần gọi theo tên hàm theo cú pháp: <tên hàm>(<ts>).
Ví dụ: cong(2, 3)

Phương thức phải được trỏ đến đối tượng khi gọi bằng cú pháp <đối tượng>.<phương thức>(<ts>).
Ví dụ: rb.cong(2, 3), rb.chao()

(ts là tham số nếu có)