Từ khóa nào được sử dụng để bắt đầu hàm trong python

Python cung cấp nhiều các hàm dựng sẵn [built-in-function], ngoài ra ta có thể tự định nghĩa các hàm của riêng mình. Những hàm này còn được gọi là user-defined function.

  • Hàm sau khi được định nghĩa sẽ không tự thực thi.
  • Hàm chỉ thực thi khi được gọi đến.

Chú ý!

Khi định nghĩa hàm ta nên đặt tên hàm là một động từ, vì hàm thể hiện một hành động, một tác vụ của chương trình.

Một số quy tắc khi định nghĩa hàm trong Python


Trong Python, chúng ta định nghĩa hàm theo quy tắc sau:

  • Định nghĩa hàm sẽ bắt đầu với từ khóa def, sau đó là tên hàm và cặp dấu ngoặc [ ]
  • Cặp dấu [ ] sẽ chứa các tham số của hàm [nếu có]
  • Câu lệnh đầu tiên của hàm có thể là một lệnh tùy chọn, để mô tả về hàm [còn gọi là docstring]
  • Thân của hàm sẽ bắt đầu với một dấu : và được thụt lề.
  • Lệnh return dùng để thoát ra khỏi hàm, và trả lại giá trị từ hàm.

Cú pháp định nghĩa hàm trong Python


Ta sử dụng Cú pháp như sau để định nghĩa hàm trong Python:

Cú pháp [Syntax] định nghĩa hàm trong Python

 

Ví dụ định nghĩa hàm:

Ở đây ta đã định nghĩa ra một hàm có tên là my_function[].

Hàm này chỉ đơn giản in ra một chuỗi.

Sau đó ta gọi hàm vừa tạo:

      print["Hello from a Function"]


Hướng dẫn sử dụng tham số với hàm trong Python


Hàm có thể có các tham số.

Tham số cho phép thay đổi nội dung bên trong hàm, làm cho hàm trở nên linh hoạt hơn, động hơn.

Hàm có thể trả về kết quả khác nhau dựa trên giá trị truyền vào của tham số khác nhau.

Chú ý!

Khi định nghĩa hàm, ta khai báo bao nhiêu tham số, thì khi gọi hàm, ta cần truyền bấy nhiêu giá trị vào hàm.

Ví dụ: Ở đây ta định nghĩa một hàm add[] cho phép tính tổng của hai số được truyền từ bên ngoài vào hàm. Sau đó ta nhập hai số vào từ bàn phím, rồi gọi hàm vừa tạo.

# Nhập 2 số vào từ bàn phím

x = int[input["Nhập số thứ nhất:"]]

y = int[input["Nhập số thứ hai:"]]

# Gọi hàm add[] vừa được định nghĩa ở trên

# In ra tổng vừa tính được

print["Tổng là: " + str[tong]]

> Lưu ý: Trong python, bạn muốn nối giá trị thì phải chúng phải cùng kiểu. Vì thế chúng ta phải chuyển tong thành  str


Sau khi đã viết mã xong, ta sẽ thực thi hàm vừa tạo.

Ta sẽ thấy chương trình hiển thị kết quả đúng như mong muốn.

Cách truyền tham số có giá trị mặc định trong Python


Khi định nghĩa hàm, ta có thể gán giá trị mặc định cho tham số.

Khi gọi hàm, nếu ta không truyền giá trị cho tham số, thì tham số sẽ tự động được gán giá trị mặc định.

Nếu ta có truyền giá trị cho tham số, thì tham số sẽ chứa giá trị được truyền.

Ta truyền giá trị mặc định cho tham số sẽ có lợi, khi ta quên truyền giá trị cho tham số thì sẽ không bị lỗi.

Ví dụ dưới đây có định nghĩa một hàm, có một tham số là country, đồng thời ta truyền giá trị mặc định cho tham số vừa tạo là "[ ]0.


def my_function[country = "Norway"]:

      print["I am from " + country]




Kết quả sau khi gọi hàm có truyền đối số hoặc không truyền đối số:


Để trả về một giá trị từ hàm, ta sử dụng lệnh return.

Lệnh return còn được dùng để thoát ra khỏi hàm, lúc này điều khiển của chương trình sẽ quay về nơi gọi hàm.

Trong ví dụ dưới đây, ta đã định nghĩa hàm [ ]3, có một tham số [ ]4. Hàm này trả về tích của [ ]5.

Sau đó ta gọi hàm vừa tạo.

Kết quả được hiển thị như bên dưới:

Chúc mừng bạn đã biết thêm về Function trong Python


Như vậy là qua bài này bạn đã hiểu về cách tạo Function [hàm] trong Python, cách truyền tham số, gọi hàm và sử dụng tham số mặc định trong Python.

Hàm là xương sống của bất kỳ ngôn ngữ lập trình nào. Chúng ta sẽ sử dụng hàm liên tục trong quá trình HỌC PYTHON.

Hàm trong Python là một khối lệnh được tổ chức và có thể tái sử dụng, để thực hiện một hành động nào đó. Trong các bài trước, bạn đã làm quen với một số hàm đã được xây dựng sẵn trong Python, điển hình như hàm print[]. Tuy nhiên bạn cũng có thể tạo riêng cho mình một hàm với cách định nghĩa và kiểu giá trị cho riêng bạn. Các hàm này được gọi là user-defined function.

Nội dung chính

Định nghĩa một hàm trong Python

Khi định nghĩa các hàm để cung cấp một tính năng nào đó, bạn cần theo các qui tắc sau:

  • Từ khóa def được sử dụng để bắt đầu phần định nghĩa hàm. Def xác định phần bắt đầu của khối hàm.

  • def được theo sau bởi ten_ham được theo sau bởi các dấu ngoặc đơn [].

  • Các tham số được truyền vào bên trong các dấu ngoặc đơn. Ở cuối là dấu hai chấm.

  • Trước khi viết một code, một độ thụt dòng được cung cấp trước mỗi lệnh. Độ thụt dòng này nên giống nhau cho tất cả các lệnh bên trong hàm đó.

  • Lệnh đầu tiên của hàm là tùy ý, và nó là Documentation String của một hàm đó.

  • Sau đó là lệnh để được thực thi.


Cú pháp hàm trong Python

def ten_ham[ cac_tham_so ]:
   "function_docstring"
   function_suite
   return [bieu_thuc]

Ví dụ:

Hàm sau nhận một chuỗi là tham số input và in nó ra màn hình:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return

Làm thế nào để gọi hàm trong Python

Để thực thi một hàm, bạn cần gọi hàm đó. Phần định nghĩa hàm cung cấp thông tin về tên hàm các tham số và định nghĩa những hoạt động nào được thực hiện bởi hàm đó. Để thực thi phần định nghĩa của hàm, bạn cần gọi hàm đó. Cú pháp như sau:

ten_ham[ cac_tham_so ]

Ví dụ sau minh họa cách gọi hàm printme[]:

 # Phan dinh nghia ham o day
def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return;# Bay gio ban co the goi ham printme
printme["Loi goi dau tien toi custom func!"]
printme["Loi goi thu hai toi custom func"]

Khi code trên được thực thi sẽ cho kết quả:

Loi goi dau tien toi custom func!
Loi goi thu hai toi custom func


Hàm return[] trong Python

Hàm return[bieu_thuc] được sử dụng để gửi điều khiển quay trở lại người gọi với bieu_thuc đã cho. Trong trường hợp không cung cấp bieu_thuc, thì hàm return này sẽ trả về None. Nói cách khác, lệnh return được sử dụng để thoát khỏi định nghĩa hàm.

Các ví dụ trên không trả về bất cứ giá trị nào. Bạn có thể trả về một giá trị từ một hàm như sau:

 # Phan dinh nghia ham o day
def sum[ arg1, arg2 ]:
   # Cong hai tham so va tra ve ket qua."
   total = arg1 + arg2
   print "Ben trong ham : ", total
   return total;# Bay gio ban co the goi ham sum nay
total = sum[ 10, 20 ];
print "Ben ngoai ham : ", total 

Kết quả là:

Ben trong ham :  30
Ben ngoai ham :  30

Phân biệt đối số [argument] và tham số [parameter] trong Python

Có hai kiểu dữ liệu được truyền trong hàm:

  • Kiểu dữ liệu đầu tiên là dữ liệu được truyền trong lời gọi hàm. Dữ liệu này được gọi là argument. Argument có thể là hằng, biến hoặc biểu thức.

  • Kiểu dữ liệu thứ hai là dữ liệu được nhận trong phần định nghĩa hàm. Dữ liệu này được gọi là parameter. Parameter phải là biến để giữ các giá trị đang đến.

Ví dụ:

def addition[x,y]:
      print x+y
