30个Python优秀实践和技巧,你值得拥有~
副标题[/!--empirenews.page--]
温馨提示:官方宣布自2020年1月一日起将不再支持Python2。这份指南里的大多数例子也只在Python3中适用。如果您还在使用Python2.7,赶快更新吧。如果您使用的是苹果电脑,可以使用Homebrew轻松升级。 2. 检查Python的最低要求版本 您可以直接使用代码来查看Python版本,确保将来不会出现脚本和Python版本不兼容的情况发生。请看示例: ifnot sys.version_info > (2, 7):
# berate your user for running a 10 year
# python version
elifnot sys.version_info >= (3, 5):
# Kindly tell your user (s)he needs to upgrade
# because you're using 3.5 features viewrawcheck_python_version.py hosted with ❤ by GitHub 3. 使用IPython 作者截图 实际上,IPython是一个增强的shell。自动完成功能已足以令人惊叹,但它还有更多功能。我非常喜欢内置的魔术命令。以下是一些例子: %cd -用于更改当前工作目录 编辑-打开编辑器,并执行您在关闭编辑器后键入的代码 %env — 展示当前环境变量 %pip install [pkgs] — 在交互环境下安装包 %time 和 %timeit — 计算Python代码的执行时间 另一个有用的功能是引用前一个命令的输出。In和Out是实际的对象。您可以通过使用Out[3]来进行第三个命令的输出。 下载Python命令安装Ipython: pip3install ipython 4. 列表推导 列表推导可以替换丑陋的用于填充列表的for循环。列表推导的基本语法是: [expression for item in list if conditional ] 这是一个最基本的例子,使用数字序列填充列表: mylist = [i for i inrange(10)]
print(mylist)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] viewrawlist_comprehensions_1.py hostedwith ❤ by GitHub 同时你还可以用这种表达进行数学运算: squares = [x**2for x inrange(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] viewrawlist_comprehensions_2.py hostedwith ❤ by GitHub 甚至额外创建一个新函数: defsome_function(a):
return (a +5) /2
my_formula = [some_function(i) for i inrange(10)]
print(my_formula)
# [2, 3, 3, 4, 4, 5, 5, 6, 6, 7] viewrawlist_comprehensions_3.py hostedwith ❤ by GitHub 最终,你可以使用“if”来过滤列表。在这个例子中,只保留了能被2整除的值 filtered = [i for i inrange(20) if i%2==0]
print(filtered)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] viewrawlist_comprehensions_4.py hosted with ❤ by GitHub 5.检查对象的内存使用 使用 sys.getsizeof(),可以检查对象的记忆内存: import sys
mylist =range(0, 10000)
print(sys.getsizeof(mylist))
# 48 viewrawcheck_memory_usage_1.py hostedwith ❤ by GitHub 为什么这样一个巨大的列表仅占48字节内存? 这是因为range函数返回的类只表现为一个列表。范围比使用实际的数字列表更节省内存。 你可以自己使用列表推导创建同一范围内的实际数字列表: import sys
myreallist = [x for x inrange(0, 10000)]
print(sys.getsizeof(myreallist))
# 87632 viewrawcheck_memory_usage_2.py hosted with ❤ by GitHub 6. 返回多个值 Python中的函数可以返回多个变量,而无需字典、列表或类。它的工作原理如下: defget_user(id):
# fetch user from database
# ....
return name, birthdate
name, birthdate = get_user(4) viewrawreturn_multiple_variables.py hosted with ❤ by GitHub 对于有限数量的返回值,这是可以的。但是任何超过3个值的内容都应该放到一个(data)类中。 7. 使用数据类 从3.7版开始,Python提供了数据类。与常规类或其他替代方法(如返回多个值或字典)相比,有几个优点: 一个数据类需要最少的代码 可以比较数据类,因为已经实现了_eq__ 您以轻易打印一个数据类进行调试,因为也实现了_repr__ 数据类需要类型提示,减少了出错几率 下面是一个数据类的例子: from dataclasses import dataclass
@dataclass
classCard:
rank: str
suit: str
card = Card("Q", "hearts")
print(card == card)
# True
print(card.rank)
# 'Q'
print(card)
Card(rank='Q', suit='hearts' viewrawdataclass.py hosted with ❤ by GitHub 点击这里查看高阶指南 。 8. 变量交换 一个小技巧就可以省略数行代码。 a =1
b =2
a, b = b, a
print (a)
# 2
print (b)
# 1 viewrawin_place_variable_swapping.py hosted with ❤ by GitHub 9. 合并字典(Python3.5+) 自Python3.5 以来,合并字典更为简便 dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = { **dict1, **dict2 }
print (merged)
# {'a': 1, 'b': 3, 'c': 4} viewrawmerging_dicts.py hostedwith ❤ by GitHub 如果有重叠的值,来自第一个字典的值将被覆盖。 10. 标题大小写 这只是其中一种有趣的玩法: mystring ="10 awesome python tricks"
print(mystring.title())
'10 Awesome Python Tricks' viewrawstring_to_titlecase.py hosted with ❤ by GitHub 11. 切割字符串至列表 可以将字符串拆分为字符串列表。在下例中,根据空格切割 mystring ="The quick brown fox"
mylist = mystring.split(' ')
print(mylist)
# ['The', 'quick', 'brown', 'fox'] viewrawstring_to_list.py hosted with ❤ by GitHub 12. 从字符串列表中创建一个字符串 与上一个技巧正好相反,在本例中,从字符串列表中创建一个字符串,并在单词间输入空格: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |