本文整理了Python的10个小技巧[1].文章参考了30 Python Best Practices, Tips, And Tricks.有些技巧或建议挺不错的。
更多内容可以关注个人博客
1. 检查Python的最低版本的方法
你可以在代码中检查Python的版本,以确保别人正常运行你的代码。
import sys
if not sys.version_info > (2, 7):
# berate your user for running a 10 year
# python version
elif not sys.version_info >= (3, 5):
# Kindly tell your user (s)he needs to upgrade
# because you're using 3.5 features
2. 检查对象的内存使用情况
直接使用sys.getsizeof
函数
import sys
mylist = range(0, 10000)
print(sys.getsizeof(mylist))
# 48
为什么是48bytes,这是因为range函数返回的是一个类,用起来像是列表,但是比列表更加高效的利用内存。
可以使用列表展开式来比较内存使用情况
import sys
myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))
# 87632
3. 使用数据类
自从Python3.7以后,提供了数据类data classes
.相比普通类有更多的优点。
- 最少的代码量
- 默认实现了
__eq__
和__repr__
接口,可以直接比较数据大小和打印数据 - 要求类型标注,降低了代码bug的可能性。
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card = Card("Q", "hearts")
print(card == card)
# True
print(card.rank)
# 'Q'
print(card)
Card(rank='Q', suit='hearts')
实现数据不可改变的数据类
from dataclasses import dataclass
@dataclass(frozen=True)
class Position:
name: str
lon: float = 0.0
lat: float = 0.0
pos = Position('Oslo', 10.8, 59.9)
print(pos.name)
pos.name = "Stockholm" # IDE直接会提示报错
# Traceback (most recent call last):
# File "/Users/vincent/Documents/pyhome/demo2.py", line 14, in
# pos.name = "Stockholm"
# File "", line 3, in __setattr__
# dataclasses.FrozenInstanceError: cannot assign to field 'name'
详细更多使用可以参考这里
4. 交换变量
有一次面试的时候碰到了这个问题。“如何在不引入第三个变量的情况下,交换两个变量的值”。对于Python实在太友好了,一行代码就能搞定。
a = 1
b = 2
a, b = b, a
print (a)
# 2
print (b)
# 1
5. 合并字典数据
自从Python3.5合并字典就非常的容易了。
dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = { **dict1, **dict2 }
print (merged)
# {'a': 1, 'b': 3, 'c': 4}
如果碰到重复的key,之前的key对用的值将会被覆盖。
6. Emoji的使用
安装emoji包
pip3 install emoji
import emoji
result = emoji.emojize('Python is :thumbs_up:')
print(result)
# 'Python is '
# You can also reverse this:
result = emoji.demojize('Python is ')
print(result)
# 'Python is :thumbs_up:'
7. 反转字符串和列表
你可以利用切片访问的方式,实现反转字符串和列表,只要将步长设为-1即可。
revstring = "abcdefg"[::-1]
print(revstring)
# 'gfedcba'
revarray = [1, 2, 3, 4, 5][::-1]
print(revarray)
# [5, 4, 3, 2, 1]
8. 从列表或字符串中获取唯一元素(元素去重)
通过set
函数创建一个set
集合,就能实现元素去重。
mylist = [1, 1, 2, 3, 4, 5, 5, 5, 6, 6]
print (set(mylist))
# {1, 2, 3, 4, 5, 6}
# And since a string can be treated like a
# list of letters, you can also get the
# unique letters from a string this way:
print (set("aaabbbcccdddeeefff"))
# {'a', 'b', 'c', 'd', 'e', 'f'}
9. 找到出现次数最多的元素值
test = [1, 2, 5, 3, 5, 4, 2, 2, 5, 3, 1, 4, 5, 4, 5, 4, 5, 10]
print(max(set(test), key = test.count))
# 5
- set(test)返回去重以后的元素值
- max函数获取最大值,比较的key是元素出现的次数
- 最终统计出set(test)中出现次数最多的元素值
10. 创建进度条
可以使用progress
包快速创建进度条
pip3 install progress
from progress.bar import Bar
import time
bar = Bar('Processing', max=20)
for i in range(20):
# Do some work
time.sleep(0.2)
bar.next()
bar.finish()
参考文章
-
30 Python Best Practices, Tips, And Tricks ↩