Các hàm Python
Category: Python
Hàm Python là một khối các câu lệnh trả về tác vụ cụ thể. Ý tưởng là kết hợp một số tác vụ thường được thực hiện hoặc lặp đi lặp lại với nhau và tạo thành một hàm để thay vì viết cùng một mã nhiều lần cho các đầu vào khác nhau, chúng ta có thể thực hiện các lệnh gọi hàm để sử dụng lại mã có trong đó nhiều lần.
Một số lợi ích của việc sử dụng hàm
Tăng khả năng đọc mã
Tăng khả năng tái sử dụng mã
Khai báo hàm Python
Cú pháp để khai báo một hàm là:
Các loại hàm trong Python
Dưới đây là các loại hàm khác nhau trong Python :
Hàm thư viện tích hợp: Đây là các hàm chuẩn trong Python có thể sử dụng.
Hàm do người dùng định nghĩa: Chúng ta có thể tạo hàm riêng dựa trên yêu cầu của mình.
Tạo một hàm trong Python
Chúng ta có thể định nghĩa một hàm trong Python, sử dụng từ khóa def . Chúng ta có thể thêm bất kỳ loại chức năng và thuộc tính nào vào hàm khi cần. Theo ví dụ sau, chúng ta có thể hiểu cách viết một hàm trong Python. Theo cách này, chúng ta có thể tạo định nghĩa hàm Python bằng cách sử dụng từ khóa def.
# Một hàm Python đơn giản
def fun():
print("Chào mừng đến với GFG")
Gọi một hàm trong Python
Sau khi tạo một hàm trong Python, chúng ta có thể gọi hàm đó bằng cách sử dụng tên của hàm Python theo sau là dấu ngoặc đơn chứa các tham số của hàm cụ thể đó. Dưới đây là ví dụ để gọi hàm def Python.
# Một hàm Python đơn giản
def fun():
print("Chào mừng đến với GFG")
# Mã điều khiển để gọi hàm
fun()
Đầu ra:
Chào mừng đến với GFG
Hàm Python có tham số
Nếu bạn có kinh nghiệm về C/C++ hoặc Java thì bạn phải suy nghĩ về kiểu trả về của hàm và kiểu dữ liệu của đối số. Điều đó cũng có thể thực hiện được trong Python (cụ thể là đối với Python 3.5 trở lên).
Cú pháp hàm Python với tham số
def function_name(parameter: data_type) -> return_type:
"""Docstring"""
# phần thân của hàm
return expression
Ví dụ sau sử dụng các đối số và tham số mà bạn sẽ tìm hiểu sau trong bài viết này để bạn có thể quay lại xem nếu chưa hiểu.
def add(num1: int, num2: int) -> int:
"""Cộng hai số"""
num3 = num1 + num2
return num3
# Mã điều khiển
num1, num2 = 5, 15
ans = add(num1, num2)
print(f"Phép cộng của {num1} và {num2} cho kết quả là {ans}.")
Đầu ra:
Phép cộng của 5 và 15 cho kết quả là 20.
Lưu ý: Các ví dụ sau được định nghĩa bằng cú pháp 1, hãy thử chuyển đổi chúng sang cú pháp 2 để thực hành.
# một số hàm khác
def is_prime(n):
# Nếu n là 2 hoặc 3, thì là số nguyên tố
if n in [2, 3]:
return True
# Nếu n là 1 hoặc là số chẵn (trừ 2), thì không phải số nguyên tố
if (n == 1) or (n % 2 == 0):
return False
r = 3
# Kiểm tra các số lẻ từ 3 đến căn bậc hai của n
while r * r <= n:
if n % r == 0:
return False
r += 2
return True
# In ra kết quả kiểm tra số 78 và 79 có phải là số nguyên tố hay không
print(is_prime(78), is_prime(79))
Đầu ra:
False True
Đối số hàm Python
Đối số là các giá trị được truyền vào bên trong dấu ngoặc đơn của hàm. Một hàm có thể có bất kỳ số lượng đối số nào được phân tách bằng dấu phẩy.
Trong ví dụ này, chúng ta sẽ tạo một hàm đơn giản trong Python để kiểm tra xem số được truyền vào làm đối số cho hàm là chẵn hay lẻ.
# Một hàm Python đơn giản để kiểm tra
# xem x là số chẵn hay lẻ
def evenOdd(x):
if (x % 2 == 0):
print("chẵn")
else:
print("lẻ")
# Mã gọi hàm để kiểm tra
evenOdd(2) # gọi hàm với giá trị 2
evenOdd(3) # gọi hàm với giá trị 3
Đầu ra:
chẵn
lẻ
Các loại đối số hàm Python
Python hỗ trợ nhiều loại đối số khác nhau có thể được truyền vào thời điểm gọi hàm. Trong Python, chúng ta có các loại đối số hàm sau trong Python:
Đối số mặc định
Đối số từ khóa (đối số được đặt tên)
Đối số vị trí
Đối số tùy ý (đối số có độ dài thay đổi args và *kwargs)
Chúng ta hãy cùng thảo luận chi tiết về từng loại.
Đối số mặc định
Đối số mặc định là một tham số giả định giá trị mặc định nếu giá trị không được cung cấp trong lệnh gọi hàm cho đối số đó. Ví dụ sau minh họa Đối số mặc định để viết hàm trong Python.
# Chương trình Python minh họa
# đối số mặc định
def myFun(x, y=50):
print("x: ", x)
print("y: ", y)
# Mã gọi hàm (chúng ta gọi myFun() chỉ với
# một đối số)
myFun(10)
Đầu ra:
x: 10
y: 50
Giống như các đối số mặc định của C++, bất kỳ số lượng đối số nào trong một hàm cũng có thể có giá trị mặc định. Nhưng một khi chúng ta có một đối số mặc định, tất cả các đối số bên phải nó cũng phải có giá trị mặc định.
Đối số từ khóa
Ý tưởng là cho phép người gọi chỉ định tên đối số cùng với các giá trị để người gọi không cần phải nhớ thứ tự các tham số.
# Python program to demonstrate Keyword Arguments
def student(firstname, lastname):
print(firstname, lastname)
# Keyword arguments
student(firstname='Geeks', lastname='Practice')
student(lastname='Practice', firstname='Geeks')
Đầu ra:
Geeks Practice
Geeks Practice
Lập luận vị trí
Chúng tôi đã sử dụng đối số Vị trí trong khi gọi hàm để đối số đầu tiên (hoặc giá trị) được gán cho tên và đối số thứ hai (hoặc giá trị) được gán cho tuổi. Bằng cách thay đổi vị trí hoặc nếu bạn quên thứ tự của các vị trí, các giá trị có thể được sử dụng ở những vị trí sai, như được hiển thị trong ví dụ Trường hợp-2 bên dưới, trong đó 27 được gán cho tên và Suraj được gán cho tuổi.
def nameAge(name, age):
print("Chào, tôi tên là", name)
print("Tôi năm nay", age, "tuổi")
# Bạn sẽ nhận được kết quả đúng vì
# đối số được truyền theo đúng thứ tự
print("Trường hợp 1:")
nameAge("Suraj", 27)
# Bạn sẽ nhận được kết quả sai vì
# đối số không theo đúng thứ tự
print("\nTrường hợp 2:")
nameAge(27, "Suraj")
Đầu ra:
Trường hợp 1:
Hi, I am Suraj
My age is 27
Trường hợp 2:
Hi, I am 27
My age is Suraj
Đối số từ khóa tùy ý
Trong Python Arbitrary Keyword Arguments, args và *kwargs có thể truyền một số lượng biến đổi các đối số cho một hàm bằng cách sử dụng các ký hiệu đặc biệt. Có hai ký hiệu đặc biệt:
*args trong Python (Đối số không phải từ khóa)
**kwargs trong Python (Từ khóa đối số)
Ví dụ 1: Đối số không phải từ khóa có độ dài thay đổi
# Chương trình Python để minh họa
# *args cho số lượng đối số không cố định
def myFun(*argv):
for arg in argv:
print(arg)
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')
Đầu ra:
Hello
Welcome
to
GeeksforGeeks
Ví dụ 2: Đối số từ khóa có độ dài thay đổi
# Chương trình Python để minh họa
# kwargs cho số lượng đối số từ khóa thay đổi
def myFun(**kwargs):
for key, value in kwargs.items():
print("%s == %s" % (key, value))
# Mã chính gọi hàm với các đối số từ khóa
myFun(first='Geeks', mid='for', last='Geeks')
Đầu ra:
first == Geeks
mid == for
last == Geeks
Chuỗi tài liệu
Chuỗi đầu tiên sau hàm được gọi là chuỗi Tài liệu hoặc Docstring . Chuỗi này được sử dụng để mô tả chức năng của hàm. Việc sử dụng docstring trong hàm là tùy chọn nhưng được coi là một thực hành tốt.
Cú pháp bên dưới có thể được sử dụng để in ra chuỗi docstring của một hàm.
Cú pháp: print(function_name.__doc__)
Ví dụ: Thêm Docstring vào hàm
# Một hàm Python đơn giản để kiểm tra
# xem x là số chẵn hay lẻ
def evenOdd(x):
"""Function to check if the number is even or odd""" # Chuỗi mô tả (docstring): Hàm kiểm tra số chẵn hay lẻ
if (x % 2 == 0):
print("even") # Nếu x chia hết cho 2 → số chẵn
else:
print("odd") # Ngược lại → số lẻ
# Mã chính để gọi hàm
print(evenOdd.__doc__) # In ra chuỗi mô tả của hàm
Đầu ra:
Function to check if the number is even or odd
Hàm Python trong Hàm
Một hàm được định nghĩa bên trong một hàm khác được gọi là hàm bên trong hoặc hàm lồng nhau . Các hàm lồng nhau có thể truy cập các biến của phạm vi bao quanh. Các hàm bên trong được sử dụng để chúng có thể được bảo vệ khỏi mọi thứ xảy ra bên ngoài hàm.
# Chương trình Python để
# minh họa cách truy cập
# biến của hàm lồng nhau
def f1():
s = 'Tôi yêu GeeksforGeeks'
def f2():
print(s)
f2()
# Mã chính để chạy chương trình
f1()
Đầu ra:
I love GeeksforGeeks
Hàm ẩn danh trong Python
Trong Python, hàm ẩn danh có nghĩa là hàm không có tên. Như chúng ta đã biết, từ khóa def được sử dụng để định nghĩa các hàm bình thường và từ khóa lambda được sử dụng để tạo các hàm ẩn danh.
# Mã Python minh họa cách tính lập phương của một số
# bằng cách sử dụng hàm lambda
def lap_phuong(x): return x * x * x
lap_phuong_v2 = lambda x : x * x * x
print(lap_phuong(7))
print(lap_phuong_v2(7))
Đầu ra:
343
343
Các hàm đệ quy trong Python
Đệ quy trong Python đề cập đến khi một hàm gọi chính nó. Có nhiều trường hợp bạn phải xây dựng một hàm đệ quy để giải quyết các Bài toán Toán học và Đệ quy.
Sử dụng hàm đệ quy phải thận trọng vì hàm đệ quy có thể trở thành một vòng lặp không kết thúc. Tốt hơn là bạn nên kiểm tra câu lệnh thoát khi tạo hàm đệ quy.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(4))
Đầu ra:
24
Ở đây chúng tôi đã tạo một hàm đệ quy để tính giai thừa của một số. Bạn có thể thấy câu lệnh kết thúc cho hàm này là khi n bằng 0.
Câu lệnh Return trong hàm Python
Câu lệnh return của hàm được sử dụng để thoát khỏi một hàm và quay lại trình gọi hàm và trả về giá trị hoặc mục dữ liệu đã chỉ định cho trình gọi. Cú pháp của câu lệnh return là:
trả về [danh sách biểu thức]
Câu lệnh return có thể bao gồm một biến, một biểu thức hoặc một hằng số được trả về khi kết thúc quá trình thực thi hàm. Nếu không có bất kỳ thành phần nào ở trên trong câu lệnh return thì đối tượng None sẽ được trả về.
Ví dụ: Câu lệnh trả về hàm Python
def square_value(num):
"""This function returns the square
value of the entered number"""
return num**2
print(square_value(2))
print(square_value(-4))
Đầu ra:
4
16
Truyền theo tham chiếu và truyền theo giá trị
Một điều quan trọng cần lưu ý là, trong Python, mỗi tên biến đều là một tham chiếu. Khi chúng ta truyền một biến cho một hàm Python, một tham chiếu mới đến đối tượng sẽ được tạo. Truyền tham số trong Python giống như truyền tham chiếu trong Java.
# Ở đây x là một tham chiếu mới đến cùng danh sách lst
def hamCuaToi(x):
x[0] = 20 # Thay đổi phần tử đầu tiên của danh sách
# Mã chính (Lưu ý rằng lst bị thay đổi
# sau khi gọi hàm)
lst = [10, 11, 12, 13, 14, 15]
hamCuaToi(lst)
print(lst)
Đầu ra:
[20, 11, 12, 13, 14, 15]
Khi chúng ta truyền tham chiếu và thay đổi tham chiếu đã nhận thành thứ khác, kết nối giữa tham số đã truyền và tham số đã nhận bị phá vỡ. Ví dụ, hãy xem xét chương trình bên dưới như sau:
def hamCuaToi(x):
# Sau dòng dưới đây, liên kết giữa x và
# đối tượng ban đầu bị cắt. Một đối tượng mới
# được gán cho x.
x = [20, 30, 40]
# Mã chính (Lưu ý rằng lst không bị thay đổi
# sau khi gọi hàm)
lst = [10, 11, 12, 13, 14, 15]
hamCuaToi(lst)
print(lst)
Đầu ra:
[10, 11, 12, 13, 14, 15]
Một ví dụ khác chứng minh rằng liên kết tham chiếu bị hỏng nếu chúng ta gán một giá trị mới (bên trong hàm).
def hamCuaToi(x):
# Sau dòng dưới đây, liên kết giữa x và
# giá trị ban đầu bị cắt. Một giá trị mới
# được gán cho x (trong hàm).
x = 20
# Mã chính (Lưu ý rằng biến x không bị thay đổi
# sau khi gọi hàm).
x = 10
hamCuaToi(x)
print(x)
Đầu ra:
10
Bài tập: Hãy thử đoán đầu ra của đoạn mã sau.
def swap(x, y):
temp = x
x = y
y = temp
# mã trình điều khiển
x = 2
y = 3
swap(x, y)
print(x)
print(y)
Đầu ra:
2
3
Published on Jun 16, 2025