Bài 46. HÀM TRONG PYTHON P4 (PACKING AND UNPACKING ARGUMENT P1)

I. Unpacking Argument using *

Giả sử ta có 1 hàm như sau:
def greet(a,b,c,d):
    print(a,b)
    print(c,d)
Bây giờ nếu ta muốn truyền vào 4 tham số a,b,c,d bằng 4 đối số. Nhưng 4 đối số đó lại nằm trong 1 list. Ví dụ:
list1 = [“one”,”two”,”three”,”four”] 
Để truyền list này vào hàm, ta sử dụng dấu *. Mời các bạn xem ví dụ dưới đây:

Ví dụ 1:
Các câu lệnh:

# Khởi tạo hàm
def greet(a,b,c,d):
    print(a,b)
    print(c,d)
# Khởi tạo list1
list1 = [“one”,”two”,”three”,”four”] 
#Truyền các phần tử trong list1 lần lượt vào hàm greet sử dụng *
greet(*list1)
 

Kết quả trả ra:
one two
three four

Ví dụ 2 (vẫn ví dụ trên nhưng list thiếu phần tử):
Các câu lệnh:

# Khởi tạo hàm
def greet(a,b,c,d):
    print(a,b)
    print(c,d)
# Khởi tạo list1
list1 = [“one”,”two”,”three”] 
#Truyền các phần tử trong list1 lần lượt vào hàm greet sử dụng *.
Do list thiếu 1 phần tử, ta sẽ truyền trực tiếp
greet(*list1,”four”)
 

Kết quả trả ra:
one two
three four

Ngoài List thì các kiểu dữ liệu có thể unpack khi sử dụng * còn bao gồm: Tuple, Chuỗi, Generator, Set, Dict (chỉ lấy được key).

II. Packing Argument using *

Đối với Packing Argument, ta sẽ nhờ 1 biến gói tất cả các giá trị truyền vào cho hàm, bằng positional argument thành 1 Tuple.
Nếu không có gì để gói (bạn không truyền vào bất cứ argument nào)
thì bạn sẽ nhận được một tuple rỗng. Để giao nhiệm vụ cho một biến làm
công việc này, bạn đặt một dấu * trước nó.

Ví dụ 3 :
Các câu lệnh:

# Khởi tạo hàm packing argument sử dụng *
def number1(*x):
    print(x)
    print(type(x))
# Truyền vào hàm 1 lượng đối số bất kỳ, ví dụ 3 giá trị 3,6,9

number1(3,6,9)

Kết quả trả ra:
(3, 6, 9)
<class ‘tuple’>

Ví dụ 4 (unpack 1 list sau đó pack) :
Các câu lệnh:

# Khởi tạo hàm 
def number2(*x):
   print(x)
   print((type(x))

#Khởi tạo list
list1 = [y for y in range(4)]
#Truyền vào hàm đối số là list1 
number2(*(list1))

Kết quả trả ra:
(0, 1, 2, 3)
<class ‘tuple’>

Ví dụ 5 (sau packing argument còn 1 parameter khác, cần phải sử dụng keyword argument) :
Các câu lệnh:

# Khởi tạo hàm 
def number3(*x, y):
   print(x)
   print(y)

#Truyền vào hàm đối số của *x là 3,6,9, truyền vào y là 10
number3((3,6,9),y=10)

Kết quả trả ra:
(3, 6, 9)
10

Nếu trong bài trên ta truyền trực tiếp vào tham số y đối số là 10 thì sẽ báo lỗi. Bắt buộc phải truyền keyword argument.

III. Kết Luận

Như vậy, chúng tôi đã tiếp tục giới thiệu tới các bạn các khái niệm cơ bản của hàm (function) trong Python. Nếu có vấn đề nào chưa rõ, các bạn hãy liên hệ với chúng tôi để được giúp đỡ.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *