1|9 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Bài 30: KIỂU DỮ LIỆU FUNCTION TRONG PYTHON - PACKING VÀ UNPACKING ARGUMENTS Xem học website để ủng hộ Kteam: Kiểu liệu Function Python - Packing unpacking arguments Mọi vấn đề lỗi website làm ảnh hưởng đến bạn thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website Các bạn vui lòng phản hồi đến Fanpage How Kteam nhé! Dẫn nhập Trong trước, Kteam giới thiệu đến bạn Kiểu liệu Function Python - Positional keyword argument Và Kteam lại tìm hiểu với bạn Kiểu liệu Function Python - Packing unpacking arguments Nội dung Để đọc hiểu tốt bạn cần: Copyright © Howkteam.com 2|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON Xem qua CÁCH CHẠY CHƯƠNG TRÌNH PYTHON Nắm CÁCH GHI CHÚ BIẾN TRONG PYTHON CÁC KIỂU DỮ LIỆU ĐƯỢC GIỚI THIỆU TRONG PYTHON CÂU ĐIỀU KIỆN IF TRONG PYTHON VÒNG LẶP WHILE VÒNG LẶP FOR TRONG PYTHON NHẬP XUẤT TRONG PYTHON Trong này, tìm hiểu nội dung sau đây: Unpacking arguments với * Packing arguments với * Unpacking arguments với ** Packing arguments với ** Unpacking arguments với * Giả sử, bạn có hàm >>> def kteam(k, t, e, r): print(k) print(t, e) print('end', r) Bạn thấy đấy! Hàm gồm parameter khơng có default argument Vậy nên gọi hàm này, bạn buộc phải đưa vào argument Nhưng bạn có vấn đề, argument cần truyền vào gọi hàm lại nằm List >>> lst = ['123', 'Kteam', 69.96, 'Henry'] Chả cả, bạn lấy phần tử (element) list cách dễ dàng, sau bạn gọi hàm kteam Copyright © Howkteam.com 3|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> kteam(lst[0], lst[1], lst[2], lst[3]) 123 Kteam 69.96 end Henry Phức tạp vấn đề lên chút nào! Sẽ bạn có 50 parameter phải gõ hết 50 indexing để truyền vào cho hàm gọi nó? Lập trình viên lười lắm, họ khơng làm chuyện đâu Vậy nên, Python cho phép làm điều đơn giản dấu * >>> kteam(*lst) 123 Kteam 69.96 end Henry Khi bạn sử dụng *, bạn khơng unpack List mà bên cạnh bạn unpack container khác Tuple, Chuỗi, Generator, Set, Dict (chỉ lấy key) Lưu ý: Pass argument cách unpacking argument truyền vào dạng positional argument Hãy cẩn thận sử dụng kĩ thuật với hàm có parameter dạng keyword-only argument >>> def a(*, s, d): print(s, d) >>> a(*('a', 'b')) Traceback (most recent call last): File "", line 1, in TypeError: a() takes positional arguments but were given Trong trường hợp container bạn unpack giá trị có container chưa đủ yêu cầu hàm, bạn truyền thêm: Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM 4|9 >>> kteam(*('a', 'b', 'c'), 'd') a bc end d Packing arguments với * Bạn nhớ hàm print chứ? Nó có khả nhận argument Làm làm thế? Đó nhờ packing argument Đơi lúc, bạn biết trước bạn pass vào argument Việc kiểm sốt điều đơi lúc bất khả thi Khi bạn sử dụng packing argument Đồng nghĩa với việc bạn nhờ biến gói tất giá trị truyền vào cho hàm positional argument thành Tuple Nếu khơng có để gói (bạn khơng truyền vào argument nào) bạn nhận tuple rỗng Để giao nhiệm vụ cho biến làm công việc này, bạn đặt dấu * trước >>> def kteam(*args): print(args) print(type(args)) >>> kteam('Kteam', 69.96, 'Henry') ('Kteam', 69.96, 'Henry') >>> kteam(*(x for x in range(7))) # unpack sau pack (0, 1, 2, 3, 4, 5, 6) Lưu ý: Copyright © Howkteam.com 5|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Bạn không nên nhầm lẫn việc với việc force keyword-only argument Không phép để parameter làm nhiệm vụ packing argument hàm Nếu sau packing parameter cịn có parameter khác, gọi hàm muốn truyền giá trị vào cho parameter sau packing parameter bạn cần phải sử dụng keyword argument >>> def f(*args, kter): print(kter) >>> f('1', '2') Traceback (most recent call last): File "", line 1, in TypeError: f() missing required keyword-only argument: 'kter' >>> f('1', '2', kter='3') Bạn sử dụng kĩ thuật khai báo biến Kteam nói vấn đề khác Ở ví dụ bạn thấy Kteam sử dụng biến packing có tên args Đó khơng phải ngẫu nhiên mà quy ước nhỏ Pythonist với Thường người ta sử dụng biến có tên args (viết gọn arguments) để làm biến packing Trong Python, có nhiều quy ước luật bất thành văn cách đặt tên biến, cách định dạng code, cách đặt tên file Bạn biết thêm khác Kteam Copyright © Howkteam.com 6|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Unpacking arguments với ** Ta thử unpacking Dict với dấu * >>> dic = {'name': 'Kteam', 'member': 69} >>> def kteam(a, b): print(a) print(b) >>> kteam(*dic) name member Như bạn thấy, lấy key thơi Với Dict, phức tạp xíu phần tử cặp key value Vậy nên dấu * không đủ nội công để unpack hết giá trị Do ta phải nhờ đến cặp ** Nếu bạn unpacking Dictionary để truyền argument vào cho hàm gọi hàm dạng keyword argument Vậy nên bạn phải chắn parameter với key giống >>> dic = {'name': 'Kteam', 'member': 69} >>> def kteam(a, b): print(a) print(b) >>> kteam(**dic) Traceback (most recent call last): File "", line 1, in TypeError: kteam() got an unexpected keyword argument 'name' >>> def kteam(name, member): print('name =>', name) print('member =>', member) >>> kteam(**dic) name => Kteam member => 69 Copyright © Howkteam.com 7|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Packing arguments với ** Đã có unpacking với ** phải có packing Khác với dấu * gói positional argument ** lại gói keyword argument Và đương nhiên, gói Dict Nếu khơng truyền vào dict rỗng >>> def kteam(**kwargs): print(kwargs) print(type(kwargs)) >>> kteam(name='Kteam', member=69) {'name': 'Kteam', 'member': 69} Tên biến kwargs (viết gọn keyword arguments) quy ước đặt tên >>> def kteam(**kwargs): for key, value in kwargs.items(): # phương thức items kiểu liệu Dict print(key, '=>', value) >>> kteam(id=3424, name='Henry', age=18, lang='Python') id => 3424 name => Henry age => 18 lang => Python Lưu ý: bạn không phép bỏ positional parameter sau biến packing mà có ** giống với * Copyright © Howkteam.com 8|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> def f(**a, b): File "", line def f(**a, b): ^ SyntaxError: invalid syntax Nhờ kiến thức trên, bạn có hàm linh hoạt sau >>> def best_function_ever(*args, **kwargs): # việc lại bạn thỏa sức biến tấu pass Bạn nắm kĩ thuật này, đơn giản lại sử dụng nhiều Củng cố học Đáp án trước Bạn tìm thấy câu hỏi phần CÂU HỎI CỦNG CỐ KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Phần Đáp án: Ta dùng lệnh help >>> help(sorted) Ta cấu trúc hàm sorted sau: sorted(iterable, /, *, key=None, reverse=False) Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM 9|9 Vậy nên positional only iterable, keyword only key reverse Kết luận Qua viết này, Bạn biết thêm hàm Python qua khái niệm packing unpacking arguments Ở viết sau Kteam tiếp tục giới thiệu thêm với bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON - BIẾN LOCALS VÀ GLOBALS Cảm ơn bạn theo dõi viết Hãy để lại bình luận góp ý để phát triển viết tốt Đừng quên “Luyện tập – Thử thách – Không ngại khó” Copyright © Howkteam.com ... THIỆU TRONG PYTHON CÂU ĐIỀU KIỆN IF TRONG PYTHON VÒNG LẶP WHILE VÒNG LẶP FOR TRONG PYTHON NHẬP XUẤT TRONG PYTHON Trong này, tìm hiểu nội dung sau đây: Unpacking arguments với * Packing. .. này, Bạn biết thêm hàm Python qua khái niệm packing unpacking arguments Ở viết sau Kteam tiếp tục giới thiệu thêm với bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON - BIẾN LOCALS VÀ GLOBALS Cảm ơn bạn...2|9 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON Xem qua CÁCH CHẠY CHƯƠNG TRÌNH PYTHON Nắm CÁCH GHI CHÚ BIẾN TRONG PYTHON CÁC KIỂU DỮ LIỆU ĐƯỢC