Đối số tùy ý

Python trung cấp dành cho nhà phát triển

Jasmin Ludolf

Curriculum Manager

Hạn chế của đối số cố định

def average(values):
    """Find the mean in a sequence of values and round to two decimal places."""

    average_value = sum(values) / len(values)
    rounded_average = round(average_value, 2)
    return rounded_average

# Dùng sáu đối số print(average(15, 29, 4, 13, 11, 8))
TypeError: average() takes 1 positional argument but 6 were given
Python trung cấp dành cho nhà phát triển

Đối số vị trí tùy ý

  • Docstring giúp làm rõ cách dùng hàm tự định nghĩa

  • Đối số tùy ý cho phép hàm nhận bất kỳ số lượng đối số nào

# Cho phép mọi số lượng đối số vị trí (không có từ khóa)
def average(*args):
    # Mã hàm giữ nguyên
  • Tên quy ước: *args

  • Linh hoạt nhưng vẫn cho kết quả như mong đợi!

Python trung cấp dành cho nhà phát triển

Dùng đối số vị trí tùy ý

# Gọi average với sáu đối số vị trí
print(average(15, 29, 4, 13, 11, 8))
13.33
Python trung cấp dành cho nhà phát triển

Args tạo một iterable duy nhất

  • *: Gộp đối số thành một iterable (tuple) duy nhất
# Tính trên nhiều danh sách
print(average(*[15, 29], *[4, 13], *[11, 8]))
13.33
Python trung cấp dành cho nhà phát triển

Đối số từ khóa tùy ý

# Dùng đối số từ khóa tùy ý
def average(**kwargs):

average_value = sum(kwargs.values()) / len(kwargs.values()) rounded_average = round(average_value, 2) return rounded_average
  • Đối số từ khóa tùy ý: **kwargs

  • keyword=value

Python trung cấp dành cho nhà phát triển

Dùng đối số từ khóa tùy ý

# Gọi average với sáu kwargs
print(average(a=15, b=29, c=4, d=13, e=11, f=8))
13.33
# Gọi average với một kwarg
print(average(**{"a":15, "b":29, "c":4, "d":13, "e":11, "f":8}))
13.33
  • Mỗi cặp khóa-giá trị trong dictionary được ánh xạ thành một keyword argument và giá trị!
Python trung cấp dành cho nhà phát triển

Kwargs tạo một iterable duy nhất

# Gọi average với ba nhóm kwargs
print(average(**{"a":15, "b":29}, **{"c":4, "d":13}, **{"e":11, "f":8}))
13.33
Python trung cấp dành cho nhà phát triển

Ayo berlatih!

Python trung cấp dành cho nhà phát triển

Preparing Video For Download...