Giải nén toán tử python

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ố 8

sử 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]
1

Kết quả

TypeError: fun[] takes exactly 4 arguments [1 given]
2

3. 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

Chủ Đề