Đối số Python

Nếu bạn không biết có bao nhiêu đối số sẽ được truyền vào hàm của mình, hãy thêm ____16_______ trước tên tham số trong định nghĩa hàm

Bằng cách này, hàm sẽ nhận được một bộ đối số và có thể truy cập các mục tương ứng

Ví dụ

Nếu số lượng đối số không xác định, hãy thêm ____16_______ trước tên tham số

def my_function[*kids]
print["Đứa trẻ nhỏ nhất là " + kids[2]]

my_function["Emil", "Tobias", "Linus"]

Tự mình thử »

Đối số tùy ý thường được rút ngắn thành *args trong tài liệu Python


Hàm là các khối xây dựng trong Python. Họ lấy 0 hoặc nhiều đối số và trả về một giá trị. Python khá linh hoạt về cách các đối số được truyền cho một hàm. *args và **kwargs giúp xử lý các đối số dễ dàng và rõ ràng hơn

Các phần quan trọng là “*” và “**”. Bạn có thể sử dụng bất kỳ từ nào thay cho args và kwargs nhưng thông thường người ta thường sử dụng các từ args và kwargs. Vì vậy, không cần những cuộc phiêu lưu không cần thiết

Trong bài đăng này, chúng ta sẽ xem qua 10 ví dụ mà tôi nghĩ sẽ làm cho khái niệm về *args và **kwargs trở nên rõ ràng

ví dụ 1

Xét hàm tính tổng hai số sau

def addition[a, b]:
return a + b
print[addition[3,4]]
7

Hàm này tổng chỉ có hai số. Điều gì sẽ xảy ra nếu chúng ta muốn một hàm tính tổng ba hoặc bốn số?

Trong những trường hợp như vậy, chúng ta có thể sử dụng *args làm tham số

* args cho phép một hàm lấy bất kỳ số lượng đối số vị trí nào

def addition[*args]:
result = 0
for i in args:
result += i
return result

Các tham số được truyền cho hàm cộng được lưu trữ trong một bộ dữ liệu. Do đó, chúng ta có thể lặp qua biến args

print[addition[]]
0
print[addition[1,4]]
5
print[addition[1,7,3]]
11

ví dụ 2

Trước ví dụ thứ hai, tốt hơn là giải thích sự khác biệt giữa đối số vị trí và đối số từ khóa

  • Đối số vị trí chỉ được khai báo bằng tên
  • Đối số từ khóa được khai báo bằng tên và giá trị mặc định

Khi một hàm được gọi, các giá trị cho các đối số vị trí phải được cung cấp. Nếu không, chúng tôi sẽ nhận được một lỗi

Nếu chúng ta không chỉ định giá trị cho đối số từ khóa, nó sẽ nhận giá trị mặc định

def addition[a, b=2]: #a is positional, b is keyword argument
return a + b
print[addition[1]]
3
def addition[a, b]: #a and b are positional arguments
return a + b
print[addition[1]]
TypeError: addition[] missing 1 required positional argument: 'b'

Bây giờ chúng ta có thể làm ví dụ thứ hai. Có thể sử dụng *args và các biến được đặt tên cùng nhau. Hàm sau in các đối số đã truyền tương ứng

def arg_printer[a, b, *args]:
print[f'a is {a}']
print[f'b is {b}']
print[f'args are {args}']
arg_printer[3, 4, 5, 8, 3]
a is 3
b is 4
args are [5, 8, 3]

Hai giá trị đầu tiên được trao cho a và b. Các giá trị còn lại được lưu trữ trong bộ args

ví dụ 3

Python muốn chúng ta đặt đối số từ khóa sau đối số vị trí. Chúng ta cần ghi nhớ điều đó khi gọi một hàm

Xem xét ví dụ sau

arg_printer[a=4, 2, 4, 5]SyntaxError: positional argument follows keyword argument

Nếu chúng ta gán một giá trị cho một đối số vị trí, nó sẽ trở thành một đối số từ khóa. Vì nó được theo sau bởi các đối số vị trí, nên chúng tôi nhận được Lỗi cú pháp

Ví dụ 4

Trong hàm sau, tùy chọn là một đối số từ khóa [nó có giá trị mặc định]

