paint-brush
11 mẹo và thủ thuật để viết mã Python tốt hơntừ tác giả@pragativerma
2,159 lượt đọc
2,159 lượt đọc

11 mẹo và thủ thuật để viết mã Python tốt hơn

từ tác giả Pragati Verma8m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Python thường sử dụng vòng lặp `for` để lặp qua một đối tượng có thể lặp lại. Nhưng có một cách dễ dàng và khó hiểu hơn để thực hiện điều này bằng cách sử dụng vòng lặp `enumerate () thay vì vòng lặp 'for'. Khả năng hiểu danh sách thay vì vòng lặp thô cho là một cách để tạo danh sách dựa trên danh sách hiện có. Nó có thể được sử dụng để sắp xếp các phần tử trong một danh sách hoặc chuỗi được sắp xếp (tuple, tập hợp, tập hợp cố định) hoặc tập hợp (tập hợp đông lạnh) Cú pháp của việc hiểu danh sách trông giống như sau: 'HackerNoon'

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 11 mẹo và thủ thuật để viết mã Python tốt hơn
Pragati Verma HackerNoon profile picture


Dưới đây là 11 mẹo và thủ thuật sẽ giúp bạn viết mã Python tốt hơn và trở thành một lập trình viên giỏi hơn:


1. Lặp lại với liệt kê thay thế hoặc range(len(x))

Trong Python, chúng ta thường sử dụng vòng lặp for để lặp qua một đối tượng có thể lặp lại. Vòng lặp for trong Python sử dụng phép lặp dựa trên tập hợp, tức là Python chỉ định mục tiếp theo từ một biến lặp lại cho biến vòng lặp trên mỗi lần lặp. Usecase thông thường của vòng lặp for như sau:


 values = ["a", "b", "c"] for value in values: print(value) # a # b # c


Bây giờ, nếu ngoài giá trị, bạn cũng muốn in chỉ mục, bạn có thể làm như sau:


 index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c


hoặc một cách phổ biến khác để làm điều này là sử dụng range(len(x)) :


 for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c


Tuy nhiên, có một cách dễ dàng và phức tạp hơn để lặp qua các đối tượng có thể lặp lại bằng cách sử dụng enumerate() . Nó được sử dụng trong vòng lặp for gần giống như cách bạn sử dụng theo cách thông thường, nhưng thay vì đặt đối tượng có thể lặp ngay sau in vòng lặp for , hoặc sử dụng nó dưới range(len(values)) , bạn đặt nó vào bên trong dấu ngoặc đơn của enumerate() như được hiển thị bên dưới:


 for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c


Chúng ta cũng có thể xác định một đối số start cho enumerate() như hình dưới đây:


 for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c


Hàm enumerate() trả về hai biến:

  • số lần lặp lại hiện tại
  • giá trị của mục ở lần lặp hiện tại


Cũng giống như các biến vòng lặp trong vòng lặp for , các biến vòng lặp có thể được đặt tên là bất kỳ thứ gì, chẳng hạn, chúng ta có thể gọi sau đó là indexvalue và chúng sẽ vẫn hoạt động. enumerate() hiệu quả hơn vòng lặp for vì nó giúp bạn không gặp rắc rối khi nhớ truy cập giá trị bên trong vòng lặp và sử dụng nó một cách chính xác và sau đó cũng nhớ nâng cao giá trị của biến vòng lặp, tất cả đều được Python xử lý tự động .


2. Sử dụng khả năng hiểu danh sách thay vì vòng lặp thô cho

Khả năng hiểu danh sách là một cách dễ dàng và thanh lịch để xác định danh sách tạo dựa trên danh sách hiện có. Chúng chỉ là một dòng mã bao gồm các dấu ngoặc chứa biểu thức được thực thi lặp đi lặp lại ở mỗi lần lặp. Do đó, chúng hiệu quả hơn về thời gian và không gian so với các vòng lặp và biến đổi các câu lệnh lặp trong một dòng mã.


Cú pháp thông thường của việc hiểu danh sách trông giống như sau:


 newList = [ expression(element) for element in oldList if condition ]


Đây là một ví dụ về khả năng hiểu danh sách trong mã:


 # Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']


3. Sắp xếp các tệp lặp phức tạp với sorted()

Hàm sorted() trong Python sắp xếp các phần tử của một đối tượng có thể lặp lại theo một thứ tự cụ thể (tăng dần hoặc giảm dần) và trả về chúng dưới dạng danh sách đã sắp xếp. Nó có thể được sử dụng để sắp xếp một chuỗi (chuỗi, bộ, danh sách) hoặc bộ sưu tập (bộ, từ điển, bộ cố định) hoặc bất kỳ trình lặp nào khác.


Cú pháp của hàm sorted() như sau:


 sorted(iterable, key=None, reverse=False)


Hàm sorted() nhận tối đa ba tham số:

  • có thể lặp lại: Nó có thể là bất kỳ trình lặp nào
  • key: Đây là một đối số tùy chọn đóng vai trò là một khóa để so sánh sắp xếp.
  • ngược lại: Nó cũng là một đối số tùy chọn được sử dụng để chỉ định danh sách được sắp xếp đảo ngược làm đầu ra


4. Lưu trữ các giá trị duy nhất với Bộ

Một Tập hợp Python lưu trữ một bản sao của các giá trị trùng lặp vào nó. Do đó, nó có thể được sử dụng để kiểm tra các giá trị duy nhất trong danh sách. Ví dụ:


 list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item)


Vì vậy, đầu ra của chương trình trên sẽ giống như sau:


 The unique elements of the input list using set(): 25 75 100 20 12


5. Tiết kiệm bộ nhớ với Máy phát điện

Chức năng cơ bản của máy phát điện là đánh giá các yếu tố theo yêu cầu. Nó rất giống với cú pháp để hiểu danh sách, trong đó thay vì dấu ngoặc vuông, chúng tôi sử dụng dấu ngoặc đơn.


Hãy xem xét một ví dụ mà chúng ta muốn in bình phương của tất cả các số chẵn trong một danh sách:


 myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele)


Đầu ra của đoạn mã trên sẽ giống như sau:


 The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100


Đã nói rằng cú pháp của chúng khá giống với khả năng hiểu danh sách, bạn phải tự hỏi nó khác gì với khả năng hiểu danh sách hoặc tập hợp. Không giống như khả năng hiểu danh sách hoặc tập hợp, khả năng hiểu trình tạo không khởi tạo bất kỳ đối tượng nào. Do đó, bạn có thể sử dụng khả năng hiểu của trình tạo thay vì danh sách hoặc thiết lập khả năng hiểu để giảm yêu cầu bộ nhớ của chương trình.


6. Xác định các giá trị mặc định trong Từ điển bằng .get().setdefault()


Phương thức .setdefault() cho phép đặt dict[key]=default nếu key chưa có trong dict.


Cú pháp của .setdefault() như sau:


 dict.setdefault(key, default=None)


Đây là đoạn mã ví dụ để hiểu cách sử dụng .setdefault() :


 a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary)


Đầu ra của đoạn mã trên sẽ giống như sau:


 {'a': 1, 'b': 2, 'd': 4, 'c': 3}


Điều tương tự cũng có thể đạt được bằng cách sử dụng phương thức .get() bằng cách chuyển một giá trị mặc định cho khóa, như bạn có thể thấy bên dưới:


 a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary)


Đầu ra của đoạn mã trên sẽ giống như sau:


 3 {'a': 1, 'b': 2, 'd': 4}


7. Đếm các đối tượng có thể băm bằng collections.Counter .

Mô-đun Bộ sưu tập hỗ trợ các kiểu dữ liệu vùng chứa hiệu suất cao (ngoài danh sách kiểu tích hợp, dict và tuple) và chứa nhiều cấu trúc dữ liệu hữu ích để lưu trữ thông tin trong bộ nhớ.


Bộ đếm là một vùng chứa theo dõi số lần các giá trị bằng nhau được thêm vào.

Nó có thể được sử dụng để triển khai các thuật toán tương tự mà các ngôn ngữ khác sử dụng cấu trúc dữ liệu bag hoặc multiset để triển khai.


Nhập bộ sưu tập làm cho nội dung trong bộ sưu tập có sẵn dưới dạng:

 import collections


Vì chúng tôi sẽ chỉ sử dụng Bộ đếm, chúng tôi có thể đơn giản làm điều này:


 from collections import Counter


Nó có thể được sử dụng như sau:


 import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter])


Đầu ra của đoạn mã trên sẽ giống như sau:


 a : 3 b : 2 c : 1 d : 1 e : 0


8. Định dạng chuỗi bằng f-Strings (Python 3.6+)

f-string, còn được gọi là "chuỗi ký tự được định dạng", là một cách mới và thú vị hơn để định dạng chuỗi, được hỗ trợ bởi Python 3.6+. Chúng là cách định dạng chuỗi nhanh hơn, dễ đọc hơn, ngắn gọn hơn và ít mắc lỗi hơn trong Python.


Như tên “f-string” đã nói, chúng là các ký tự chuỗi có chữ f ở đầu và dấu ngoặc nhọn chứa các biểu thức sẽ được thay thế bằng các giá trị của chúng trong thời gian chạy và sau đó được định dạng bằng giao thức __format__ .


f-string có thể được sử dụng như sau:


 name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.'


9. Nối các chuỗi với .join()

Trong Python, chúng ta có thể sử dụng phương thức .join() để nối danh sách các chuỗi thành một chuỗi duy nhất. Cú pháp thông thường cho phương thức này trông giống như dưới đây:


 'String to insert'.join([List of strings])


Nó có thể được sử dụng theo nhiều cách - nếu bạn sử dụng chuỗi trống ““ , [Danh sách các chuỗi] được nối đơn giản và nếu bạn sử dụng dấu phẩy, một chuỗi được phân tách bằng dấu phẩy sẽ được tạo. Khi ký tự dòng mới \n được sử dụng, một dòng mới sẽ được thêm vào sau mỗi chuỗi. Xem ví dụ bên dưới:


 l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc


10. Hợp nhất từ điển với {**d1, **d2} (Python 3.5+)

Cách dễ nhất để hợp nhất các từ điển là sử dụng toán tử giải nén ( ** ). Cú pháp của phương thức này trông giống như sau:


 {**dict1, **dict2, **dict3}


Dưới đây là một ví dụ để hiểu rõ hơn về phương pháp này:


 d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}


11. Đơn giản hóa câu lệnh if với if x in list

Giả sử chúng ta có một danh sách với các màu chính là đỏ, lục và lam. Và ở đâu đó trong mã của chúng ta, chúng ta có một biến mới có màu, vì vậy c = red. Sau đó, chúng ta sẽ xem đây có phải là một trong những màu cơ bản của chúng ta hay không. Tất nhiên, chúng tôi có thể kiểm tra điều này với từng mục trong danh sách của chúng tôi như sau:


 colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color")


Tuy nhiên, điều này có thể trở nên khá mất thời gian và chúng ta có thể dễ dàng mắc lỗi, chẳng hạn như nếu chúng ta có lỗi đánh máy ở đây là màu đỏ. Sẽ đơn giản hơn và thích hợp hơn là chỉ sử dụng biểu thức nếu x trong danh sách:


 colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color")


Sự kết luận

Python là một ngôn ngữ lập trình được sử dụng rộng rãi và bằng cách sử dụng các mẹo và thủ thuật ở trên, bạn có thể trở thành một lập trình viên Python tốt hơn.


Tôi hy vọng bài viết này hữu ích. Hãy đọc tiếp!