Hướng dẫn how do you code better in python? - làm thế nào để bạn viết mã tốt hơn trong python?

Nâng cao kỹ năng Python của bạn

Tìm hiểu cách viết mã theo cách Pythonic

Ảnh của Christopher Gower trên unplash

Mã hóa là thú vị, và mã hóa trong Python thậm chí còn thú vị hơn vì có nhiều cách khác nhau để thực hiện các chức năng giống nhau. Tuy nhiên, hầu hết thời gian, có những triển khai ưa thích, mà một số người gọi là Pythonic. Một đặc điểm chung của các triển khai Pythonic này là sự gọn gàng và tính đồng nhất của mã.

Lập trình bằng Python hoặc bất kỳ ngôn ngữ mã hóa nào không phải là khoa học tên lửa, và nó chủ yếu là về các kỹ năng chế tạo. Nếu bạn cố tình thử mã hóa pythonic, các kỹ thuật này sẽ sớm trở thành một phần của bộ công cụ của bạn và bạn sẽ thấy nó ngày càng tự nhiên hơn khi sử dụng chúng trong dự án của bạn. Vì vậy, hãy để khám phá một số thủ thuật đơn giản này, mà tôi hy vọng bạn sẽ tìm thấy hữu ích.

1. Lập chỉ mục tiêu cực

Mọi người thích làm việc với các chuỗi vì chúng tôi biết thứ tự của các yếu tố và chúng tôi có thể vận hành các yếu tố này theo thứ tự khôn ngoan. Trong Python, chuỗi, bộ dữ liệu và danh sách là các loại dữ liệu trình tự phổ biến nhất. Chúng ta có thể truy cập các mục riêng lẻ bằng cách sử dụng lập chỉ mục. Giống như các ngôn ngữ lập trình chính khác, Python hỗ trợ lập chỉ mục dựa trên 0, trong đó chúng tôi truy cập phần tử đầu tiên bằng số 0 trong một cặp dấu ngoặc vuông. Bên cạnh đó, chúng ta cũng có thể sử dụng các đối tượng lát cắt để truy xuất các phần tử cụ thể của chuỗi, như được hiển thị trong các ví dụ mã bên dưới.

>>> # Positive Indexing
... numbers = [1, 2, 3, 4, 5, 6, 7, 8]
... print("First Number:", numbers[0])
... print("First Four Numbers:", numbers[:4])
... print("Odd Numbers:", numbers[::2])
...
First Number: 1
First Four Numbers: [1, 2, 3, 4]
Odd Numbers: [1, 3, 5, 7]

Tuy nhiên, Python tiến thêm một bước bằng cách hỗ trợ lập chỉ mục tiêu cực. Cụ thể, chúng ta có thể sử dụng -1 để chỉ phần tử cuối cùng trong chuỗi và đếm các mục ngược. Ví dụ, phần cuối nhưng một phần tử có chỉ số -2 và như vậy. Điều quan trọng, việc lập chỉ mục âm cũng có thể hoạt động với chỉ số dương trong đối tượng lát cắt.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol

2. Kiểm tra độ trống của các thùng chứa

Container đề cập đến các loại dữ liệu container có thể lưu trữ dữ liệu khác. Một số thùng chứa tích hợp thường được sử dụng là bộ dữ liệu, danh sách, từ điển và bộ. Khi chúng tôi xử lý các container này, chúng tôi thường cần kiểm tra xem chúng có chứa bất kỳ yếu tố nào trước khi chúng tôi thực hiện các hoạt động bổ sung không. Thật vậy, chúng ta có thể kiểm tra độ dài của các container này, tương ứng với số lượng các mặt hàng được lưu trữ. Khi độ dài bằng không, thùng chứa trống. Dưới đây cho bạn thấy một ví dụ tầm thường.

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty

Tuy nhiên, nó không phải là cách pythonic nhất. Thay vào đó, chúng ta chỉ có thể kiểm tra chính container, sẽ đánh giá

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2 khi nó chứa các yếu tố. Mặc dù mã sau đây cho bạn thấy các loại dữ liệu container chính, nhưng việc sử dụng như vậy cũng có thể áp dụng cho các chuỗi (nghĩa là, bất kỳ chuỗi không trống nào cũng là
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2).

>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.

3. Tạo danh sách các chuỗi với Split ()

