Khóa học python

Functions trong Python

0 phút đọc

Functions (hàm) là một phần quan trọng trong lập trình Python, giúp tổ chức mã nguồn thành các khối logic, dễ quản lý và tái sử dụng. Hàm cho phép bạn thực hiện các tác vụ cụ thể và có thể được gọi từ bất kỳ đâu trong chương trình. Bài viết này sẽ hướng dẫn chi tiết về hàm trong Python, bao gồm các chủ đề như các loại hàm trong Python, định nghĩa hàm, gọi hàm, truyền tham chiếu và giá trị, các loại đối số hàm, hàm ẩn danh, phạm vi của biến, và sự khác biệt giữa biến toàn cục và biến cục bộ.

Các loại hàm trong Python

Python hỗ trợ hai loại hàm chính:

  1. Hàm tích hợp sẵn (Built-in Functions): Các hàm này được cung cấp sẵn bởi Python và có thể được sử dụng trực tiếp mà không cần định nghĩa. Ví dụ: print(), len(), type(), v.v.
  2. Hàm do người dùng định nghĩa (User-defined Functions): Các hàm này được định nghĩa bởi người dùng để thực hiện các tác vụ cụ thể.

Định nghĩa hàm trong Python (Defining a Python Function)

Để định nghĩa một hàm trong Python, bạn sử dụng từ khóa def theo sau là tên hàm, danh sách các tham số trong dấu ngoặc đơn, và dấu hai chấm. Khối mã của hàm được thụt lề dưới dòng định nghĩa hàm.

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

def function_name(parameters):
    """Docstring"""
    # Khối mã của hàm
    return value

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

def greet(name):
    """Hàm này in ra lời chào với tên được cung cấp."""
    print(f"Hello, {name}!")

Gọi hàm trong Python

Để gọi một hàm, bạn sử dụng tên hàm theo sau là dấu ngoặc đơn chứa các đối số (nếu có).

Ví dụ về gọi hàm

# Định nghĩa hàm
def greet(name):
    print(f"Hello, {name}!")

# Gọi hàm
greet("Alice")

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

Trong Python, các đối số được truyền cho hàm theo cơ chế "truyền tham chiếu" (pass by reference). Điều này có nghĩa là nếu bạn thay đổi giá trị của đối số bên trong hàm, thay đổi đó sẽ ảnh hưởng đến biến gốc bên ngoài hàm.

Ví dụ về truyền tham chiếu

def modify_list(lst):
    lst.append(4)
    print("Bên trong hàm:", lst)

my_list = [1, 2, 3]
modify_list(my_list)
print("Bên ngoài hàm:", my_list)

Các loại đối số hàm trong Python

Python hỗ trợ nhiều loại đối số hàm khác nhau, bao gồm:

  1. Đối số vị trí hoặc bắt buộc (Positional or Required Arguments)
  2. Đối số từ khóa (Keyword Arguments)
  3. Đối số mặc định (Default Arguments)
  4. Đối số chỉ từ khóa (Keyword-only Arguments)
  5. Đối số chỉ vị trí (Positional-only Arguments)
  6. Đối số tùy ý hoặc có độ dài biến đổi (Arbitrary or Variable-length Arguments)

Đối số vị trí hoặc bắt buộc (Positional or Required Arguments)

Đối số vị trí là các đối số được truyền cho hàm theo thứ tự mà chúng được định nghĩa.

Ví dụ về đối số vị trí

def add(a, b):
    return a + b

result = add(5, 3)
print("Kết quả:", result)

Đối số từ khóa

Đối số từ khóa là các đối số được truyền cho hàm bằng cách sử dụng tên của chúng.

Ví dụ về đối số từ khóa

def greet(name, message):
    print(f"{message}, {name}!")

greet(name="Alice", message="Good morning")

Đối số mặc định

Đối số mặc định là các đối số có giá trị mặc định. Nếu không có giá trị nào được truyền cho chúng, giá trị mặc định sẽ được sử dụng.

Ví dụ về đối số mặc định

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

greet("Alice")
greet("Bob", "Good evening")

Đối số chỉ từ khóa

Đối số chỉ từ khóa là các đối số phải được truyền bằng từ khóa. Chúng được định nghĩa sau dấu * trong danh sách tham số.

Ví dụ về đối số chỉ từ khóa

