十个Python小技巧总结

本文整理了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.相比普通类有更多的优点。

  1. 最少的代码量
  2. 默认实现了__eq____repr__接口,可以直接比较数据大小和打印数据
  3. 要求类型标注,降低了代码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 <module>
#     pos.name = "Stockholm"
#   File "<string>", 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
  1. set(test)返回去重以后的元素值
  2. max函数获取最大值,比较的key是元素出现的次数
  3. 最终统计出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()
1_JAQfXWEmuu-9Cvvd5LZPpg.gif

参考文章


  1. 30 Python Best Practices, Tips, And Tricks

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容