def addition[a, b, *args, option=True]:
result = 0
if option:
for i in args:
result += i
return a + b + result
else:
return result

Hàm này thực hiện thao tác cộng nếu tùy chọn là True. Vì giá trị mặc định là True, nên hàm trả về tổng của các đối số trừ khi tham số tùy chọn được khai báo là Sai

print[addition[1,4,5,6,7]]
23
print[addition[1,4,5,6,7, option=False]]
0

Ví dụ 5

**kwargs thu thập tất cả các đối số từ khóa không được xác định rõ ràng. Do đó, nó thực hiện thao tác tương tự như *args nhưng đối với đối số từ khóa

**kwargs cho phép một hàm lấy bất kỳ số lượng đối số từ khóa nào

Theo mặc định, **kwargs là một từ điển rỗng. Mỗi đối số từ khóa không xác định được lưu trữ dưới dạng một cặp khóa-giá trị trong từ điển **kwargs

________số 8_______

Ví dụ 6

Chúng ta có thể sử dụng cả *args và **kwargs trong một hàm nhưng *args phải được đặt trước **kwargs

def arg_printer[a, b, *args, option=True, **kwargs]:
print[a, b]
print[args]
print[option]
print[kwargs]
arg_printer[1, 4, 6, 5, param1=5, param2=6]
1 4
[6, 5]
True
{'param1': 5, 'param2': 6}

Ví dụ 7

Chúng ta có thể đóng gói và giải nén các biến sử dụng *args và **kwargs

def addition[*args]:
result = 0
for i in args:
result += i
return result
0

Nếu chúng ta chuyển một danh sách cho hàm trên, nó sẽ được lưu trữ trong args tuple dưới dạng một phần tử duy nhất

def addition[*args]:
result = 0
for i in args:
result += i
return result
1

Nếu chúng ta đặt dấu hoa thị trước lst, các giá trị trong danh sách sẽ được giải nén và lưu trữ riêng trong bộ args

def addition[*args]:
result = 0
for i in args:
result += i
return result
2

Ví dụ 8

Chúng ta có thể vượt qua nhiều lần lặp để được giải nén cùng với các phần tử đơn lẻ. Tất cả các giá trị sẽ được lưu trữ trong bộ args

def addition[*args]:
result = 0
for i in args:
result += i
return result
3

Ví dụ 9

Chúng tôi cũng có thể thực hiện việc đóng gói và giải nén với các đối số từ khóa

def addition[*args]:
result = 0
for i in args:
result += i
return result
4

Nhưng có thể lặp lại được truyền dưới dạng đối số từ khóa phải là ánh xạ, chẳng hạn như từ điển

def addition[*args]:
result = 0
for i in args:
result += i
return result
5

Ví dụ 10

Nếu chúng ta cũng chuyển các đối số từ khóa bổ sung cùng với một từ điển, chúng sẽ được kết hợp và lưu trữ trong từ điển kwargs

Đối số trong Python là gì?

*args cho phép chúng tôi chuyển một số lượng biến đối số không phải từ khóa cho hàm Python . Trong hàm, chúng ta nên sử dụng dấu hoa thị [ * ] trước tên tham số để truyền số lượng đối số thay đổi.

3 loại đối số trong Python là gì?

Do đó, chúng tôi kết luận rằng Đối số hàm Python và ba loại đối số hàm của nó. Đây là- các đối số mặc định, từ khóa và tùy ý .

args có phải là danh sách Python không?

*args là một chuỗi không giới hạn, có nghĩa là số lượng đối số vị trí không xác định. Danh sách là một đối số vị trí duy nhất . Chúng tôi không cần sử dụng splat nếu chúng tôi đang viết chức năng của mình để lấy danh sách. Có dấu sao trong định nghĩa hàm cho phép bất kỳ số lượng đối số nào.

Là args một tuple hoặc danh sách?

args là một dạng đối số ngắn . Với việc sử dụng *args, python lấy bất kỳ số lượng đối số nào trong hàm do người dùng xác định và chuyển đổi đầu vào của người dùng thành một bộ có tên args. Nói cách khác, *args có nghĩa là không hoặc nhiều đối số được lưu trữ trong một bộ tên là args.

Chủ Đề