Trăn biến đổi

Đặc biệt, Dấu hoa thị [*] là một trong những toán tử được sử dụng nhiều nhất trong Python cho phép chúng ta kích hoạt nhiều phép toán khác nhau hơn là chỉ nhân hai số. Trong bài đăng này, chúng ta sẽ xem xét các thao tác khác nhau có thể được thực hiện với Dấu hoa thị[*] này để viết Python theo cách Python hơn

Có 4 trường hợp sử dụng dấu hoa thị trong Python

  1. Đối với phép toán nhân và lũy thừa
  2. Để liên tục mở rộng các thùng chứa kiểu danh sách
  3. Đối với việc sử dụng các đối số matrixdic. [cái gọi là "đóng gói"]
  4. Để giải nén các thùng chứa

Hãy xem xét từng trường hợp

Khi được sử dụng trong phép toán nhân và luỹ thừa

Có thể bạn đã biết về trường hợp này. Python hỗ trợ các hoạt động nguồn tích hợp cũng như phép nhân

Để liên tục mở rộng các thùng chứa kiểu danh sách

Python cũng hỗ trợ nhân vùng chứa kiểu danh sách [bao gồm bộ dữ liệu] và int để mở rộng dữ liệu vùng chứa theo số lần đã cho

Đối với việc sử dụng các đối số matrixdic

Chúng ta thường cần đối số biến thiên [hoặc tham số] cho một số chức năng. Ví dụ: chúng tôi cần nó nếu chúng tôi không biết số lượng đối số được truyền hoặc khi chúng ta nên xử lý thứ gì đó với các đối số được truyền tùy ý vì một số lý do

Có 2 loại đối số trong Python, một là đối số vị trí và loại kia là đối số từ khóa, loại trước được chỉ định theo vị trí của chúng và loại sau là đối số có từ khóa là tên của đối số

Trước khi xem xét các đối số vị trí/từ khóa biến đổi, chúng ta sẽ nói đơn giản về các đối số vị trí và đối số từ khóa

Hàm trên có 2 đối số vị trí. Đối số từ khóa first, second và 2. third3. Đối với các đối số vị trí, không thể bỏ qua nó và bạn phải chuyển tất cả các đối số vị trí đến đúng vị trí cho mỗi số lượng đối số được khai báo. Tuy nhiên, đối với đối số từ khóa, bạn có thể đặt giá trị mặc định của nó khi khai báo hàm và nếu bạn bỏ qua đối số thì giá trị mặc định tương ứng sẽ được nhập làm giá trị của đối số. Đó là, các đối số từ khóa có thể được bỏ qua

Do đó, những gì bạn có thể thấy ở đây là các đối số từ khóa có thể được bỏ qua, vì vậy chúng không thể được khai báo trước các đối số vị trí. Vì vậy, đoạn mã sau sẽ đưa ra các ngoại lệ

Tuy nhiên, trong trường hợp thứ ba, bạn có thể thấy rằng có 3 đối số vị trí và 1 đối số từ khóa. Có, đối với đối số từ khóa, nếu vị trí đã truyền giống với vị trí đã khai báo, từ khóa có thể được loại trừ và chuyển thành đối số vị trí. Tức là, ở trên, khóa mike sẽ tự động được chuyển sang khóa third

Cho đến nay chúng ta đã nói về cơ sở của lập luận. Nhân tiện, một vấn đề có thể được đáp ứng ở đây. Hàm không thể xử lý số lượng người chạy tùy ý vì hàm có số lượng đối số cố định. Vì vậy, chúng tôi cần các đối số variadic cho nó. Cả đối số vị trí và đối số từ khóa đều có thể được sử dụng làm đối số biến đổi. Hãy xem các ví dụ sau

Khi chỉ sử dụng đối số vị trí

Khi chỉ sử dụng đối số từ khóa

Khi sử dụng cả đối số vị trí và đối số từ khóa

Ở trên, _*args có nghĩa là chấp nhận số lượng đối số vị trí tùy ý và **kwargs có nghĩa là chấp nhận số lượng đối số từ khóa tùy ý. Ở đây, *args, **kwargs được gọi là đóng gói

Như bạn có thể thấy ở trên, chúng tôi đang chuyển các đối số có thể chứa số lượng giá trị vị trí hoặc từ khóa tùy ý. Các đối số được truyền dưới dạng vị trí được lưu trữ trong một bộ có tên là second0 và các đối số được truyền dưới dạng từ khóa được lưu trữ trong một lệnh có tên là second1

Như đã đề cập trước đó, các đối số từ khóa không thể được khai báo trước các đối số vị trí, vì vậy đoạn mã sau sẽ đưa ra các ngoại lệ

Đối số biến đổi là một tính năng rất thường được sử dụng, nó có thể được nhìn thấy trên nhiều dự án mã nguồn mở. Thông thường, nhiều nguồn mở sử dụng các tên đối số thường được sử dụng, chẳng hạn như *args hoặc **kwargs làm tên đối số biến đổi. Nhưng, tất nhiên, bạn cũng có thể sử dụng tên riêng của mình cho nó như second4 hoặc second5. [Tuy nhiên, nếu dự án của bạn là mã nguồn mở và không có ý nghĩa đặc biệt nào trong các đối số biến đổi, thì tốt nhất là tuân theo các quy ước sử dụng *argssecond7]

Để giải nén các thùng chứa

Dấu * cũng có thể được sử dụng để giải nén các thùng chứa. Nguyên tắc của nó tương tự như “Đối với việc sử dụng các đối số biến đổi” ở trên. Ví dụ đơn giản nhất là chúng ta có dữ liệu ở dạng danh sách, tuple hoặc dict và một hàm nhận đối số biến

Bởi vì second8 lấy các đối số biến, chúng ta cần giải nén dữ liệu danh sách của mình và chuyển nó vào hàm đó. Trong trường hợp này, nếu chúng ta chuyển second9 thành third0, mọi phần tử của danh sách second9 sẽ được giải nén, sau đó được lưu trữ trong danh sách có tên là third2. Nếu bạn chuyển danh sách second9 đó cho hàm mà không giải nén, thì third2 sẽ chỉ có một danh sách second9 chứ không phải tất cả các phần tử của second9

Đối với tuple, nó có thể được thực hiện giống hệt như danh sách và đối với dict, chỉ cần sử dụng ** thay vì *

Và còn 1 kiểu giải nén nữa, nó không dùng hàm mà chỉ giải nén động danh sách hoặc bộ dữ liệu sang các biến khác

Ở đây, third7 và third8 sẽ thực hiện đóng gói lại các giá trị còn lại trừ các giá trị đơn chưa giải nén được gán các biến bình thường khác sau khi giải nén list hoặc tuple. Đó là các khái niệm tương tự để đóng gói cho các đối số variadic

Phần kết luận

Cho đến giờ chúng ta đã tìm hiểu về Dấu hoa thị [*] của Python. Thật thú vị khi có thể thực hiện nhiều thao tác khác nhau với một toán tử và hầu hết những thao tác trên là những điều cơ bản để viết mã Pythonic. Đặc biệt, phần “Để sử dụng đối số biến đổi” là điều rất quan trọng, nhưng những người mới bắt đầu sử dụng python thường nhầm lẫn về khái niệm này, vì vậy nếu bạn là người mới bắt đầu học python, tôi muốn bạn biết rõ hơn về nó

Chủ Đề