Đối số hàm trong Python (Mặc định, Từ khóa và Tùy ý)

Trong Python, bạn có thể định nghĩa một hàm có số lượng đối số thay đổi. Trong bài này, bạn sẽ học cách xác định các hàm như vậy bằng cách sử dụng các đối số mặc định, từ khóa và tùy ý.

Video: Đối số hàm trong Python: Vị trí, Từ khóa và Mặc định

Tranh luận

Trong chủ đề hàm do người dùng xác định, chúng ta đã tìm hiểu về cách định nghĩa một hàm và gọi nó. Nếu không, lệnh gọi hàm sẽ dẫn đến lỗi. Đây là một ví dụ.

 def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")

Đầu ra

 Xin chào Monica, Chào buổi sáng!

Ở đây, hàm greet()có hai tham số.

Vì chúng tôi đã gọi hàm này với hai đối số nên nó chạy trơn tru và chúng tôi không gặp bất kỳ lỗi nào.

Nếu chúng ta gọi nó với một số đối số khác, trình thông dịch sẽ hiển thị thông báo lỗi. Dưới đây là lệnh gọi hàm này với một và không có đối số cùng với các thông báo lỗi tương ứng của chúng.

 >>> welcome ("Monica") # chỉ một đối số LoạiError: welcome () thiếu 1 đối số vị trí bắt buộc: 'msg'
 >>> welcome () # không có đối số TypeError: welcome () thiếu 2 đối số vị trí bắt buộc: 'name' và 'msg'

Đối số hàm biến

Cho đến nay, các hàm có một số đối số cố định. Trong Python, có nhiều cách khác để định nghĩa một hàm có thể nhận số lượng đối số thay đổi.

Ba dạng khác nhau của loại này được mô tả dưới đây.

Đối số mặc định trong Python

Đối số hàm có thể có giá trị mặc định trong Python.

Chúng ta có thể cung cấp giá trị mặc định cho một đối số bằng cách sử dụng toán tử gán (=). Đây là một ví dụ.

 def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")

Đầu ra

Xin chào Kate, Chào buổi sáng! Xin chào Bruce, Bạn làm thế nào?

Trong hàm này, tham số namekhông có giá trị mặc định và được yêu cầu (bắt buộc) trong khi gọi.

Mặt khác, tham số msgcó giá trị mặc định là "Good morning!". Vì vậy, nó là tùy chọn trong cuộc gọi. Nếu một giá trị được cung cấp, nó sẽ ghi đè lên giá trị mặc định.

Bất kỳ số lượng đối số nào trong một hàm đều có thể có giá trị mặc định. Nhưng một khi chúng ta có một đối số mặc định, tất cả các đối số bên phải của nó cũng phải có giá trị mặc định.

Điều này có nghĩa là, các đối số không mặc định không thể tuân theo các đối số mặc định. Ví dụ: nếu chúng ta đã xác định tiêu đề hàm ở trên là:

 chào def (msg = "Chào buổi sáng!", name):

Chúng tôi sẽ gặp lỗi là:

 SyntaxError: đối số không mặc định theo sau đối số mặc định

Đối số từ khóa trong Python

Khi chúng ta gọi một hàm với một số giá trị, các giá trị này sẽ được gán cho các đối số theo vị trí của chúng.

Ví dụ, trong hàm trên greet(), khi chúng ta gọi nó là greet("Bruce", "How do you do?"), giá trị "Bruce"được gán cho tên đối số và tương tự như "How do you do?"msg.

Python cho phép các hàm được gọi bằng cách sử dụng các đối số từ khóa. Khi chúng ta gọi các hàm theo cách này, thứ tự (vị trí) của các đối số có thể bị thay đổi. Các lệnh gọi sau đến hàm trên đều hợp lệ và tạo ra cùng một kết quả.

 # 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?") 

Như chúng ta thấy, chúng ta có thể trộn các đối số vị trí với các đối số từ khóa trong khi gọi hàm. Nhưng chúng ta phải lưu ý rằng các đối số từ khóa phải tuân theo các đối số vị trí.

Có một đối số vị trí sau các đối số từ khóa sẽ dẫn đến lỗi. Ví dụ, lệnh gọi hàm như sau:

 greet(name="Bruce","How do you do?")

Sẽ dẫn đến lỗi:

 SyntaxError: không phải từ khóa arg sau từ khóa arg

Đối số tùy ý trong Python

Đôi khi, chúng ta không biết trước số lượng đối số sẽ được truyền vào một hàm. Python cho phép chúng ta xử lý loại tình huống này thông qua các lệnh gọi hàm với số lượng đối số tùy ý.

Trong định nghĩa hàm, chúng tôi sử dụng dấu hoa thị (*) trước tên tham số để biểu thị loại đối số này. Đây là một ví dụ.

 def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")

Đầu ra

 Xin chào Monica Xin chào Luke Xin chào Steve Xin chào John

Ở đây, chúng ta đã gọi hàm với nhiều đối số. Các đối số này được gói lại thành một bộ trước khi được chuyển vào hàm. Bên trong hàm, chúng ta sử dụng một forvòng lặp để lấy lại tất cả các đối số.

thú vị bài viết...