def greet(*, name, message="Hello"):
    print(f"{message}, {name}!")

greet(name="Alice")
greet(name="Bob", message="Good evening")

Đối số chỉ vị trí

Đối số chỉ vị trí là các đối số phải được truyền theo vị trí. Chúng được định nghĩa trước dấu / trong danh sách tham số.

Ví dụ về đối số chỉ vị trí

def greet(name, /, message="Hello"):
    print(f"{message}, {name}!")

greet("Alice")
greet("Bob", message="Good evening")

Đối số tùy ý hoặc có độ dài biến đổi

Đối số tùy ý cho phép bạn truyền một số lượng đối số không xác định cho hàm. Chúng được định nghĩa bằng cách sử dụng dấu * hoặc **.

  • *args: Đối số vị trí tùy ý.
  • **kwargs: Đối số từ khóa tùy ý.

Ví dụ về đối số tùy ý

def add(*args):
    return sum(args)

result = add(1, 2, 3, 4, 5)
print("Kết quả:", result)

def greet(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

greet(name="Alice", message="Good morning", age=25)

Hàm Python với giá trị trả về

Hàm trong Python có thể trả về giá trị bằng cách sử dụng từ khóa return. Nếu không có giá trị nào được trả về, hàm sẽ trả về None.

Ví dụ về hàm với giá trị trả về

def add(a, b):
    return a + b

result = add(5, 3)
print("Kết quả:", result)

Hàm ẩn danh

Hàm ẩn danh, còn được gọi là hàm lambda, là các hàm không có tên và được định nghĩa bằng từ khóa lambda. Chúng thường được sử dụng cho các tác vụ đơn giản và ngắn gọn.

Cú pháp của hàm lambda

lambda arguments: expression

Ví dụ về hàm lambda

# Hàm lambda để cộng hai số
add = lambda a, b: a + b
print("Kết quả:", add(5, 3))

# Hàm lambda để tính bình phương của một số
square = lambda x: x ** 2
print("Bình phương của 4 là:", square(4))

Phạm vi của biến

Phạm vi của biến xác định nơi mà biến có thể được truy cập. Python có hai loại phạm vi chính:

  1. Phạm vi cục bộ (Local Scope): Biến được định nghĩa bên trong một hàm và chỉ có thể được truy cập bên trong hàm đó.
  2. Phạm vi toàn cục (Global Scope): Biến được định nghĩa bên ngoài tất cả các hàm và có thể được truy cập từ bất kỳ đâu trong chương trình.

Ví dụ về phạm vi cục bộ và toàn cục

x = 10  # Biến toàn cục

def my_function():
    y = 5  # Biến cục bộ
    print("Bên trong hàm, x:", x)
    print("Bên trong hàm, y:", y)

my_function()
print("Bên ngoài hàm, x:", x)
# print("Bên ngoài hàm, y:", y)  # Sẽ gây ra lỗi vì y là biến cục bộ

Biến toàn cục và biến cục bộ

Biến toàn cục có thể được truy cập từ bất kỳ đâu trong chương trình, trong khi biến cục bộ chỉ có thể được truy cập từ bên trong hàm mà nó được định nghĩa. Để thay đổi giá trị của biến toàn cục từ bên trong hàm, bạn cần sử dụng từ khóa global.

Ví dụ về biến toàn cục và biến cục bộ

x = 10  # Biến toàn cục

def my_function():
    global x
    x = 5  # Thay đổi giá trị của biến toàn cục
    print("Bên trong hàm, x:", x)

my_function()
print("Bên ngoài hàm, x:", x)

Kết luận

Hàm là một phần quan trọng trong lập trình Python, giúp tổ chức mã nguồn thành các khối logic, dễ quản lý và tái sử dụng. Bài viết này đã giới thiệu chi tiết về các loại hàm trong Python, cách định nghĩa và gọi hàm, truyền tham chiếu và giá trị, các loại đối số hàm, hàm ẩn danh, phạm vi của biến, và sự khác biệt giữa biến toàn cục và biến cục bộ. Hy vọng rằng bạn đã có thể hiểu rõ hơn về cách sử dụng hàm trong Python và sẵn sàng viết mã Python của riêng mình.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

Liệt kê các kiểu dữ liệu trong Python?

entry

Biến cục bộbiến toàn cục trong Python là gì?

entry

Trong Python có những built-in types nào?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely