Hướng dẫn python skills - kỹ năng trăn
Python là một ngôn ngữ lập trình hướng đối tượng bậc cao. Với cấu trúc ngôn ngữ và cách tiếp cận hướng đối tượng giúp nó trở nên cực kỳ đơn giản và thanh lịch, điều này khiến Python là một ngôn ngữ hoàn hảo cho người mới bắt đầu học lập trình.. Show Sự phát triển của các mô hình học máy (machine learning, deep learning) và nhu cầu phân tích dữ liệu (data science, data analytic) kéo theo một sự quan tâm lớn cho một ngôn ngữ hoàn hảo như Python cho các tác vụ này. Ngoài ra, Python cũng là một ngôn ngữ ưa thích cho phát triển web hay các hệ thống nhúng, điều này khiến Python luôn nằm trong top những ngôn ngữ phổ biến nhất và từng được bình chọn là ngôn ngữ lập trình của năm (2018). Top 10 ngôn ngữ lập trình phổ biến nhất (số liệu tháng 5/2020 - theo TIOBE*) Dựa trên kinh nghiệm, mình đánh giá Python là một ngôn ngữ không thể tuyệt vời hơn để bắt đầu học lập trình, đặc biệt nếu bạn muốn theo đuổi lĩnh vực phân tích dữ liệu hay trí tuệ nhân tạo. Dưới đây là những skill bạn cần biết để "không còn là beginner" với Python. Các nội dung chính:
1. Các hàm dựng sẵn : lambda, map, filter, reduceMình sẽ đề cập đến từng khái niệm cũng như cách sử dụng. Các ví dụ được mô tả gồm 2 đoạn code, đoạn code phía trên là logic code thông thường, đoạn code phía dưới các hàm dựng sẵn sẽ được sử dụng. Ta hãy bắt đầu nào!
Một vài lưu ý: - Hàm lambda có thể nhận bất kỳ số lượng đối số nào, nhưng chúng chỉ chứa một biểu thức. - Biểu thức là một đoạn mã được thực thi bởi hàm lambda, có thể trả về hoặc không trả về bất kỳ giá trị nào.bất kỳ giá trị nào. - Hàm Lambda có thể được sử dụng để trả về các đối tượng hàm. Về mặt cú pháp, các hàm lambda chỉ bị giới hạn ở một biểu thức duy nhất. Cú pháp : lambda argument(s): expressionú pháp : lambda argument(s): expression Ví dụ: Hàm lambda có thể được sử dụng cùng các hàm dựng sẵn khác của Python như map(), filter() hay reduce().filter() hay reduce().
Cú pháp: map(function, iterable, ...) map(function, iterable, ...) Ví dụ :
Cú pháp : filter(function, sequence)filter(function, sequence) Ví dụ :
Cú pháp : reduce(function, sequence)reduce(function, sequence) Ví dụ : reduce function : Được sử dụng khi chúng ta muốn lặp lại một toán tử cho tất cả các phần tử trong iterable. Ta sẽ thử tính giai thừa ở ví dụ dưới để hiểu hơn về phương thức này nhé. : Như vậy bạn đã nắm được một vài hàm có thể hữu ích trong nhiều trường hợp và bạn có thể thấy sử dụng chúng code của bạn được rút ngắn đi khá nhiều và trông smart hơn phải không? Ngoài ra bạn cũng nên biết về một vài khái niệm đơn giản hơn như iter() và next() hay enumerate() để thao tác với một đối tượng iterable. Cú pháp : reduce(function, sequence)
Thay thế 1 hay nhiều phần tử liên tiếp trong list bằng một hay nhiều phần tử khác số phần tử lớn điều này sẽ là một vấn đề cho bộ nhớ. Yield giúp ta giải quyết vấn đề này. Lệnh này gần giống với return tuy nhiên return trả về một object còn yield thì trả về một generator. Sử dụng generator : generator là một iterable, một dạng iterable nhưng khác ở chỗ bạn không thể tái sử dụng. Bạn có một function trả về một list các phần tử, nếu số phần tử trong list đó nhỏ không vấn đề gì, nếu số phần tử lớn điều này sẽ là một vấn đề cho bộ nhớ. Yield giúp ta giải quyết vấn đề này. Lệnh này gần giống với return tuy nhiên return trả về một object còn yield thì trả về một generator. sau đó gọi return để trả về list này sau khi đã thực hiện xong. Mình sẽ giải thích sự khác nhau giữa return và yield :sẽ trả về một generator, và khi bạn yêu cầu nó mới bắt đầu thực hiện các dòng lệnh cho đến khi lệnh yield nó trả lại giá trị và tạm dừng (giữ nguyên trạng thái đang xử lý). Sau đó bạn lấy giá trị trả về, yêu cầu giá trị tiếp theo nó lại tiếp tục thực hiện và cứ như thế trả về lần lượt thay vì thực hiện hết các vòng lặp và trả về một list cuối cùng tất cả các kết quả. => YIELD thường được sử dụng trong deeplearning khi ta muốn ném lần lượt từng khối dữ liệu vào model (do dữ liệu đôi khi rất nặng, tính bằng Gb nên nếu ta thực hiện xử lý tất cả xong mới ném vào model thì quả là một điều khủng khiếp cho memory). Kết luận : Làm việc với list là một kỹ năng vô cùng quan trọng và rất thú vị trong python. : Làm việc với list là một kỹ năng vô cùng quan trọng và rất thú vị trong python. 3. Dunder là gì?Trong python, các Dunder (còn gọi là magic methods) là các phương thức có tiền tố và hậu tố là 2 dấu gạch dưới __ chẳng hạn như : __init__, __add__, __len__, __repr__ __init__, __add__, __len__, __repr__ Ở đây có lẽ các bạn sẽ quen thuộc nhất với __init__ =)) Sau đây mình sẽ giải thích một vài dunder và cách sử dụng:
Ngoài ra các bạn có thể tìm hiểu các dunder khác như __len__, __iter__, __slots__, __lt__,... để code pro hơn nhé =))__len__, __iter__, __slots__, __lt__,... để code pro hơn nhé =)) 4. Một vài khái niệm cần biết trong classes
Thuộc tính này lưu trữ tất cả các thuộc tính được định nghĩa của một đối tượng và giá trị của nó dưới dạng json.dạng json.
Khi bạn muốn truyền vào số lượng tham số không cố định, có thể là một có thể là nhiều tham số. Tuy kwargs được khuyên dùng ở mức tối thiểu nhưng theo kinh nghiệm của mình ở những dự án lớn, các function thường được truyền vào số lượng lớn tham số sẽ sử dụng kwargs.các function thường được truyền vào số lượng lớn tham số sẽ sử dụng kwargs. 5. ImportKhi bạn viết một file python và muốn import một vài function từ một file khác vào, do hơi lười nên bạn không muốn nhập một dãy tên các function, bạn sử dụng import * chẳng hạn from util import * import * chẳng hạn from util import * Trông thì có vẻ không ảnh hưởng lắm, bạn nghĩ ừ thì nó import thừa một vài function cũng chẳng sao. Xét một ví dụ : bạn muốn from util import * từ một file như sau from util import * từ một file như sau
Khi đó, dòng lệnh này không chỉ import Encoder, Decoder, Loss mà cả numpy, tensorflow. Để tránh việc dư thừa như này, người ta sử dụng keyword __all__ . Trong file trên, nếu ta thêm vào dòng __all__ = ['Encoder', 'Decoder'] thì khi import * sẽ chỉ import vào 2 function là Encoder và Decoder. Để tránh việc dư thừa như này, người ta sử dụng keyword __all__ . Trong file trên, nếu ta thêm vào dòng __all__ = ['Encoder', 'Decoder'] thì khi import * sẽ chỉ import vào 2 function là Encoder và Decoder. Điều này sẽ giải quyết những dòng import "vô trách nhiệm" của bạn :D 6. DecoratorDecorator là một trong những tính năng tuyệt vời nhất của Python, tuy nhiên đối với người mới bắt đầu lập trình Python, chúng có vẻ như là phép thuật vậy. Bạn sẽ thấy cách mà decorator được viết như dưới đây:
Các bạn sẽ nhận biết nó dựa vào @, vâng đó là một decorator. Về bản chất nó là một hàm, tuy nhiên nó là một hàm phức hợp. Một decorator nhận một hàm như là một tham số đầu vào và trả về một hàm khác. Decorator được định nghĩa theo hình thức sau:
Xem ví dụ để dễ hiểu hơn nhé Ở đây các bạn sẽ thấy, ta gọi hàm double , hàm double này sẽ được đưa cùng với tham số x = 2 vào để hàm squared thực hiện. Rất dễ hiểu phải không! Các bạn chỉ cần nhớ ngắn gọn là "hàm thực hiện hàm". ^.^ Hy vọng ví dụ này sẽ không khó hiểu! 7. Cache savingBộ nhớ đệm (cache) là một kỹ thuật quan trọng do đó python cung cấp một decorator giúp ta lưu lại các tính toán trước đó. Các bạn có thể xem thêm tại https://docs.python.org/3/library/functools.html ( lru - least recently used ) 8. Clean codeNgoài những kiến thức như đề cập ở trên bạn cũng nên chú ý đến phong cách coding, dưới đây là một vài tips dựa trên kinh nghiệm của bản thân mình:
Tạm kếtNếu bạn còn tips gì hay ho có thể chia sẻ cho mọi người hay có câu hỏi gì cần giải đáp hãy comment bên dưới nhé! Trong những bài viết sau mình sẽ chia sẻ về machine learning và deep learning Và nếu bạn thấy bài viết hữu ích hãy cho mình đánh giá 5*. Thank you! Chú thích :(*) TIOBE: chỉ số TIOBE là một chỉ số về mức độ phổ biến của các ngôn ngữ lập trình, chỉ số được cập nhật mỗi tháng một lần, xếp hạng dựa trên cộng đồng các kỹ sư lập trình trên toàn thế giới, hay các công cụ tìm kiếm,... .Cần hiểu rõ rằng TIOBE không phải là chỉ số ngôn ngữ lập trình tốt nhất. (**) Iterable là gì? Khi bạn tạo ra một list, bạn có thể truy xuất từng giá trị của list đó người ta gọi đó là iteration, mọi thứ bạn dùng cú pháp for ... in .. đều là một iterable. [Reference] :
|