Đặ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
- Đối với phép toán nhân và lũy thừa
- Để liên tục mở rộng các thùng chứa kiểu danh sách
- Đối với việc sử dụng các đối số matrixdic. [cái gọi là "đóng gói"]
- Để 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. third
3. Đố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à second
0 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à second
1
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ư second
4 hoặc second
5. [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 *args
và second
7]
Để 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ì second
8 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 second
9 thành third
0, mọi phần tử của danh sách second
9 sẽ được giải nén, sau đó được lưu trữ trong danh sách có tên là third
2. Nếu bạn chuyển danh sách second
9 đó cho hàm mà không giải nén, thì third
2 sẽ chỉ có một danh sách second
9 chứ không phải tất cả các phần tử của second
9
Đố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, third
7 và third
8 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ó