分享15 超级好用得 Python 实用技巧
作者:迟业 发布时间:2023-03-01 06:42:09
目录
01 all or any
02 dir
03 列表(list)推导式
04 pprint
05 repr
06 sh
07 Type hints
08 uuid
09 wikipedia
10 xkcd
11 zip
12 emoji
13 howdoi
14 Jedi
15 **kwargs
01 all or any
Python 语言如此流行的众多原因之一,是因为它具有很好的可读性和表现力。
人们经常开玩笑说 Python 是可执行的伪代码。当你可以像这样写代码时,就很难反驳。
x = [True, True, False]
if any(x):
print("至少有一个True")
if all(x):
print("全是True")
if any(x) and not all(x):
print("至少一个True和一个False")
02 dir
有没有想过如何查看 Python 对象内部查看它具有哪些属性?
在命令行中输入:
dir()
dir("Hello World")
dir(dir)
当以交互方式运行 Python 以及动态探索你正在使用的对象和模块时,这可能是一个非常有用的功能。在这里阅读更多functions
相关内容。
03 列表(list)推导式
关于 Python 编程,我最喜欢的事情之一是它的列表推导式。
这些表达式可以很容易地编写出非常顺畅的代码,几乎与自然语言一样。
numbers = [1,2,3,4,5,6,7]
evens = [x for x in numbers if x % 2 is 0]
odds = [y for y in numbers if y not in evens]
cities = ['London', 'Dublin', 'Oslo']
def visit(city):
print("Welcome to "+city)
for city in cities:
visit(city)
04 pprint
Python 的默认print
函数完成了它的工作。但是如果尝试使用print函数打印出任何大的嵌套对象,其结果相当难看。这个标准库的漂亮打印模块pprint
可以以易于阅读的格式打印出复杂的结构化对象。
这算是任何使用非平凡数据结构的 Python 开发人员的必备品。
import requests
import pprint
url = 'https://randomuser.me/api/?results=1'
users = requests.get(url).json()
pprint.pprint(users)
05 repr
在 Python
中定义类或对象时,提供一种将该对象表示为字符串的“官方”方式很有用。
例如:
>>> file = open('file.txt', 'r')
>>> print(file)
<open file 'file.txt', mode 'r' at 0x10d30aaf0>
这使得调试代码更加容易。将其添加到你的类定义中,如下所示:
class someClass:
def __repr__(self):
return "<some description here>"
someInstance = someClass()
# 打印 <some description here>
print(someInstance)
06 sh
Python 是一种很棒的脚本语言。有时使用标准的 os 和 subprocess 库克可能有点头疼。
该SH库让你可以像调用普通函数一样调用任何程序——对于自动化工作流和任务非常有用。
import sh
sh.pwd()
sh.mkdir('new_folder')
sh.touch('new_file.txt')
sh.whoami()
sh.echo('This is great!')
07 Type hints
Python 是一种动态类型的语言。定义变量、函数、类等时不需要指定数据类型。这允许快速的开发时间。但是,没有什么比由简单地输入问题引起的运行时错误更烦人的了。
从 Python 3.5
开始,你可以选择在定义函数时提供类型提示。
def addTwo(x : Int) -> Int:
return x + 2
我们还可以定义类型别名。
from typing import List
Vector = List[float]
Matrix = List[Vector]
def addMatrix(a : Matrix, b : Matrix) -> Matrix:
result = []
for i,row in enumerate(a):
result_row =[]
for j, col in enumerate(row):
result_row += [a[i][j] + b[i][j]]
result += [result_row]
return result
x = [[1.0, 0.0], [0.0, 1.0]]
y = [[2.0, 1.0], [0.0, -2.0]]
z = addMatrix(x, y)
尽管不是强制性的,但类型注释可以使你的代码更易于理解。
它们还允许你使用类型检查工具,在运行前捕获那些杂散的 TypeError。如果你正在处理大型、复杂的项目,这是很有用的!
08 uuid
通过Python 标准库的 uuid 模块生成通用唯一 ID(或“UUID”)的一种快速简便的方法。
import uuid
user_id = uuid.uuid4()
print(user_id)
这将创建一个随机的 128 位数字,该数字几乎肯定是唯一的。事实上,可以生成超过 2¹²² 种可能的 UUID。不过超过了五个十进制 (或 5,000,000,000,000,000,000,000,000,000,000,000,000)。
在给定的集合中发现重复的概率极低。即使有一万亿个 UUID,重复存在的可能性也远低于十亿分之一。
09 wikipedia
* 有一个很棒的 API,它允许用户以编程方式访问无与伦比的完全免费的知识和信息。在wikipedia模块使访问该API非常方便。
import wikipedia
result = wikipedia.page('freeCodeCamp')
print(result.summary)
for link in result.links:
print(link)
和真实站点一样,该模块提供了多语言支持、页面消歧、随机页面检索,甚至还有一个donate()方法。
10 xkcd
幽默是 Python 语言的一个关键特征,它是以英国喜剧小品剧Python
飞行马戏团命名的。Python 的许多官方文档都引用了该节目最著名的草图。不过,Python 幽默并不仅限于文档。试试运行下面的功能:
import antigravity
11 zip
压轴出场的也是很棒的一个模块。你曾经遇到过需要从两个列表中形成字典吗?
keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))
该zip()内置函数需要一系列可迭代的对象,并返回一个元组列表中。每个元组按位置索引对输入对象的元素进行分组。
你还可以通过调用对象来“解压缩”对象*zip()。
12 emoji
emoji
是日本在无线通信中所使用的视觉情感符号,绘制图画,文字指的则是字符,可用来代表多种表情,如笑脸表示笑、蛋糕表示食物等。在中国大陆,emoji通常叫做“小黄脸”,或者直称emoji
。
# 安装模块
pip install emoji
# 做个尝试
from emoji import emojize
print(emojize(":thumbs_up:"))
13 howdoi
当你使用terminal
终端编程时,通过在遇到问题后会在StackOverflow
上搜索答案,完后会回到终端继续编程,此时有时会不记得你之前查到的解决方案,此时需要重新查看StackOverflow
,但又不想离开终端,那么此时你需要用到这个有用的命令行工具howdoi
。
pip install howdoi
无论你有什么问题,都可以问它,它会尽力回复。
howdoi vertical align css
howdoi for loop in java
howdoi undo commits in git
但请注意——它会重生 StackOverflow
的最佳答案中抓取代码。它可能并不总是提供最有用的信息......
howdoi exit vim
14 Jedi
Jedi 库是一个自动完成和代码分析库。它使编写代码更快、更高效。
除非你正在开发自己的东西 IDE,否则你可能对使用Jedi
作为编辑器插件比较感兴趣。幸运的是,这已经有可用的负载!
15 **kwargs
在学习任何语言时,都会有许多里程碑。使用 Python 并理解神秘的**kwargs
语法可能算作一个重要的里程碑。
字典对象前面的双星号 ****kwargs**
允许你将该字典的内容作为命名参数传递给函数。
字典的关键是参数名称,值是传递给函数的值。你甚至不需要调用它kwargs
!
dictionary = {"a": 1, "b": 2}
def someFunction(a, b):
print(a + b)
return
# 这些做同样的事情:
someFunction(**dictionary)
someFunction(a=1, b=2)
当你想编写可以处理未预先定义的命名参数的函数时,这很有用。
最后:
Python
是一种非常多样化且发展良好的语言,因此肯定会有许多我没有考虑过的功能。如果你想了解更多的python模块,可以点个赞和关注哦
来源:https://juejin.cn/post/7043970181000855565
猜你喜欢
- 我们今天主要描述的是php和MySQL转义字符,我们大家都知道php和MySQL转义字符的实际应用比例还是占为多数的,如果你对这一技术,心存
- $forceUpdate()的使用在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。那在vue框架中,如果data中有一个
- myisam_max_[extra]_sort_file_size足够大delay_key_write减少io,提高写入性能bulk_ins
- 几年前,看到一台湾人写的一段程序(好像是《日语基础》),在网页上实现音视频与文字的同步播放(就是音视频播到哪部分,相应的文字就亮显,点击某一
- <?php /** * Global Function * * @a
- Microsoft SQL Server 2005 Mobile Edition 3.0 (SQL Server Mobile) 支持两种与
- 视图函数中加上认证功能,流程见下图import hashlibimport timedef get_random(name):
- 什么是插槽?我们知道在Vue中 Child 组件的标签 的中间是不可以包着什么的 。可是往往在很多时候我们在使用组件的时候总想在组件间外面自
- 前言TestSuite一直是unittest的灵活与精髓之处,在繁多的测试用例中,可以任意挑选和组合各种用例集,比如smoke用例集、lev
- 首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便
- 本文实例讲述了Python中map和列表推导效率比较。分享给大家供大家参考。具体分析如下:直接来测试代码吧:#!/usr/bin/env p
- 什么是1433端口 1433端口,是SQL Server默认的端口,SQL Server服务使用两个端口:TCP-1433、UDP-1434
- 需要安装的python库使用python编写程序进行测试MQTT的发布和订阅功能。首先要安装:pip install paho-mqtt测试
- 写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题像这样:令人十分难受啊!#--------------------------
- 用python2的小伙伴肯定会遇到字符编码的问题。下面对编码问题做个简单的总结,希望对各位有些帮助。 故事零:编码的定义 我们从“SOS“(
- 前言同步适合多个连续执行的,每一步的执行依赖于上一步操作,异步执行则和任务执行顺序无关(如从10个站点抓取数据)同步执行类RunnerAsy
- 相对于Firefox2来说,Firefox3除了采用全新的Gecko 1.9引擎外,在性能、稳定性和安全性方面进行许多改进,在我们最关心的对
- 微博模拟登录这是本次爬取的网址:https://weibo.com/一、请求分析找到登录的位置,填写用户名密码进行登录操作看看这次请求响应的
- 框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。下表给出了相对http://store.company
- 在想把CIFAR-10 的16进制数据转为图像的时候需要用到imsave(),但是在import scipy.misc 之后显示该库内没有i