Chúng ta thường sử dụng các chuỗi làm số nhận dạng cho các đối tượng cụ thể. Ví dụ, chúng ta có thể sử dụng các chuỗi cho các khóa trong từ điển. Trong một dự án khoa học dữ liệu, các chuỗi thường là tên cột cho dữ liệu. Khi chúng tôi chọn nhiều cột, chúng tôi chắc chắn cần tạo một danh sách các chuỗi. Thật vậy, chúng ta có thể tạo các chuỗi bằng cách sử dụng nghĩa đen trong một danh sách. Tuy nhiên, chúng tôi sẽ phải viết các cặp trích dẫn để gửi kèm theo từng chuỗi, đây là loại tẻ nhạt đối với chúng tôi là những người lười biếng. Do đó, tôi đã thích tạo một danh sách các chuỗi bằng cách tận dụng phương thức chuỗi ____ ____24, như được hiển thị trong đoạn mã bên dưới.

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']

Như được hiển thị ở trên, phương thức

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
4 theo mặc định sử dụng các khoảng trắng làm dấu phân cách và tạo một danh sách các chuỗi từ chuỗi. Đáng chú ý, khi bạn tạo một danh sách các chuỗi với một số yếu tố chứa không gian, bạn có thể tùy ý sử dụng một loại phân tách khác (ví dụ: dấu phẩy).

Việc sử dụng như vậy được lấy cảm hứng từ một số chức năng tích hợp. Ví dụ: khi bạn tạo một lớp Tuple có tên, chúng ta có thể làm điều này:

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
6. Danh sách các chuỗi chỉ định các thuộc tính của Tuple. Tuy nhiên, nó cũng được hỗ trợ tự nhiên bằng cách xác định lớp theo cách này:
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
7. Đối với một trường hợp khác, việc tạo một lớp Enum hỗ trợ các giải pháp thay thế tương tự.

4. Biểu hiện ternary

Trong nhiều trường hợp sử dụng, chúng ta cần xác định các biến với các giá trị cụ thể dựa trên các điều kiện và chúng ta có thể chỉ cần sử dụng câu lệnh IF khác để kiểm tra điều kiện. Tuy nhiên, nó đòi hỏi một số dòng mã. Nếu chúng tôi chỉ xử lý việc gán một biến, chúng tôi có thể muốn sử dụng biểu thức ternary, kiểm tra điều kiện và hoàn thành bài tập chỉ bằng một dòng mã. Bên cạnh đó, nó có một hình thức ngắn hơn, làm cho mã thậm chí còn ngắn gọn hơn. Xem xét các ví dụ sau.

# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"

Đôi khi, chúng ta có thể nhận được một số dữ liệu từ một hàm được xác định và chúng ta có thể tận dụng điều này và viết một hoạt động tốc ký của biểu thức ternary, như được hiển thị bên dưới.

# Another possible scenario
# You got a reward amount from somewhere else, but don't know if None/0 or not
reward = reward_known or "500 dollars"
# The above line of code is equivalent to below
reward = reward_known if reward_known else "500 dollars"

5. Với câu lệnh cho đối tượng tệp

Chúng ta thường cần đọc dữ liệu từ các tệp và ghi dữ liệu vào các tệp. Cách phổ biến nhất là chỉ cần mở một tệp bằng hàm

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
8 tích hợp, tạo ra một đối tượng tệp mà chúng ta có thể vận hành. Bạn đã gặp phải vấn đề sau đây trước đây chưa?

>>> # Create a text file that has the text: Hello World!
...
... # Open the file and append some new data
... text_file0 = open("hello_world.txt", "a")
... text_file0.write("Hello Python!")
...
... # Open the file again for something else
... text_file1 = open("hello_world.txt")
... print(text_file1.read())
...
Hello World!

Trong đoạn mã trước, chúng tôi bắt đầu với một tệp văn bản, có văn bản của Hello Hello World! Sau đó chúng tôi nối một số dữ liệu mới vào tệp. Tuy nhiên, sau một thời gian, chúng tôi muốn làm việc trên tệp một lần nữa; Tệp văn bản vẫn có dữ liệu cũ khi chúng tôi đọc nó. Nói cách khác, các văn bản được thêm vào không được bao gồm trong tệp văn bản. Tại sao điều đó có thể xảy ra?

Nó khác vì chúng tôi đã đóng đối tượng tệp ngay từ đầu. Không đóng tệp, các thay đổi có thể được lưu. Thật vậy, chúng ta có thể gọi rõ ràng phương thức

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
9 trên đối tượng tệp. Tuy nhiên, chúng tôi có thể thực hiện điều này bằng cách sử dụng câu lệnh của With với câu lệnh, sẽ tự động đóng đối tượng tệp cho chúng tôi, như được hiển thị bên dưới. Khi chúng tôi thực hiện thực hiện hoạt động với tệp, chúng tôi có thể xác minh rằng tệp được đóng bằng cách truy cập thuộc tính đối tượng tệp
>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
0.

>>> with open("hello_world.txt", "a") as file:
... file.write("Hello Python!")
...
... with open("hello_world.txt") as file:
... print(file.read())
...
... print("Is file close?", file.closed)
...
Hello World!Hello Python!Hello Python!
Is file close? True

Trong một thuật ngữ tổng quát hơn, câu nói với tuyên bố là cú pháp sử dụng các nhà quản lý ngữ cảnh trong Python. Ví dụ trước liên quan đến hoạt động của tệp vì các tệp được chia sẻ tài nguyên và chúng tôi chịu trách nhiệm phát hành các tài nguyên này. Các nhà quản lý bối cảnh có thể giúp chúng tôi hoàn thành công việc. Như đã hiển thị trước đó, sau khi hoạt động tệp kết thúc, tệp sẽ tự động đóng bằng cách sử dụng câu lệnh With. Bạn có thể tìm hiểu thêm về quản lý bối cảnh trong bài viết trước của tôi.

6. Đánh giá nhiều điều kiện

Thông thường chúng ta cần đánh giá nhiều điều kiện. Có một số kịch bản có thể. Đối với các giá trị số, chúng ta có thể có nhiều so sánh cho cùng một biến. Trong trường hợp này, chúng ta có thể chuỗi các so sánh này.

# Multiple Comparisons
# The typical way
if a < 4 and a > 1:
# do something here
# Do this instead
if 1 < a < 4:
# do somerthing here

Trong một số kịch bản khác, chúng ta có thể có nhiều so sánh bình đẳng và chúng ta có thể tận dụng các kỹ thuật sau đây bằng cách sử dụng từ khóa để kiểm tra thành viên.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
0

Một kỹ thuật khác là việc sử dụng các chức năng

>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
1 và
>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
2 tích hợp để đánh giá nhiều điều kiện. Cụ thể, hàm
>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
1 sẽ đánh giá là
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2 khi các phần tử trong IT có thể là tất cả
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2, và do đó hàm này phù hợp để thay thế một loạt các so sánh logic và logic. Mặt khác, hàm
>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
2 sẽ đánh giá là
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2 khi bất kỳ phần tử nào trong ITBER có thể là
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2, và do đó, nó phù hợp để thay thế một loạt các hoạt động logic hoặc logic. Ví dụ thích hợp được hiển thị dưới đây.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
1

7. Sử dụng các giá trị mặc định trong khai báo chức năng

Trong hầu hết tất cả các dự án Python, hầu hết các mã liên quan đến việc tạo và gọi các chức năng. Nói cách khác, chúng tôi liên tục xử lý các khai báo chức năng và tái cấu trúc. Trong nhiều tình huống, chúng ta cần gọi một chức năng nhiều lần. Tùy thuộc vào các bộ tham số khác nhau, hàm sẽ hoạt động hơi khác nhau. Tuy nhiên, đôi khi một bộ tham số có thể thường được sử dụng so với các tham số khác, trong trường hợp đó, chúng ta nên xem xét việc thiết lập các giá trị mặc định khi chúng ta khai báo các chức năng. Hãy xem xét các ví dụ tầm thường sau đây.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
2

Một điều cần lưu ý là nếu bạn xử lý các loại dữ liệu có thể thay đổi (ví dụ: danh sách, bộ) khi bạn đặt giá trị mặc định, hãy đảm bảo rằng bạn sử dụng

>>> def check_container_empty(container):
... if container:
... print(f"{container} has elements.")
... else:
... print(f"{container} doesn't have elements.")
...
... check_container_empty([1, 2, 3])
... check_container_empty(set())
... check_container_empty({"zero": 0, "one": 1})
... check_container_empty(tuple())
...
[1, 2, 3] has elements.
set() doesn't have elements.
{'zero': 0, 'one': 1} has elements.
() doesn't have elements.
9 thay vì hàm tạo (ví dụ: arg_name = []). Bởi vì Python tạo ra đối tượng chức năng nơi nó được xác định, việc cung cấp danh sách trống sẽ bị mắc kẹt với đối tượng chức năng. Nói cách khác, đối tượng hàm won won được tạo ra khi bạn gọi nó. Thay vào đó, bạn sẽ xử lý cùng một đối tượng chức năng, bao gồm cả đối tượng đột biến mặc định ban đầu của nó, trong bộ nhớ, có thể dẫn đến các hành vi bất ngờ (xem ở đây để thảo luận thêm).

8. Sử dụng bộ đếm để đếm phần tử

Khi chúng ta có nhiều mục trong danh sách, tuple hoặc chuỗi (ví dụ: nhiều ký tự), chúng ta thường muốn đếm số lượng có cho mỗi mục. Để làm điều đó, nó có thể viết một số mã tẻ nhạt cho chức năng này.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
3

Như đã hiển thị ở trên, trước tiên chúng tôi phải tạo một bộ chỉ bao gồm các từ duy nhất. Sau đó, chúng tôi đã lặp lại bộ từ và sử dụng phương thức

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
0 để tìm hiểu các lần xuất hiện của mỗi từ. Tuy nhiên, có một cách tốt hơn để làm điều đó - sử dụng lớp
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
1, được thiết kế để hoàn thành nhiệm vụ đếm này.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
4

Lớp quầy có sẵn trong mô -đun

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
2. Để sử dụng lớp, chúng tôi chỉ cần tạo một trình tạo:
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
3 và mỗi mục sẽ được tính. Như bạn có thể thấy, đối tượng bộ đếm là một đối tượng ánh xạ giống như dict với mỗi khóa tương ứng với mục duy nhất của danh sách từ, trong khi các giá trị là số lượng cho các mục này. Khá ngắn gọn, phải không?

Hơn nữa, nếu bạn quan tâm đến việc tìm ra các mục xảy ra thường xuyên nhất của danh sách từ, chúng ta có thể tận dụng phương thức

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
4 của đối tượng truy cập. Mã sau đây cho bạn thấy cách sử dụng này. Bạn chỉ cần chỉ định một số nguyên (n), sẽ tìm ra các mục N thường xuyên nhất trong danh sách. Theo lưu ý phụ, đối tượng
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
1 cũng sẽ hoạt động với dữ liệu trình tự khác, chẳng hạn như chuỗi và bộ dữ liệu.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
5

9. Sắp xếp với các yêu cầu đơn hàng khác nhau

Sắp xếp các mục trong danh sách là một nhiệm vụ phổ biến trong nhiều dự án. Việc sắp xếp cơ bản nhất dựa trên thứ tự số hoặc chữ cái và chúng ta có thể sử dụng hàm

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
6 tích hợp. Theo mặc định, hàm
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
6 sẽ sắp xếp danh sách (thực tế, nó có thể là bất kỳ điều gì có thể lặp lại) theo thứ tự tăng dần. Nếu chúng tôi chỉ định đối số
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
8 là
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2, chúng tôi có thể nhận các mục theo thứ tự giảm dần. Một số cách sử dụng đơn giản được hiển thị dưới đây.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
6

Bên cạnh các cách sử dụng cơ bản này, chúng tôi có thể chỉ định đối số

# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
0 sao cho các mục phức tạp có thể được sắp xếp, chẳng hạn như danh sách các bộ dữ liệu. Hãy xem xét các ví dụ sau đây cho trường hợp như vậy.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
7

Mã trên cho bạn thấy hai ví dụ sắp xếp nâng cao bằng cách tận dụng hàm Lambda, được truyền cho đối số

# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
0. Cái đầu tiên là sắp xếp các mục bằng cách sử dụng thứ tự giảm dần, trong khi cái thứ hai đang sử dụng thứ tự tăng dần mặc định. Điều gì sẽ xảy ra nếu chúng ta muốn kết hợp hai yêu cầu này? Nếu bạn nghĩ về việc chơi với đối số
>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
8, có lẽ bạn sẽ sủa sai cây, bởi vì nếu bạn đang cố gắng sắp xếp theo nhiều tiêu chí, đối số ngược sẽ áp dụng cho tất cả. Những gì mà thủ thuật sau đó? Xem đoạn mã bên dưới.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
8

Như bạn có thể thấy, bằng cách đặt đối số

>>> # List of strings
... # The typical way
... columns = ['name', 'age', 'gender', 'address', 'account_type']
... print("* Literals:", columns)
...
... # Do this instead
... columns = 'name age gender address account_type'.split()
... print("* Split with spaces:", columns)
...
... # If the strings contain spaces, you can use commas instead
... columns = 'name, age, gender, address, account type'.split(', ')
... print("* Split with commas:", columns)
...
* Literals: ['name', 'age', 'gender', 'address', 'account_type']
* Split with spaces: ['name', 'age', 'gender', 'address', 'account_type']
* Split with commas: ['name', 'age', 'gender', 'address', 'account type']
8 thành
if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
2 hoặc
# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
5, không hoạt động. Thay vào đó, thủ thuật là phủ nhận các lớp, và do đó khi bạn sắp xếp theo thứ tự tăng dần mặc định, điểm số sẽ được sắp xếp đảo ngược vì sự phủ định của các giá trị này. Tuy nhiên, có một cảnh báo cho phương pháp này, bởi vì phủ định chỉ có thể hoạt động với các giá trị số, nhưng không phải là chuỗi.

10. Don Tiết quên Defaultdict

Từ điển là một loại dữ liệu mạnh mẽ cho phép chúng tôi lưu trữ dữ liệu dưới dạng các cặp giá trị khóa. Nó yêu cầu rằng tất cả các phím có thể băm sao cho dưới mui xe, việc lưu trữ các dữ liệu này có thể liên quan đến việc sử dụng bảng băm. Việc thực hiện như vậy cho phép hiệu quả O (1) để truy xuất và chèn dữ liệu. Tuy nhiên, cần lưu ý rằng bên cạnh loại Dict tích hợp, chúng tôi có từ điển thay thế mà chúng tôi có thể sử dụng. Trong số đó, tôi đã muốn thảo luận về loại DefaultDICT. Không giống như loại Dict-in, DefaultDict cho phép chúng tôi đặt chức năng nhà máy mặc định tạo ra một phần tử khi khóa không tồn tại. Bạn có thể không xa lạ với lỗi sau.

>>> # Negative Indexing
... data_shape = (100, 50, 4)
... names = ["John", "Aaron", "Mike", "Danny"]
... hello = "Hello World!"
...
... print(data_shape[-1])
... print(names[-3:-1])
... print(hello[1:-1:2])
...
4
['Aaron', 'Mike']
el ol
9

Giả sử rằng chúng tôi đang xử lý các từ và chúng tôi muốn nhóm các ký tự giống như một danh sách và các danh sách này được liên kết với các ký tự là khóa. Ở đây, một triển khai ngây thơ bằng cách sử dụng loại Dict tích hợp. Đáng chú ý, nó rất quan trọng để kiểm tra xem đối tượng Dict có khóa

# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
6 hay không, bởi vì gọi phương thức
# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
7 có thể tăng ngoại lệ
# The typical way
if score > 90:
reward = "1000 dollars"
else:
reward = "500 dollars"
# Do this instead
reward = "1000 dollars" if score > 90 else "500 dollars"
8 nếu khóa không tồn tại.

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
0

Hãy để xem cách chúng ta có thể sử dụng DefaultDict để viết mã ngắn gọn hơn. Mặc dù ví dụ này là tầm thường, nhưng nó chỉ cung cấp cho bạn một số ý tưởng về lớp DefaultDict, giúp chúng tôi không xử lý các khóa không tồn tại giữa các đối tượng từ điển.

if len(some_list) > 0:
# do something here when the list is not empty
else:
# do something else when the list is empty
1

Kết luận

Bạn có thể biết một số thủ thuật này trước khi đọc bài viết này, nhưng tôi hy vọng bạn vẫn có một sự làm mới tốt về các kỹ năng này. Thực hành các cách sử dụng thành ngữ này trong các dự án của bạn sẽ làm cho mã Python của bạn dễ đọc và hiệu suất hơn.

Đó là nó cho tác phẩm này. Cảm ơn vì đã đọc.