Hướng dẫn 30 python tricks - 30 thủ thuật trăn

Trong khi lập trình việc sử dụng các tips và trick giúp bạn rút ngắn thời gian và năng suất hơn, sau đây VniTeach xin giới thiệu tuyển tập trọn bộ tips và tricks trong lập trình Python rất hữu ích sau.

Show
Hướng dẫn 30 python tricks - 30 thủ thuật trăn
Lập trình Python

1. Hoán đổi giá trị của 2 biến

x, y = 10, 5
print(x,y)
x, y = y, x
print(x,y)

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

Khi đó kết quả sẽ là:

3. Tạo một xâu từ các phần tử của danh sách

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

import os
import socket
  
print(os)
print(socket)

Khi đó kết quả sẽ là:


2. Đảo ngược xâu

def x():
    return 1, 2, 3, 4
a, b, c, d = x()
  
print(a, b, c, d)

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]
print(max(set(test), key = test.count))

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

import sys
x = 1
print(sys.getsizeof(x))

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

n = 2
a = "Ha Noi Viet Nam"
print(a * n)

Khi đó kết quả sẽ là:


Ha Noi Viet NamHa Noi Viet Nam

2. Đảo ngược xâu (in hoa chữ đầu, xóa các dấu cách dư)

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
0

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
1

Khi đó kết quả sẽ là:

2. Đảo ngược xâu

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
2

Khi đó kết quả sẽ là:

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
3

3. Tạo một xâu từ các phần tử của danh sách

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
4

4. Kết hợp phép toán so sánh

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
5

1   Introduction

Kể từ khi tôi bắt đầu học Python, tôi quyết định duy trì một danh sách "thủ thuật" thường xuyên. Bất cứ khi nào tôi nhìn thấy một đoạn mã (trong một ví dụ, trên Stack Overflow, trong phần mềm nguồn mở, v.v.) khiến tôi nghĩ rằng "Thật tuyệt! Tôi không biết bạn có thể làm điều đó!" Tôi đã thử nghiệm với nó cho đến khi tôi hiểu nó và sau đó thêm nó vào danh sách. Bài đăng này là một phần của danh sách đó, sau khi dọn dẹp. Nếu bạn là một lập trình viên Python có kinh nghiệm, rất có thể bạn đã biết hầu hết những điều này, mặc dù bạn vẫn có thể tìm thấy một vài điều mà bạn không biết. Nếu bạn là một lập trình viên C, C ++ hoặc Java đang học Python, hoặc chỉ là thương hiệu mới với lập trình, thì bạn có thể thấy khá nhiều trong số chúng có ích một cách đáng ngạc nhiên, như tôi đã làm.

Mỗi tính năng thủ thuật hoặc ngôn ngữ chỉ được thể hiện thông qua các ví dụ, không có lời giải thích. Mặc dù tôi đã cố gắng hết sức để làm cho các ví dụ rõ ràng, một số trong số chúng vẫn có thể xuất hiện khó hiểu tùy thuộc vào mức độ quen thuộc của bạn. Vì vậy, nếu một cái gì đó vẫn không có ý nghĩa sau khi xem xét các ví dụ, tiêu đề sẽ đủ rõ ràng để cho phép bạn sử dụng Google để biết thêm thông tin về nó.

Danh sách này được đặt hàng rất gần như khó khăn, với các tính năng và thủ thuật ngôn ngữ dễ dàng hơn và thường được biết đến trước.

Một bảng nội dung được đưa ra ở cuối.

Ngày 9 tháng 4 năm 2014 Cập nhật: Như bạn có thể thấy bài viết đã phát triển với 38 mục hiện tại, chủ yếu là nhờ nhận xét từ độc giả. Vì vậy, số 30 trong tiêu đề không còn chính xác. Tuy nhiên, tôi đã chọn để nó như là vì đó là tiêu đề ban đầu mà bài viết được chia sẻ, làm cho nó dễ nhận biết và dễ tìm hơn. As you can see the article has been growing with currently 38 items in it, mostly thanks to comments from readers. As such the number 30 in the title is no longer accurate. However, I chose to leave it as is since that's the original title the article was shared as, making it more recognizable and easier to find.