x=15
addition[x ,10]
addition[x,x]
y=20
addition[x,y]

Kết quả là:

25
30
35

Với cách phân biệt trên, bạn có thể hiểu hơn về đâu là kiểu tham số bạn đang dùng, còn thực sự thì mình nghĩ nó cũng không quan trọng lắm. Do đó, trong phần tiếp theo, chúng tôi sẽ gọi chung chúng là tham số.


Truyền tham chiếu và giá trị trong Python

Tất cả parameter [argument] trong Python được truyền bởi tham chiếu. Nghĩa là nếu bạn thay đổi những gì mà một parameter tham chiếu tới bên trong một hàm, thì thay đổi này cũng phản ánh trong hàm đang gọi. Ví dụ:

 # Phan dinh nghia ham o day
def changeme[ mylist ]:
   "Thay doi list da truyen cho ham nay"
   mylist.append[[1,2,3,4]];
   print "Cac gia tri ben trong ham la: ", mylist
   return# Bay gio ban co the goi ham changeme function
mylist = [10,20,30];
changeme[ mylist ];
print "Cac gia tri ben ngoai ham la: ", mylist

Ở đây, chúng ta đang duy trì tham chiếu của đối tượng đang truyền và đang phụ thêm các giá trị trong cùng đối tượng đó. Vì thế đoạn code này sẽ cho kết quả:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
0

Bạn theo dõi một ví dụ nữa, tại đây tham số đang được truyền bởi tham chiếu và tham chiếu đang được ghi đè bên trong hàm được gọi.

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
1

Tham số mylist là cục bộ [local] với hàm changeme. Việc thay đổi mylist bên trong hàm này không ảnh hưởng tới mylist. Và cuối cùng code trên sẽ cho kết quả:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
2

Phạm vi biến trong Python

Tất cả các biến trong một chương trình không phải là có thể truy cập tại tất cả vị trí ở trong chương trình đó. Điều này phụ thuộc vào nơi bạn đã khai báo một biến.

Phạm vi biến quyết định nơi nào của chương trình bạn có thể truy cập một định danh cụ thể. Trong Python, có hai khái niệm về phạm vi biến là:

  • Biến toàn cục

  • Biến cục bộ

Biến cục bộ trong Python

Các biến được khai báo bên trong một thân hàm là biến cục bộ. Tức là các biến cục bộ này chỉ có thể được truy cập ở bên trong hàm mà bạn đã khai báo, không thể được truy cập ở bên ngoài thân hàm đó. Ví dụ:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
3

Kết quả sẽ cho một lỗi vì biến là cục bộ.

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
4

Biến toàn cục trong Python

Biến được định nghĩa bên ngoài hàm được gọi là biến toàn cục. Biến toàn cục có thể được truy cập bởi tất cả các hàm ở khắp nơi trong chương trình. Do đó phạm vi của biến toàn cục là rộng nhất. Ví dụ:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
5

Kết quả là:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
6


Tham số hàm trong Python

Sau khi đã tìm hiểu về phạm vi biến, tiếp theo chúng ta cùng tìm hiểu về các loại tham số hàm. Python hỗ trợ các kiểu tham số chính thức sau:

  • Tham số bắt buộc

  • Tham số mặc định

  • Tham số từ khóa [tham số được đặt tên]

  • Số tham số thay đổi

Tham số bắt buộc trong Python

Các tham số bắt buộc là các tham số được truyền tới một hàm theo một thứ tự chính xác. Ở đây, số tham số trong lời gọi hàm nên kết nối chính xác với phần định nghĩa hàm.

Bạn theo dõi ví dụ dưới đây:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
7

Khi code trên được thực thi sẽ cho một lỗi như sau:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
8

Giải thích:

1, Trong trường hợp đầu tiên, khi hàm sum[] được gọi đã được truyền hai giá trị là 10 và 20, đầu tiên Python so khớp với phần định nghĩa hàm, sau đó 10 và 20 được gán tương ứng cho a và b. Do đó hàm sum được tính toán và được in.

2, Trong trường hợp thứ hai, khi bạn chỉ truyền cho hàm sum[] một giá trị là 20, giá trị này được truyền tới phần định nghĩa hàm. Tuy nhiên phần định nghĩa hàm chấp nhận hai tham số trong khi chỉ có một giá trị được truyền, do đó sẽ tạo ra một lỗi như trên.


Tham số mặc định trong Python

