Học bằng cách đọc theo thứ tự

Định nghĩa hàm với def — Đối số, giá trị trả về, đối số mặc định và từ khóa

Học cách định nghĩa hàm với def trong Python: tham số, giá trị trả về với return, đối số mặc định và đối số từ khóa.

Khi cùng một logic cần chạy nhiều lần, bạn muốn một cách để đặt tên cho logic đó và gọi nó từ bất cứ đâu bạn cần. Cơ chế đó là hàm, được định nghĩa bằng từ khóa def.

Với hàm, logic chia sẻ sống ở một chỗ và mỗi điểm gọi là một dòng duy nhất. Mọi thứ bạn đã dùng đến giờ — print() / len() / int() / sum() — cũng đều là hàm.

Cơ bản về def và return

Định nghĩa hàm với def tên_hàm(đối số): và thụt lề thân. Trả về một giá trị cho bên gọi với return giá_trị. Một hàm không có return thực tế trả về None.

Hàm, đối số, và giá trị trả về
đối số(đầu vào)hàm(thân)giá trị trả về(đầu ra)truyền vàotrả về

Đối số là thứ bên gọi đưa cho hàm, và giá trị trả về là thứ hàm gửi lại qua return. Vì cùng một hàm có thể được gọi với các đối số khác nhau cho các kết quả khác nhau, một định nghĩa duy nhất có thể cung cấp sức mạnh cho nhiều điểm gọi.

Định nghĩa và gọi một hàm
định nghĩathực thidef greet(name): return ...greet("Minh")chạy thângiá trị trả vềchảy ngượcname: Minhreturn ...

Một hàm được tạo bằng def không được thực thi bằng việc đăng ký trong namespace. Thân chỉ chạy khi có một lời gọi như greet("Minh") xảy ra — và giá trị của return chảy ngược về bên gọi.

# Không đối số, không giá trị trả về
def print_hello():
    print("Hello World")

print_hello()        # Hello World

# Hai đối số, một giá trị trả về
def max_num(a, b):
    if a >= b:
        return a
    return b

result = max_num(30, 20)
print(result)        # 30

# return thoát khỏi hàm; bất cứ thứ gì sau nó không chạy
def check(x):
    if x < 0:
        return "âm"
    return "không âm"

print(check(-5))     # âm

Viết một hàm áp dụng tỷ lệ giảm giá.

① Định nghĩa def apply_discount(price, rate):return price * (1 - rate).

② Đưa apply_discount(1000, 0.2) vào sale_price và in nó với print(f"Giá khuyến mãi: {sale_price}").

③ Gọi apply_discount(500, 0.1) trực tiếp bên trong print() để xác nhận cùng một hàm có thể tái sử dụng với các giá trị khác.

(Phần giải thích sẽ hiện ra khi bạn chạy code đúng.)

Python Editor

Chạy code để xem đầu ra

Đối số mặc định và đối số từ khóa

Thêm = giá_trị vào một đối số đặt một giá trị mặc định được dùng khi bên gọi bỏ qua (đối số mặc định).

Ở phía gọi, tên_đối_số=giá_trị cho phép bạn truyền giá trị theo tên bất kể vị trí (đối số từ khóa). Đối số mặc định theo quy ước được đặt ở cuối danh sách đối số để thứ tự không còn quan trọng.

Ba mẫu gọi và cách tham số được điền
def greet(name, greeting="Xin chào"):greet("Minh")name="Minh"greeting="Xin chào"(áp mặc định)greet(name="Minh"greeting="Xin chào")greet("Linh", "Chào buổi sáng")name="Linh"greeting="Chào buổi sáng"(ghi đè vị trí)greet(name="Linh"greeting="Chào buổi sáng")greet(greeting="Chào buổi tối", name="Nam")name="Nam"greeting="Chào buổi tối"(đổi thứ tự được)greet(name="Nam"greeting="Chào buổi tối")bỏ quavị trítừ khóachạychạychạy
# Đưa greeting một giá trị mặc định
def greet(name, greeting="Xin chào"):
    return f"{greeting}, {name}"

print(greet("Minh"))                                 # Xin chào, Minh
print(greet("Linh", "Chào buổi sáng"))                # Chào buổi sáng, Linh
print(greet(greeting="Chào buổi tối", name="Nam"))    # đối số từ khóa có thể đổi thứ tự
# Kết quả: Chào buổi tối, Nam

Viết một hàm định dạng thông tin người dùng.

① Định nghĩa def format_user(name, role="member"): và trả về f"{name} ({role})".

② In format_user("minh") (bỏ qua role).

③ Cũng in format_user("linh", "admin") (theo vị trí) và format_user(role="owner", name="nam") (từ khóa).

Python Editor

Chạy code để xem đầu ra

Trong bài này bạn đã học định nghĩa hàm với def, giá trị trả về với return, và đối số mặc định và từ khóa. Khi bạn dùng hàm một cách thuần thục, cùng một logic có thể được gọi từ bất cứ đâu bao nhiêu lần tùy bạn, và khả năng đọc code cải thiện đáng kể.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Đoạn code sau in gì?
def f(x, y=10):
return x + y

print(f(3))

Câu 2Lời gọi nào đang dùng đối số từ khóa?
def greet(name, greeting="Hi"):
return f"{greeting}, {name}"

Câu 3Đoạn code sau sinh ra gì?
def g(x):
x + 1 # không có return

result = g(10)
print(result)