Cập nhật ngày 14 tháng 3 năm 2014: Roy Keyes đã đưa ra một gợi ý tuyệt vời về việc biến bài viết này thành một kho lưu trữ GitHub để cho phép người đọc thực hiện các cải tiến hoặc bổ sung thông qua các yêu cầu kéo. Kho lưu trữ hiện đang ở https://github.com/sahands/python-by- example. Hãy thoải mái, thêm cải tiến hoặc bổ sung và gửi yêu cầu kéo. Tôi sẽ cập nhật trang này định kỳ với các bổ sung mới. Roy Keyes made a great suggestion of turning this article into a GitHub repository to allow readers to make improvements or additions through pull requests. The repository is now at https://github.com/sahands/python-by-example. Feel free to fork, add improvements or additions and submit pull requests. I will update this page periodically with the new additions.

Cập nhật ngày 8 tháng 3 năm 2014: Bài viết này đã tạo ra rất nhiều cuộc thảo luận tốt về Reddit, tin tức tin tức, và trong các bình luận dưới đây, với nhiều độc giả cho thấy sự thay thế và cải tiến tuyệt vời. Tôi đã cập nhật danh sách dưới đây để bao gồm nhiều cải tiến được đề xuất và thêm một vài mục mới dựa trên các đề xuất khiến tôi có một trong những điều "tuyệt! Tôi không biết bạn có thể làm điều đó!" khoảnh khắc. Cụ thể, tôi không biết về itertools.chain.from_iterable và từ điển. Cũng có một cuộc thảo luận rất thú vị về khả năng của một số kỹ thuật dưới đây dẫn đến khó gỡ lỗi hơn. Tôi nói về nó là theo như tôi có thể thấy, không có mục nào dưới đây vốn khó để gỡ lỗi hơn. Nhưng tôi chắc chắn có thể thấy làm thế nào chúng có thể được đưa đi quá xa, dẫn đến khó gỡ lỗi, duy trì và hiểu mã. Sử dụng phán đoán tốt nhất của bạn và nếu cảm giác như mã của bạn ngắn và thông minh vượt xa mức độ dễ đọc và có thể duy trì của nó, thì hãy phá vỡ nó và đơn giản hóa nó. Ví dụ, tôi nghĩ rằng sự hiểu biết danh sách có thể rất dễ đọc và khá dễ gỡ lỗi và duy trì. Nhưng một danh sách hiểu được bên trong một danh sách hiểu được một danh sách khác sau đó được chuyển để lập bản đồ và sau đó đến itertools.chain? Có lẽ không phải là ý tưởng tốt nhất! This article generated a lot of good discussion on Reddit, Hacker News, and in the comments below, with many readers suggesting great alternatives and improvements. I have updated the list below to include many of the improvements suggested, and added a few new items based on suggestions that made me have one of those "Cool! I didn't know you could do that!" moments. In particular, I did not know about itertools.chain.from_iterable, and dictionary comprehensions. There was also a very interesting discussion about the possibility of some of the techniques below leading to harder to debug code. My say on it is that as far as I can see, none of the items below are inherently harder to debug. But I can definitely see how they can be taken too far, resulting in hard to debug, maintain and understand code. Use your best judgment and if it feels like how short and smart your code is is outweighing how readable and maintainable it is, then break it down and simplify it. For example, I think list comprehensions can be very readable and rather easy to debug and maintain. But a list comprehension inside another list comprehension that is then passed to map and then to itertools.chain? Probably not the best idea!

1.1   Unpacking

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
6

1.2 & nbsp; & nbsp; & nbsp; giải nén các biến đổi

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
7

1.3 & nbsp; & nbsp; & nbsp; mở rộng mở rộng (chỉ Python 3)

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
8

1.4 & nbsp; & nbsp; & nbsp; lập chỉ mục tiêu cực

a = ["Hello", "Viet", "Nam"]
print(" ".join(a))
9

1.5 & nbsp; & nbsp; & nbsp; danh sách các lát (A [bắt đầu: kết thúc])

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
0

1.6 & nbsp; & nbsp; & nbsp; danh sách các lát cắt có lập chỉ mục âm

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
1

1.7 & nbsp; & nbsp; & nbsp; danh sách các lát có bước (A [bắt đầu: kết thúc: bước])

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
2

1.8 & nbsp; & nbsp; & nbsp; danh sách các lát có bước âm

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
3

1.9 & nbsp; & nbsp; & nbsp; danh sách phân công lát cắt

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
4

1.10 & nbsp; & nbsp; & nbsp; đặt tên (lát (bắt đầu, kết thúc, bước)))

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
5

1.11 & nbsp; & nbsp; & nbsp; lặp lại chỉ mục danh sách và các cặp giá trị (liệt kê)

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
6

1.12 & nbsp; & nbsp; & nbsp; lặp lại khóa từ điển và các cặp giá trị (Dict.IterItems)

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
7

Lưu ý: Sử dụng dict.items trong Python 3.

1.13 & nbsp; & nbsp; & nbsp; zipping và giải nén danh sách và lặp lại

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
8

1.14 & nbsp; & nbsp; & nbsp; nhóm các mục danh sách liền kề sử dụng zip

n = 10
result = 1 < n < 20
print(result)
result = 1 > n <= 9
print(result)
9

1.15 & nbsp; & nbsp; & nbsp; windows trượt (nn -grams) bằng cách sử dụng zip và iteratorsnn -grams) using zip and iterators

import os
import socket
  
print(os)
print(socket)
0

1.16 & nbsp; & nbsp; & nbsp; đảo ngược một từ điển bằng cách sử dụng zip

import os
import socket
  
print(os)
print(socket)
1

1.17 & nbsp; & nbsp; & nbsp; danh sách làm phẳng:

import os
import socket
  
print(os)
print(socket)
2

Lưu ý: Theo tài liệu của Python về SUM, itertools.chain.from_iterable là phương pháp ưa thích cho việc này.

1.18 & nbsp; & nbsp; & nbsp; biểu thức máy phát điện

import os
import socket
  
print(os)
print(socket)
3

1.19 & nbsp; & nbsp; & nbsp; toàn bộ từ điển

import os
import socket
  
print(os)
print(socket)
4

1.20 & nbsp; & nbsp; & nbsp; đảo ngược từ điển bằng cách sử dụng từ điển hiểu từ điển

import os
import socket
  
print(os)
print(socket)
5

1.21 & nbsp; & nbsp; & nbsp; được đặt tên là bộ dữ

import os
import socket
  
print(os)
print(socket)
6

1.22 & nbsp; & nbsp; & nbsp; kế thừa từ các bộ dữ liệu được đặt tên:

import os
import socket
  
print(os)
print(socket)
7

1.23 & nbsp; & nbsp; & nbsp; đặt và đặt các hoạt động

import os
import socket
  
print(os)
print(socket)
8

1.24 & NBSP; & NBSP; & NBSP; MULTISETS VÀ MULTISET Operations (Collections.Count)

import os
import socket
  
print(os)
print(socket)
9

1.25 & nbsp; & nbsp; & nbsp; hầu hết các yếu tố phổ biến trong một ITEBELD (bộ sưu tập.


0

1.26 & nbsp; & nbsp; & nbsp; hàng đợi kết thúc kép (com Collections.deque)


1

1.27 & nbsp; & nbsp; & nbsp; hàng đợi kết thúc kép với độ dài tối đa (comcands.deque)


2

1.28 & nbsp; & nbsp; & nbsp; từ điển được đặt hàng (bộ sưu tập.ordereddict)


3

1.29 & nbsp; & nbsp; & nbsp; từ điển mặc định (comcands.defaultdict)


4

1.30 & nbsp; & nbsp; & nbsp; sử dụng từ điển mặc định để đại diện cho các cây đơn giản


5

(Xem https://gist.github.com/hrldcpr/2012250 để biết thêm về điều này.)

1.31 & nbsp; & nbsp; & nbsp; các đối tượng ánh xạ đến số đếm duy nhất (comcands.defaultdict)


6

1.32 & nbsp; & nbsp; & nbsp; các yếu tố lớn nhất và nhỏ nhất (heapq.nlargest và heapq.nsmallest)


7

1.38 & nbsp; & nbsp; & nbsp; khởi động một máy chủ http tĩnh trong bất kỳ thư mục nào


8

1.39 & nbsp; & nbsp; & nbsp; tìm hiểu Zen of Python


9

1.40 & nbsp; & nbsp; & nbsp; sử dụng niềng răng kiểu c thay vì thụt vào để biểu thị phạm vi

def x():
    return 1, 2, 3, 4
a, b, c, d = x()
  
print(a, b, c, d)
0

2 & nbsp; & nbsp; & nbsp; bảng nội dungTable of contents