关于python:15-个好用到爆的-Python-实用技巧

57次阅读

共计 3693 个字符,预计需要花费 10 分钟才能阅读完成。

Hello, 大家好,我是程序员小二~

在这里,我在本文中简略介绍 15 个好用到爆的 Python 实用技巧,如果你对其中一个或多个感兴趣,能够看一下,心愿对你能有所帮忙。

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 模块,能够点个赞和关注哦

正文完
 0