Xem xét một vấn đề trong đó chúng ta có một hàm nhận bốn đối số. Chúng ta muốn thực hiện cuộc gọi hàm này và chúng ta có một danh sách kích thước 4 có tất cả các đối số cho hàm. Nếu chúng ta chỉ đơn giản chuyển danh sách tới hàm, cuộc gọi sẽ không hoạt động
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: //www.facebook.com/cafedevn
#Group: //www.facebook.com/groups/cafedev.vn/
#Instagram: //instagram.com/cafedevn
#Twitter: //twitter.com/CafedeVn
#Linkedin: //www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: //www.pinterest.com/cafedevvn/
#YouTube: //www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
# A Python program to demonstrate need
# of packing and unpacking
# A sample function that takes 4 arguments
# and prints them.
def fun[a, b, c, d]:
print[a, b, c, d]
# Driver Code
my_list = [1, 2, 3, 4]
# This doesn't work
fun[my_list]
Kết quả
TypeError: fun[] takes exactly 4 arguments [1 given]
Giải nén
Chúng ta có thể sử dụng toán tử * để giải nén danh sách để tất cả các phần tử của nó có thể được truyền dưới dạng các tham số khác nhau
# A sample function that takes 4 arguments
# and prints the,
def fun[a, b, c, d]:
print[a, b, c, d]
# Driver Code
my_list = [1, 2, 3, 4]
# Unpacking list into four arguments
fun[*my_list]
Kết quả
[1, 2, 3, 4]
Một ví dụ khác, hãy xem xét phân tích hàm range[]cần các đối số bắt đầu và kết thúc riêng biệt. Nếu chúng không thể áp dụng một cách riêng biệt, hãy viết lệnh gọi hàm với
*-operator để giải nén các đối số ra khỏi danh sách hoặc bộ dữ liệu
>>>
>>> range[3, 6] # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range[*args] # call with arguments unpacked from a list
[3, 4, 5]
Đóng gói
Khi chúng ta không biết có bao nhiêu đối số cần được truyền tới một hàm trong python, chúng ta có thể sử dụng tính năng Đóng gói để đóng gói tất cả các đối số trong một tuple
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: //www.facebook.com/cafedevn
#Group: //www.facebook.com/groups/cafedev.vn/
#Instagram: //instagram.com/cafedevn
#Twitter: //twitter.com/CafedeVn
#Linkedin: //www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: //www.pinterest.com/cafedevvn/
#YouTube: //www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
# A Python program to demonstrate use
# of packing
# This function uses packing to sum
# unknown number of arguments
def mySum[*args]:
sum = 0
for i in range[0, len[args]]:
sum = sum + args[i]
return sum
# Driver code
print[mySum[1, 2, 3, 4, 5]]
print[mySum[10, 20]]
Kết quả
15
30
Hàm mySum[] trên gói đã đóng tất cả các đối số mà cuộc gọi phương thức này nhận được vào một biến đơn. Khi chúng ta có biến ‘đóng gói’ này, chúng ta có thể thực hiện mọi thứ với nó mà chúng ta có thể làm với một tuple bình thường. args[0] và args[1] lần cuối cùng sẽ cung cấp cho bạn đối số thứ nhất và thứ hai. Vì các tuple của chúng ta là bất biến, bạn có thể chuyển args tuple thành một danh sách để bạn cũng có thể sửa đổi, xóa và sắp xếp lại các mục trong đó
2. Đóng gói và giải nén
Dưới đây là một ví dụ để xem cả tính năng đóng gói và giải nén
# A Python program to demonstrate both packing and
# unpacking.
# A sample python function that takes three arguments
# and prints them
def fun1[a, b, c]:
print[a, b, c]
# Another sample function.
# This is an example of PACKING. All arguments passed
# to fun2 are packed into tuple *args.
def fun2[*args]:
# Convert args tuple to a list so we can modify it
args = list[args]
# Modifying args
args[0] = 'Geeksforgeeks'
args[1] = 'awesome'
# UNPACKING args and calling fun1[]
fun1[*args]
# Driver code
fun2['Hello', 'beautiful', 'world!']
Kết quả
________số 8sử dụng từ điển
# A sample program to demonstrate unpacking of
# dictionary items using **
def fun[a, b, c]:
print[a, b, c]
# A call with unpacking of dictionary
d = {'a':2, 'b':4, 'c':10}
fun[**d]
Kết quả
TypeError: fun[] takes exactly 4 arguments [1 given]
0Ở đây ** đã giải nén từ điển được sử dụng cùng nó và truyền các mục trong từ điển dưới dạng đối số từ khóa cho hàm. Vì vậy, việc viết “fun[1, **d]” tương đương với việc viết “fun[1, b=4, c=10]”
TypeError: fun[] takes exactly 4 arguments [1 given]
1Kết quả
TypeError: fun[] takes exactly 4 arguments [1 given]
23. Các ứng dụng và các điểm quan trọng
1. Có thể sử dụng trong thiết lập ổ cắm để gửi một số lượng yêu cầu lớn đến máy chủ
2. Được sử dụng trong khung Django để gửi các biến đối số để xem các hàm
3. Có các hàm bao bọc yêu cầu chúng ta truyền vào các biến đối số
4. Sửa đổi các đối số trở nên dễ dàng, nhưng đồng thời xác nhận là không phù hợp, vì vậy chúng phải được sử dụng cẩn thận
Nguồn và Tài liệu tiếng anh tham khảo
- w3school
- con trăn. tổ chức
- chuyên viên máy tính
Tài liệu từ cafedev
- Trọn bộ tự học Python từ cơ bản tăng cao tại đây nha
- Ebook về python tại đây
- Các chuỗi tự học lập trình khác nhau
Nếu thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa