Trong bài viết này, mình sẽ chém gió về một số cách sử dụng khác nhau của a.k.a “*” trong Python
Tạo collections với các phần tử lặp lại:
1 2 3 4 | collections <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>collections<span class="token punctuation">)</span> <span class="token comment"># output: [1, 2, 3, 1, 2, 3]</span> |
Chúng ta hoàn toàn có thể áp dụng tương tự với tuple hay chuỗi:
1 2 3 4 | collections <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>collections<span class="token punctuation">)</span> <span class="token comment"># output: (1, 2, 3, 1, 2, 3)</span> |
1 2 3 4 | strings <span class="token operator">=</span> <span class="token string">"VN"</span> <span class="token operator">*</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>strings<span class="token punctuation">)</span> <span class="token comment"># output: VNVN</span> |
Unpacking tập hợp tuần tự thành các biến riêng biệt
1 2 3 4 5 | collections <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span> x<span class="token punctuation">,</span> y <span class="token operator">=</span> collections <span class="token keyword">print</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> <span class="token comment"># output: 4 5</span> |
Với các biến mà ta không sử dụng ta có thể sử dụng _ để biểu diễn:
1 2 3 4 5 6 7 8 | data <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'VietNam'</span><span class="token punctuation">,</span> <span class="token number">84</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token string">'VN'</span><span class="token punctuation">]</span> country<span class="token punctuation">,</span> country_code<span class="token punctuation">,</span> population<span class="token punctuation">,</span> short_name <span class="token operator">=</span> data <span class="token keyword">print</span><span class="token punctuation">(</span>country<span class="token punctuation">,</span> country_code<span class="token punctuation">,</span> population<span class="token punctuation">,</span> short_name<span class="token punctuation">)</span> <span class="token comment"># output: VietNam 84 100 VN</span> country<span class="token punctuation">,</span> country_code<span class="token punctuation">,</span> population<span class="token punctuation">,</span> _ <span class="token operator">=</span> data <span class="token keyword">print</span><span class="token punctuation">(</span>country<span class="token punctuation">,</span> country_code<span class="token punctuation">,</span> population<span class="token punctuation">)</span> <span class="token comment"># output: VietNam 84 100</span> |
Các tiêu đề sau mình xin mạn phép để tiếng anh vì dịch ra thì nghe nó cũng khá thô và cũng không sát nghĩa lắm :V
Unpacking Elements from Iterables of Arbitrary Length
Lấy tất cả các phần tử ở giữa của list:
1 2 3 4 5 | grades <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span> first<span class="token punctuation">,</span> <span class="token operator">*</span>middle<span class="token punctuation">,</span> last <span class="token operator">=</span> grades <span class="token keyword">print</span><span class="token punctuation">(</span>first<span class="token punctuation">,</span> middle<span class="token punctuation">,</span> last<span class="token punctuation">)</span> <span class="token comment"># output: 1 [2, 3, 4] 5</span> |
Lấy tất cả các phần tử còn lại của list:
1 2 3 4 5 | record <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">'VN'</span><span class="token punctuation">,</span> <span class="token string">'vn@example.com'</span><span class="token punctuation">,</span> <span class="token string">'0773555121'</span><span class="token punctuation">,</span> <span class="token string">'0847555212'</span><span class="token punctuation">)</span> name<span class="token punctuation">,</span> email<span class="token punctuation">,</span> <span class="token operator">*</span>phone_numbers <span class="token operator">=</span> record <span class="token keyword">print</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> email<span class="token punctuation">,</span> phone_numbers<span class="token punctuation">)</span> <span class="token comment"># output: VN vn@example.com ['0773555121', '0847555212']</span> |
Dùng vài cái * một lúc nó sẽ như này:
1 2 3 4 5 | record <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">'FUKADA'</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">123.45</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">2012</span><span class="token punctuation">)</span><span class="token punctuation">)</span> name<span class="token punctuation">,</span> <span class="token operator">*</span>_<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token operator">*</span>_<span class="token punctuation">,</span> year<span class="token punctuation">)</span> <span class="token operator">=</span> record <span class="token keyword">print</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> year<span class="token punctuation">)</span> <span class="token comment"># output: FUKADA 2012</span> |
args and kwargs
Hãy thử xem hàm dưới đây:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">def</span> <span class="token function">calculate</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">,</span><span class="token operator">*</span>args<span class="token punctuation">,</span><span class="token operator">**</span>kwargs<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>arg<span class="token punctuation">)</span> <span class="token keyword">for</span> key <span class="token keyword">in</span> kwargs<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> kwargs<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">)</span> calculate<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> num1<span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">,</span>num2<span class="token operator">=</span><span class="token number">9</span><span class="token punctuation">)</span> <span class="token comment"># output: 2 3</span> <span class="token comment"># (4, 5, 6)</span> <span class="token comment"># num1 8</span> <span class="token comment"># num2 9</span> |
Merging Different Types Of Iterables
1 2 3 4 5 6 | var1 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> var2 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">}</span> collections <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">*</span>var1<span class="token punctuation">,</span> <span class="token operator">*</span>var2<span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span>collections<span class="token punctuation">)</span> <span class="token comment">#output: [1, 2, 3, 4, 5, 6]</span> |
Merging Two Dictionaries
1 2 3 4 5 | dict1 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'key1'</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token string">'key2'</span><span class="token punctuation">:</span><span class="token number">2</span><span class="token punctuation">}</span> dict2 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'key3'</span><span class="token punctuation">:</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token string">'key4'</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">}</span> <span class="token builtin">dict</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token operator">**</span>dict1<span class="token punctuation">,</span> <span class="token operator">**</span>dict2<span class="token punctuation">}</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">dict</span><span class="token punctuation">)</span> <span class="token comment">#output: {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4}</span> |