Tham số hàm

Python SELF VI
Mức độ , Bài học
Có sẵn

9.1 Tham số vs đối số

Người mới học thường gặp rắc rối giữa hai thuật ngữ "tham số" và "đối số", nhưng hiểu rõ sự khác biệt giữa chúng thì quan trọng để nắm bắt lập trình hàm.

Tham số — là các biến được liệt kê trong định nghĩa hàm. Chúng đại diện cho tên mà hàm dùng để tham chiếu đến giá trị được truyền vào. Tham số hàm hoạt động như "chỗ đặt trước" cho những giá trị sẽ được sử dụng trong thân hàm. Khi bạn định nghĩa hàm, bạn mô tả các tham số của nó.


def print_info(name, age):  # name và age là các tham số
    print(f"Name: {name}, Age: {age}")        

Đối số — là những giá trị cụ thể hay dữ liệu, được truyền vào hàm khi gọi nó. Đối số được lấp vào chỗ của tham số khi thực thi hàm. Đối số có thể là hằng số, biến, biểu thức hay thậm chí kết quả từ hàm khác.


print_info("Alice", 30)  # "Alice" và 30 là các đối số 

Các loại đối số

  1. Đối số theo vị trí: giá trị được truyền vào theo thứ tự mà tham số được định nghĩa.
  2. Đối số có khóa: đối số được truyền vào hàm qua tên tham số, cho phép chúng được liệt kê theo bất kỳ thứ tự nào sau các đối số theo vị trí.
  3. Đối số mặc định: khi định nghĩa hàm, bạn có thể gán giá trị mặc định cho các tham số.

Bạn đã sử dụng đối số theo vị trí, còn đối số có khóa và đối số mặc định chúng ta sẽ học trong các bài giảng sau.

Sự khác biệt giữa tham số và đối số trong Python giúp bạn hiểu cách hàm nhận và xử lý dữ liệu. Sự khác biệt này quan trọng để tạo ra các hàm linh hoạt, dễ dàng thích nghi với các điều kiện gọi khác nhau, làm cho mã của bạn dễ tái sử dụng và mô đun hơn.

9.2 Giá trị mặc định

Đối số mặc định trong Python là cơ chế cho phép hàm chỉ định trước giá trị cho một hoặc nhiều tham số. Khả năng này giúp gọi hàm tiện lợi và linh hoạt hơn, bởi không cần chỉ định rõ ràng tất cả mọi đối số mỗi khi gọi hàm.

Định nghĩa đối số mặc định

Đối số mặc định được đặt trong định nghĩa hàm, khi khai báo tham số, giá trị nào sẽ được sử dụng, nếu khi gọi hàm đối số không được truyền vào:


def print_info(name, company='Unknown'):
    print(f"Name: {name}, Company: {company}")

Trong ví dụ này, company có giá trị mặc định là 'Unknown'.

  • Đơn giản hóa việc gọi hàm: Hàm có nhiều tham số có thể được gọi chỉ với các đối số quan trọng nhất.
  • Tính linh hoạt: Hàm có thể thích ứng với nhiều kịch bản sử dụng khác nhau mà không cần thay đổi mã của chúng.
  • Tăng tính dễ đọc của mã: Việc chỉ định rõ ràng các giá trị mặc định làm mã tự giải thích.

Lưu ý quan trọng

Không thay đổi được: Giá trị mặc định cho các đối số nên là các loại dữ liệu không thay đổi được, như số, chuỗi hoặc tuple. Sử dụng các loại dữ liệu thay đổi được (như list hoặc dict) có thể dẫn đến các hiệu ứng phụ không mong muốn do thay đổi trong chúng được lưu giữa các lần gọi hàm.

Thứ tự các đối số: Tham số với đối số mặc định phải theo sau các tham số không có đối số mặc định trong định nghĩa hàm.

Ví dụ khác:


def create_user(username, is_admin=False):
    if is_admin:
        print(f"User {username} is an admin.")
    else:
        print(f"User {username} is a regular user.")
        
create_user("Alice")  # is_admin == False
create_user("Bob", is_admin=True)  # is_admin == True
create_user("Karl", True)  # is_admin == True

Trên đây là 3 cách gọi hàm với đối số mặc định: tất cả đều hoạt động.

9.3 Truyền tham số theo tên

Truyền tham số vào hàm theo tên cho phép làm rõ hơn những giá trị nào được truyền cho các đối số nào, cải thiện tính dễ đọc của mã và giảm bớt khả năng xảy ra lỗi liên quan đến thứ tự đối số không đúng.

Để truyền giá trị tham số theo tên, bạn cần gán giá trị cho tham số định trước khi gọi hàm:


hàm(tham_số1 = giá_trị, tham_số2 = giá_trị)

Cách này đặc biệt hữu ích khi làm việc với các hàm có nhiều tham số hoặc các tham số có giá trị mặc định.

Lợi ích của việc truyền tham số theo tên

  • Tính rõ ràng và dễ đọc: Chỉ định tên tham số khi gọi làm cho mã dễ hiểu hơn đối với các lập trình viên khác hoặc khi bạn quay lại xem mã cũ của mình.
  • Tính linh hoạt: Tham số có thể được truyền theo bất kỳ thứ tự nào, tiện lợi khi hàm có nhiều tham số.
  • Tránh lỗi: Không cần nhớ thứ tự của tham số hàm, điều này giảm thiểu khả năng xảy ra lỗi liên quan đến truyền giá trị không chính xác.

Ví dụ sử dụng


def create_profile(name, age, job):
    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"Job: {job}")
        
create_profile(name = "John", age = 28, job = "Developer")

Trong ví dụ này, các tham số được truyền không theo thứ tự, nhưng mỗi tham số được chỉ định rõ ràng một giá trị, làm cho việc gọi hàm linh hoạt và dễ hiểu hơn.

Ví dụ 2:

À, bạn đã từng gặp truyền tham số theo tên trước đây rồi đấy. Trong hàm print(), nhớ không?

Đặc điểm và giới hạn

Tham số truyền theo tên phải theo sau các tham số không có tên, nếu có trong định nghĩa hàm.

Không thể sử dụng cùng một tên tham số nhiều hơn một lần khi gọi hàm.

Truyền tham số theo tên là một tính năng mạnh mẽ của Python, giúp mã an toàn hơn và dễ hiểu hơn, đặc biệt trong các trường hợp sử dụng hàm có nhiều đối số hoặc giá trị tùy chọn.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION