Đôi khi bạn có thể cần tạo hàm python với các đối số tùy chọn. Trong bài viết này, chúng ta sẽ tìm hiểu cách thực hiện điều này bằng cách sử dụng *args, **kwargs và sử dụng các giá trị đối số mặc định Show
Cách tạo hàm Python với các đối số tùy chọnPython cung cấp hai cách để cung cấp các đối số tùy chọn trong python – *args và **kwargs. Chúng ta cũng sẽ xem xét một số cách khác thường để xác định đối số tùy chọn trong hàm python 1. Sử dụng *argsTrong trường hợp này, bạn chỉ cần thêm *args sau các đối số bắt buộc của định nghĩa hàm của mình. Đây là một ví dụ đơn giản về hàm chấp nhận hai đối số bắt buộc a & b và cho phép các đối số tùy chọn def myfunc(a,b, *args): for ar in args: print ar myfunc(a,b,c,d,e,f) Trong hàm trên, các đối số tùy chọn c,d,e,f được lưu trữ trong các đối số dưới dạng các mục tuple. Bạn có thể lặp qua bộ đối số để truy cập các đối số tùy chọn. Vì vậy, chức năng trên sẽ chỉ cần in tất cả các đối số tùy chọn Xin lưu ý, *args phải được chỉ định sau tất cả các đối số bắt buộc của hàm. Mặt khác, ngay cả đối số bắt buộc sẽ được lưu trữ trong đó Nếu bạn không chắc chắn về số lượng đối số cần truyền cho hàm của mình, bạn có thể sử dụng *args để nắm bắt các đối số tùy chọn Trên thực tế, bạn có thể sử dụng *args để không chỉ định nghĩa các đối số tùy chọn mà còn gọi chúng. Dưới đây là một ví dụ về hàm sử dụng hai đối số bắt buộc nhưng chúng tôi sử dụng *args Tuple để chỉ định các đối số đầu vào. Chúng ta sẽ định nghĩa một bộ chứa tất cả các biến đầu vào cần thiết cho hàm def myfunc(a,b): print a,b args=(1,2) myfunc(*args) output: 1 2 2. Sử dụng **kwargsBạn cũng có thể sử dụng **kwargs để xử lý các đối số tùy chọn, nếu bạn muốn đặt tên cho các đối số tùy chọn của mình. Trong trường hợp này, chúng sẽ là các đối số từ khóa, nghĩa là các đối số được đặt tên, được lưu trữ dưới dạng từ điển python kwargs def myfunc(a,b, **kwargs): c = kwargs.get('c', None) d = kwargs.get('d', None) myfunc(a,b, c='cat', d='dog', ...) Trong hàm trên, bất kỳ biến nào bạn chuyển làm đối số từ khóa hoặc đối số tùy chọn, nó được sử dụng làm khóa để tạo cặp khóa-giá trị trong từ điển kwargs. Giá trị của biến được sử dụng làm giá trị của khóa. Ví dụ, trong ví dụ trên, kwargs = {‘c’. 'mèo', 'd'. 'chú chó'} Bạn không chỉ có thể sử dụng **kwargs để chỉ định các đối số tùy chọn trong định nghĩa hàm mà còn có thể sử dụng nó trong lệnh gọi hàm. Đây là một ví dụ cho nó. Trong trường hợp này, bạn cần định nghĩa một từ điển với các đối số hàm def myfunc(a,b): print a,b kwargs={'a':1,'b':2} myfunc(**kwargs) output: 1 2 3. Sử dụng Giá trị mặc địnhBạn cũng có thể đặt giá trị mặc định cho một đối số để biến nó thành tùy chọn. Đây là một hàm ví dụ sử dụng a & b làm đối số bắt buộc và c làm đối số tùy chọn def f(a,b, c = "1"): print(a,b,c) f("a",'b') output: "a",'b',1 4. Sử dụng cả *args và **kwargsBạn luôn có thể sử dụng cả *args và **kwargs cùng một lúc. Đây là một ví dụ def myFun(*args,**kwargs): print("args: ", args) print("kwargs: ", kwargs) # Now we can use both *args ,**kwargs # to pass arguments to this function : myFun('a','for','apple',first="b",mid="for",last="ball") output: args: ('a', 'for', 'apple') kwargs {'first': 'b', 'mid': 'for', 'last': 'ball'} Trong trường hợp này, điều quan trọng cần lưu ý là tất cả các đối số được đặt tên (đầu tiên, giữa, cuối cùng) trong hàm sẽ được lưu vào kwargs trong khi các đối số không tên sẽ được lưu trong args Chúng tôi tiếp tục hành trình của mình thông qua các hàm Python bằng cách xem xét các đối số tùy chọn và giá trị mặc định Trong bài viết này, bạn sẽ thấy cách bạn có thể xác định một hàm với một đối số tùy chọn. Giá trị mặc định được sử dụng nếu đối số không được bao gồm trong lời gọi hàm Tổng quan về loạt hàm Python trung cấpDưới đây là tổng quan về bảy bài viết trong loạt bài này
Sử dụng đối số tùy chọn với giá trị mặc địnhHãy xây dựng trên cùng chức năng được sử dụng trong các phần trước của loạt bài này ________số 8_______Một trong những cuộc gọi này gây ra lỗi. Bạn có thể đoán là cái nào không? Hãy nhìn vào cái đầu tiên. Cuộc gọi đầu tiên hoạt động tốt. Nó sử dụng hai đối số vị trí def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5) đầu ra là Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Tuy nhiên, cuộc gọi thứ hai phát sinh lỗi def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 2. greet_person("Kevin") đầu ra là Traceback (most recent call last): File "...", line 6, in <module> greet_person("Kevin") TypeError: greet_person() missing 1 required positional argument: 'number' Đây là nơi giúp biết các thuật ngữ chúng tôi đã giới thiệu trong các bài viết trước. Lỗi nói def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)6 Bạn đã nói rằng bạn sẽ cung cấp hai đối số khi xác định hàm nhưng chỉ cung cấp một đối số. Python không thể sống với điều đó, có thể hiểu được. Còn thiếu thông tin. Do đó, nó không thể thực hiện chức năng Tuy nhiên, bạn có thể định nghĩa hàm để tham số def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)7 có giá trị mặc định. Điều này làm cho đối số vị trí thứ hai trở thành đối số tùy chọn def greet_person(person, number=2): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5) # 2. greet_person("Kevin") Đầu ra hiện ổn cho cả hai cuộc gọi Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Sara! How are you doing today? Hello Kevin! How are you doing today? Hello Kevin! How are you doing today? Trong chữ ký hàm, bạn đã thêm một giá trị mặc định bằng cách sử dụng dấu bằng ngay sau tên tham số def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)7. Điều này có nghĩa là nếu bạn không cung cấp đối số cho tham số này thì giá trị mặc định là 2 sẽ được sử dụng. Nếu bạn cung cấp đối số vị trí thứ hai, thì đối số đó sẽ được sử dụng, như trong cuộc gọi greet_person("Sara", 5) Các tham số có giá trị mặc định phải đến sau các tham số không cóBây giờ, đối với một số quy tắc bạn không thể phá vỡ. Khi bạn xác định hàm, bạn không thể đặt tham số có giá trị mặc định trước tham số không có giá trị mặc định def greet_person(number=2, person): for greeting in range(number): print(f"Hello {person}! How are you doing today?") Khi bạn chạy cái này, bạn gặp lỗi File "...", line 1 def greet_person(number=2, person): ^^^^^^ SyntaxError: non-default argument follows default argument Lưu ý rằng trong trường hợp này, lỗi xảy ra khi xác định chức năng chứ không phải khi gọi nó. Thông báo lỗi nêu rõ vấn đề là gì def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)9 Bao gồm nhiều đối số tùy chọn hơnBạn có thể có cả hai tham số với giá trị mặc định nếu muốn. Điều này có nghĩa là bạn có thể gọi hàm mà không có đối số, một đối số hoặc cả hai đối số def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)0 Đây là kết quả hiển thị cả ba lời gọi hàm đều hoạt động tốt def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)1 Và vì cả hai đối số đều là tùy chọn, nên bạn thậm chí có thể gọi hàm chỉ bằng đối số thứ hai chứ không phải đối số thứ nhất. Tuy nhiên, để làm điều này, bạn sẽ cần sử dụng các đối số được đặt tên chứ không phải các đối số vị trí def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)2 đầu ra def greet_person(person, number): for greeting in range(number): print(f"Hello {person}! How are you doing today?") # 1. greet_person("Sara", 5)3 Nhiều cách đề cập đến cùng một điềuLưu ý về thuật ngữ. Bạn sẽ tìm thấy một số cách mọi người đề cập đến khái niệm này
Nhưng lời khuyên của tôi là đừng lo lắng quá nhiều về những kỹ thuật này ngay từ đầu Từ cuối cùngHàm có tham số tùy chọn giúp người dùng gọi hàm linh hoạt hơn. Nó làm cho một hàm dễ sử dụng hơn vì nó có thể được sử dụng chỉ với các đối số bắt buộc trong khi vẫn cho phép người dùng đưa vào đối số tùy chọn |