3 điều tôi ước nên biết sớm hơn về hàm trong Python
Có nhiều điều tôi ước mình đã biết sớm hơn trong hành trình chinh phục Python của mình, nhưng cuộc sống là vậy, muộn còn hơn không.
Có nhiều điều bạn biết nhưng những người khác thì chưa và ngược lại, vậy nên tôi vẫn sẽ chia sẻ ở đây. Rất hi vọng giúp được bạn phần nào đó trong hành trình Python của mình.
1. Gợi ý kiểu
Đây là điều mà tôi học được từ MVP Player 2023 – BinhDH sau buổi review code lại code cho dự án của mình – Perry.
Bạn muốn viết một hàm sum ư, đơn giản ấy mà, bạn sẽ thường viết thế này đúng không?
Yeah, không có gì là sai khi viết như vậy cả, đây là lí do chúng ta thích Python mà. Chúng ta có thể viết các hàm như vậy thì Python vì kiểu dữ liệu trong Python là “kiểu dữ liệu động” – nghĩa là các biến được xác định tại thời điểm chạy chương trình
Nhưng chúng ta có thể viết một hàm y hệt như vậy nhưng có gợi ý về kiểu.
Ví dụ ở đây chúng ta mong đợi hàm magic nhận vào 2 biến a và b có kiểu int và trả về kiểu int là giá trị a + b (ví dụ a = 1, b = 2 thì trả về giá trị bằng 3).
Câu hỏi bạn sẽ nhận được khi phỏng vấn này, liệu việc thêm gợi ý về kiểu cho hàm magic có khiến hàm này chạy nhanh hơn không? Ví dụ khi chạy code vì biết kiểu dữ liệu rồi nên code sẽ chạy nhanh hơn thay vì phải tìm xem a và b là kiểu dữ liệu gì rồi mới chạy nên code sẽ run nhanh hơn ấy. Câu trả lời là không nhé :)) Đừng mắc vào cái bẫy này.
Khi số lượng code trong dự án của chúng ta trở nên khổng lồ, những phần gợi ý kiểu như vậy càng trở nên quan trọng giúp việc đọc code của chúng ta hoặc những người mới tham gia vào dự án trở nên dễ dàng hơn. Hãy thử tưởng tượng bạn có 10.000 hàm nhưng bạn cần suy ra các kiểu dữ liệu, kiểu trả về của chúng, chà chà, chắc chắn đây sẽ là một việc chẳng vui vẻ gì.
Thêm một vài ví dụ nữa nhé, tôi có phân tích một chút ở trong phần comment của hàm
Một lưu ý nho nhỏ này :
Gợi ý kiểu chỉ là gợi ý, không bắt buộc.
Nếu các biến chúng ta truyền vào hoặc trả về không tuân theo kiểu gợi ý của gợi ý kiểu, Python vẫn cứ là okay (Không như ông Typescript nào đó)
2. *args và **kwargs
Okay, chắc bạn đã thấy rất nhiều *args và **kwargs khi bước chân vào thế giới Python rồi nhỉ. Khi tôi học đại học thầy cô giáo cũng không nói rõ về phần này lắm, nhưng khi làm việc thì tôi gặp rất nhiều.
Đừng để cú pháp làm sợ bạn. Nó không phải là những tham số đặc biệt thần thánh. Nó còn thậm chí không quá ảo, và chúng ta sẽ học cách sử dụng nó.
*args cho phép chúng ta định nghĩa các hàm nhận một số lượng vô hạn các đối số vị trí.
**kwargs cho phép chúng ta định nghĩa các hàm nhận một số lượng vô hạn các đối số từ khóa.
Nghe khó hiểu nhỉ, bạn sẽ hiểu ngay sau ví dụ sau
Trong ví dụ này, magic()
là một hàm Python với đối số *args
và **kwargs
. Đối số *args
được sử dụng để nhận các đối số vị trí không xác định trước và đối số **kwargs
được sử dụng để nhận các đối số từ khóa không xác định trước.
Khi gọi hàm magic(1, 2, 'apple', a=4, b=5, c=[1, 2, 3])
, các đối số được truyền vào theo thứ tự sau:
1
,2
, và'apple'
là các đối số vị trí.a=4
,b=5
, vàc=[1, 2, 3]
là các đối số từ khóa.
Trong hàm magic()
, đối số *args
sẽ nhận tất cả các đối số vị trí không xác định trước dưới dạng một tuple và đối số **kwargs
sẽ nhận tất cả các đối số từ khóa không xác định trước dưới dạng một từ điển.
Vì vậy, trong hàm magic()
, giá trị của args
sẽ là (1, 2, 'apple')
, và giá trị của kwargs
sẽ là {'a': 4, 'b': 5, 'c': [1, 2, 3]}
.
Thêm một ví dụ khác, bạn thử tự làm rồi đối chiếu với kết quả xem có đúng không nhé
Chà, bạn đã hiểu rồi đấy, chúc mừng nhé.
3. Lambda functions
Trong Python, lambda function là một loại hàm vô danh (anonymous function), nghĩa là nó không cần phải được định nghĩa bằng từ khóa def như các hàm thông thường. Lambda function được tạo ra bằng từ khóa lambda và thường được sử dụng khi cần một hàm đơn giản mà không cần phải đặt tên cho nó.
Ví dụ :
Đầu vào của hàm là những phần trước dấu :
là x,y
, giá trị trả về là những phần sau dấu :
là x+y
Thêm một ví dụ khác nhé
Các hàm Lambda có thể ẩn danh, nghĩa là chúng ta không cần phải đặt tên cho nó nếu không muốn. Điều này có thể hữu ích nếu chúng ta cần chuyển một hàm sang một hàm khác :
Lần tới tôi sẽ chia sẻ tiếp 4 điều khác nhé, và điều số 7 sẽ làm bạn bất ngờ đấy.
Hôm nay tới đây thôi, hẹn gặp lại các bạn vào blog tới.