Tham số mặc định là tham số mà cung cấp các giá trị mặc định cho các tham số được truyền trong phần định nghĩa hàm, trong trường hợp mà giá trị không được cung cấp trong lời gọi hàm. Ví dụ:

def printme[ str ]:
   "Chuoi nay duoc truyen vao trong ham"
   print str
   return
9

Kết quả là:

ten_ham[ cac_tham_so ]
0

Giải thích:

1, Trong trường hợp đầu tiên, khi hàm msg[] được gọi đang truyền ba giá trị là 100, Hoang, và 20, thì các giá trị này sẽ được gán tương ứng cho các tham số và do đó chúng được in ra tương ứng.

2, Trong trường hợp thứ hai, khi bạn chỉ truyền hai tham số cho hàm msg[] được gọi là 101 và Thanh, thì các giá trị này được gán tương ứng cho ID và Ten. Không có giá trị nào được gán cho tham số thứ ba trong lời gọi hàm, và vì thế hàm sẽ lấy giá trị mặc định là 21.

Tham số từ khóa trong Python

Sử dụng tham số từ khóa, tham số được truyền trong lời gọi hàm được kết nối với phần định nghĩa hàm dựa trên tên của tham số. Với trường hợp này, vị trí của các tham số trong lời gọi hàm là tùy ý. Ví dụ:

ten_ham[ cac_tham_so ]
1

Kết quả là:

ten_ham[ cac_tham_so ]
2

Giải thích:

1, Trong trường hợp đầu tiên, trong lời gọi hàm msg[], bạn đã truyền hai giá trị và truyền vị trí giống như của chúng trong phần định nghĩa hàm. Sau khi so khớp với phần định nghĩa hàm, thì các giá trị này được truyền tương ứng với các tham số trong phần định nghĩa hàm. Điều này được thực hiện dựa trên tên tham số.

2, Trong trường hợp thứ hai, trong lời gọi hàm msg[], bạn cũng cũng truyền hai giá trị nhưng với vị trí khác với phần định nghĩa hàm. Thì ở đây, dựa vào tên của tham số, các giá trị này cũng được truyền tương ứng cho các tham số trong phần định nghĩa hàm.


Hàm với số tham số thay đổi trong Python

Bạn có thể cần xử lý một hàm mà có số tham nhiều hơn là bạn đã xác định trong khi định nghĩa hàm. Những tham số này được gọi là các tham số có số tham số thay đổi [variable-length args] và không được đặt tên trong định nghĩa hàm, không giống như các tham số bắt buộc và tham số mặc định.

Cú pháp cho một hàm có số thay đổi là:

ten_ham[ cac_tham_so ]
3

Một dấu * được đặt trước tên biến để giữ các giá trị của các tham số loại này. Tuple này vẫn là trống nếu không có tham số bổ sung nào được xác định trong khi gọi hàm. Dưới đây là ví dụ đơn giản.

ten_ham[ cac_tham_so ]
4

Kết quả là:

ten_ham[ cac_tham_so ]
5

Hàm nặc danh trong Python

Hàm nặc danh [hàm vô danh], hiểu theo cách đơn giản, là hàm không có tên và chúng không được khai báo theo cách chính thức bởi từ khóa def. Để khai báo hàm này, bạn sử dụng từ khóa lambda. Lambda nhận bất kỳ lượng tham số nào và chỉ trả về một giá trị trong dạng một biểu thức đã được ước lượng. Bạn không thể gọi trực tiếp gọi hàm nặc danh để in bởi vì labda cần một biểu thức. Ngoài ra, các hàm lambda có namespace cục bộ của chúng. Dưới đây là cú pháp của hàm lamda:

ten_ham[ cac_tham_so ]
6

Bạn theo dõi ví dụ sau để hiểu cách hàm lambda làm việc:

ten_ham[ cac_tham_so ]
7

Kết quả là:

ten_ham[ cac_tham_so ]
8

So sánh hàm chính thức và hàm nặc danh trong Python?

Bạn theo dõi hai ví dụ sau:

Ví dụ cho hàm chính thức:

ten_ham[ cac_tham_so ]
9

Ví dụ cho hàm nặc danh:

ten_ham[ cac_tham_so ]
7

Giải thích:

Hàm nặc danh được tạo bởi sử dụng từ khóa lambda, không phải bởi từ khóa def. Hàm này chỉ trả về một giá trị dưới dạng một biểu thức đã được ước lượng.

Chủ Đề