🌱 [Python] 11 - Python Function - Tổng quan về hàm và tham số trong python
Trong lập trình nói chung và Python nói riêng, Function (Hàm) là một trong những khái niệm cốt lõi nhất. Việc hiểu rõ cách định nghĩa, truyền tham số, và quản lý biến trong hàm sẽ giúp bạn viết mã hiệu quả, dễ đọc và dễ maintain hơn.
Bài viết này sẽ hướng dẫn chi tiết về cách tạo, gọi, truyền đối số, và làm việc với biến cục bộ (local), biến toàn cục (global), và từ khóa nonlocal
trong Python.
👉 Giới thiệu về Function trong Python
Function là một khối code (tập hợp một số câu lệnh) dùng để thực hiện một nhiệm vụ cụ thể, có thể tái sử dụng. Thay vì viết lại cùng một đoạn code nhiều lần, bạn chỉ cần định nghĩa nó một lần rồi gọi khi cần.
↪ Định nghĩa function trong python
Hàm trong Python được định nghĩa bằng từ khóa def
. Bên trong khối hàm, bạn có thể viết bất kỳ lệnh nào. Hàm có thể nhận tham số và có thể trả về giá trị thông qua từ khóa return
.
- def greet(name):
- print("Hello", name)
- greet("Alice")
- def square(x):
- return x * x
- result = square(5)
- print(result)
👉 Tham số và Đối số (Parameters & Arguments)
Tham số là tên biến được khai báo trong định nghĩa hàm, trong khi đối số là giá trị thực tế được truyền vào khi gọi hàm.
def add(a, b):
return a + b
print(add(3, 4)) # Result: 7
Tham số mặc định (Default Parameter):
Python cung cấp Default Parameter để đặt giá trị mặc định cho parameter nếu dev không truyền tham số vào. Nếu dev truyền tham số vào, thì function sẽ ưu tiên tham số mà dev truyền vào.
def greet(name="Guest"):
print("Hello", name)
greet("Alice") # Hello Alice
greet() # Hello Guest
Keyword Argument: bạn có thể truyền đối số theo tên thay vì vị trí.
def func(a, b, c):
print(a, b, c)
func(b=2, a=1, c=3)
👉 *args và **kwargs trong Python
Trong Python, *args và **kwargs được sử dụng để truyền một số lượng đối số không xác định vào một hàm. Chúng giúp bạn viết các hàm linh hoạt hơn, cho phép xử lý các tình huống mà bạn không biết trước có bao nhiêu tham số sẽ được truyền vào.
1. *args (Non-Keyword Arguments)
Biến *args được dùng để truyền một danh sách các đối số không có tên (positional arguments) vào hàm. Về bản chất, *args thu thập tất cả các đối số được truyền vào dưới dạng một tuple.
def my_function(*args):
for arg in args:
print(arg)
my_function(10, 20, 30)
Kết quả:
20
30
Bạn có thể sử dụng bất kỳ tên nào thay cho args
, nhưng theo quy ước, người ta thường sử dụng *args để biểu thị một tuple chứa các đối số không có tên.
2. **kwargs (Keyword Arguments)
Tương tự, **kwargs cho phép bạn truyền một số lượng không xác định các đối số có tên (keyword arguments) vào hàm. Các đối số này được lưu trữ dưới dạng một dictionary, với tên tham số là key và giá trị của chúng là value.
def my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
my_function(name="Alice", age=25, city="Hanoi")
Kết quả:
age = 25
city = Hanoi
3. Kết hợp *args và **kwargs
Bạn có thể sử dụng cả hai trong cùng một hàm. Quy tắc là *args phải được khai báo trước **kwargs.
def show_info(*args, **kwargs):
print("Positional arguments:", args)
print("Keyword arguments:", kwargs)
show_info(1, 2, 3, name="Alice", age=25)
Kết quả:
Keyword arguments: {'name': 'Alice', 'age': 25}
4. Ứng dụng thực tế
Cặp *args và **kwargs thường được dùng khi bạn muốn xây dựng các hàm linh hoạt, chẳng hạn như các wrapper function hoặc decorator trong Python.
- def decorator(func):
- def wrapper(*args, **kwargs):
- print("Before function call")
- func(*args, **kwargs)
- print("After function call")
- return wrapper
- @decorator
- def greet(name):
- print(f"Hello, {name}!")
- greet("Alice")
Kết quả:
Hello, Alice!
After function call
👉 Tóm lại:
- *args dùng để truyền nhiều positional arguments.
- **kwargs dùng để truyền nhiều keyword arguments.
- Cả hai giúp code linh hoạt, dễ mở rộng và đặc biệt hữu ích trong decorator, class inheritance hoặc khi gọi hàm động.
👉 Biến Global, Local và Nonlocal
Biến Local: là các biến được khai báo bên trong hàm và chỉ có hiệu lực trong hàm đó.
def f():
x = 10
print(x)
f()
print(x) # NameError: name 'x' is not defined
Biến Global: khai báo bên ngoài hàm, có thể truy cập ở mọi nơi. Để sửa giá trị global bên trong hàm, dùng từ khóa global
:
count = 0
def increment():
global count
count += 1
increment()
print(count)
Biến Nonlocal: dùng trong hàm lồng nhau để thay đổi biến của hàm bao ngoài.
def outer():
x = 5
def inner():
nonlocal x
x = 10
print("Inner:", x)
inner()
print("Outer:", x)
outer()
👉 Tổng kết
Hàm trong Python giúp bạn tổ chức mã hiệu quả hơn, tái sử dụng logic và tránh trùng lặp. Hiểu rõ cách truyền tham số, xử lý *args, **kwargs và quản lý phạm vi biến sẽ giúp bạn viết code Python chuyên nghiệp hơn.
- Dùng
def
để định nghĩa hàm. - Có thể truyền đối số dạng vị trí, mặc định, keyword hoặc *args, **kwargs.
- Phân biệt rõ biến local, global và nonlocal.
>>>>>> Follow ngay <<<<<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