首頁  >  文章  >  後端開發  >  歸納整理! Python實用技巧總結

歸納整理! Python實用技巧總結

WBOY
WBOY轉載
2022-03-07 17:10:142199瀏覽

本篇文章為大家帶來了關於python的相關知識,其中主要總結了24個非常實用的Python開發技巧,包括了all or any、bashplotlib、collections等等,希望對大家有幫助。

歸納整理! Python實用技巧總結

推薦學習:python教學

在Python的學習過程中,很多小夥伴可能會想,我學了這麼多,哪些是常用、實用的?怎樣增加工作效率?

今天,我就總結了24個好用到爆的Python實用技巧,希望能對小夥伴們有幫助! 迎收藏學習,喜歡按讚支持,文末提供技術交流群。

在這裡,我嘗試以A - Z 開頭的格式分享這些技巧中的一部分,並且簡單介紹這些方法,如果你對其中一個或多個感興趣,你可以透過文末參考資料查看官方文件哦~

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")

bashplotlib

你有沒有想過在控制台中繪製圖形嗎?

Bashplotlib 是一個 Python 函式庫,他能夠幫助我們在命令列(粗曠的環境)中繪製資料。

# 模块安装
pip install bashplotlib
# 绘制实例
import numpy as np
from bashplotlib.histpgram import plot_hist
arr = np.ramdom.normal(size=1000, loc=0, scale=1)
plot_hist(arr, bincount=50)

collections

Python 有一些很棒的預設資料類型,但有時它們的行為並不完全符合你的期望。

幸運的是,Python 標準函式庫提供了 collections 模組**[1]**。這個方便的附加元件為你提供了更多的資料類型。

from collections import OrderedDict, Counter
# 记住键的添加顺序!
x = OrderedDict(a=1, b=2, c=3)
# 统计每个字符出现的频率
y = Counter("Hello World!")

dir

有沒有想過如何查看 Python 物件內部並查看它具有哪些屬性?在命令列中輸入:

dir() 
dir("Hello World") 
dir(dir)

當以互動方式運行 Python 以及動態探索你正在使用的物件和模組時,這可能是一個非常有用的功能。在這裡閱讀更多**functions****[2]**相關內容。

emoji

emoji**[3]** 是日本在無線通訊中所使用的視覺情緒符號,繪圖圖畫,文字指的則是字符,可用來代表多種表情,如笑臉表示笑、蛋糕表示食物等。在中國大陸,emoji通常叫做“小黃臉”,或直稱emoji。

# 安装模块
pip install emoji
# 做个尝试
from emoji import emojize
print(emojize(":thumbs_up:"))

from __future__ import

Python 流行的結果之一,總是有新版本正在開發中。新版本意味著新功能 —— 除非你的版本已過時。

不過別擔心。使用該**__future__模組****[4]**可以幫助你用Python的未來版本導入功能。從字面上看,這就像時間旅行、魔法或其他東西。

from __future__ import print_function
print("Hello World!")

geogy

#地理,對大多數程式設計師來說是一個具有挑戰性的領域。在取得地理資訊或繪製地圖時,也會遇到不少問題。這個**geopy 模組****[5]**讓地理相關內容變得非常容易。

pip install geopy

它透過抽象化一系列不同地理編碼服務的 API 來運作。透過它,你能夠獲得一個地方的完整街道地址、緯度、經度甚至海拔高度。

還有一個有用的距離類別。它以你偏好的測量單位計算兩個位置之間的距離。

from geopy import GoogleV3
place = "221b Baker Street, London"
location = GoogleV3().geocode(place)
print(location.address)
print(location.location)

howdoi

當你使用terminal終端程式設計時,透過在遇到問題後會在StackOverflow上搜尋答案,完後會回到終端繼續編程,此時有時會不記得你之前查到的解決方案,此時需要重新查看StackOverflow,但又不想離開終端,那麼此時你需要用到這個有用的命令列工具howdoi****[6 ]

pip install howdoi

無論你有什麼問題,都可以問它,它會盡力回覆。

howdoi vertical align css
howdoi for loop in java
howdoi undo commits in git

但請注意——它會從 StackOverflow 的最佳答案中抓取程式碼。它可能不會總是提供最有用的信息…

howdoi exit vim

inspect

Python 的**inspect模組****[7]**非常適合了解幕後發生的事。你甚至可以呼叫它自己的方法!

下面的程式碼範例inspect.getsource() 用來列印自己的原始程式碼。 inspect.getmodule() 也用來列印定義它的模組。

最後一行程式碼列印出它自己的行號。

import inspect
print(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)

當然,除了這些微不足道的用途,inspect 模組可以證明對理解你的程式碼在做什麼很有用。你也可以使用它來編寫自文檔化程式碼。

Jedi

Jedi 函式庫是一個自動完成和程式碼分析函式庫。它使編寫程式碼更快、更有效率。

除非你正在開發自己的 IDE,否則你可能對使用Jedi **[8]**作為編輯器外掛程式比較感興趣。幸運的是,這已經有可用的負載!

**kwargs

在学习任何语言时,都会有许多里程碑。使用 Python 并理解神秘的**kwargs语法可能算作一个重要的里程碑。

字典对象前面的双星号****kwargs****[9]**允许你将该字典的内容作为命名参数传递给函数。

字典的键是参数名称,值是传递给函数的值。你甚至不需要调用它kwargs

dictionary = {"a": 1, "b": 2}def someFunction(a, b):
    print(a + b)
    return# 这些做同样的事情:someFunction(**dictionary)someFunction(a=1, b=2)

当你想编写可以处理未预先定义的命名参数的函数时,这很有用。

列表(list)推导式

关于 Python 编程,我最喜欢的事情之一是它的列表推导式****[10]

这些表达式可以很容易地编写非常顺畅的代码,几乎与自然语言一样。

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)

map

Python 通过许多内置功能支持函数式编程。最有用的map()功能之一是函数——尤其是与**lambda 函数****[11]**结合使用时。

x = [1, 2, 3] 
y = map(lambda x : x + 1, x)
# 打印出 [2,3,4]
print(list(y))

在上面的示例中,map()将一个简单的 lambda 函数应用于x. 它返回一个映射对象,该对象可以转换为一些可迭代对象,例如列表或元组。

newspaper3k

如果你还没有看过它,那么准备好被Python newspaper module [12]模块震撼到。它使你可以从一系列领先的国际出版物中检索新闻文章和相关的元数据。你可以检索图像、文本和作者姓名。它甚至有一些内置的 NLP 功能**[13]**。

因此,如果你正在考虑在下一个项目中使用 BeautifulSoup 或其他一些 DIY 网页抓取库,使用本模块可以为你自己节省不少时间和精力。

pip install newspaper3k

Operator overloading

Python 提供对**运算符重载的****[14]**支持,这是让你听起来像一个合法的计算机科学家的术语之一。

这实际上是一个简单的概念。有没有想过为什么 Python 允许你使用+运算符来添加数字以及连接字符串?这就是操作符重载的作用。

你可以定义以自己的特定方式使用 Python 的标准运算符符号的对象。并且你可以在与你正在使用的对象相关的上下文中使用它们。

class Thing:
    def __init__(self, value):
        self.__value = value
    def __gt__(self, other):
        return self.__value > other.__value
    def __lt__(self, other):
        return self.__value < other.__value
something = Thing(100)
nothing = Thing(0)
# True
something > nothing
# False
something < nothing
# Error
something + nothing

pprint

Python 的默认print函数完成了它的工作。但是如果尝试使用print函数打印出任何大的嵌套对象,其结果相当难看。这个标准库的漂亮打印模块**pprint****[15]**可以以易于阅读的格式打印出复杂的结构化对象。

这算是任何使用非平凡数据结构的 Python 开发人员的必备品。

import requests
import pprint
url = &#39;https://randomuser.me/api/?results=1&#39;
users = requests.get(url).json()
pprint.pprint(users)

Queue

Python 标准库的 Queue 模块实现支持多线程。这个模块让你实现队列数据结构。这些是允许你根据特定规则添加和检索条目的数据结构。

“先进先出”(FIFO)队列让你可以按添加顺序检索对象。“后进先出”(LIFO) 队列让你可以首先访问最近添加的对象。

最后,优先队列让你可以根据对象的排序顺序检索对象。

这是一个如何在 Python 中使用队列**Queue****[16]**进行多线程编程的示例。

__repr__

在 Python 中定义类或对象时,提供一种将该对象表示为字符串的“官方”方式很有用。例如:

>>> file = open('file.txt', 'r') 
>>> print(file) 
<open file &#39;file.txt&#39;, mode &#39;r&#39; at 0x10d30aaf0>

这使得调试代码更加容易。将其添加到你的类定义中,如下所示:

class someClass: 
    def __repr__(self): 
        return "<some description here>"
someInstance = someClass()
# 打印 <some description here>
print(someInstance)

sh

Python 是一种很棒的脚本语言。有时使用标准的 os 和 subprocess 库可能有点头疼。

该**SH库****[17]**让你可以像调用普通函数一样调用任何程序——对于自动化工作流和任务非常有用。

import sh
sh.pwd()
sh.mkdir('new_folder')
sh.touch('new_file.txt')
sh.whoami()
sh.echo('This is great!')

Type hints

Python 是一种动态类型语言。定义变量、函数、类等时不需要指定数据类型。这允许快速的开发时间。但是,没有什么比由简单的输入问题引起的运行时错误更烦人的了。

Python 3.5**[18]** 开始,你可以选择在定义函数时提供类型提示。

def addTwo(x : Int) -> Int:
    return x +

你还可以定义类型别名。

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。如果你正在处理大型、复杂的项目,这是很有用的!

uuid

通过Python 标准库的 uuid 模块**[19]**生成通用唯一 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,重复存在的可能性也远低于十亿分之一。

Virtual environments

你可能同时在多个 Python 项目上工作。不幸的是,有时两个项目将依赖于相同依赖项的不同版本。你在你的系统上安装了什么?

幸运的是,Python支持对 虚拟环境**[20]** 的让你可以两全其美。从命令行:

python -m venv my-project 
source my-project/bin/activate 
pip install all-the-modules

现在,你可以在同一台机器上运行 Python 的独立版本和安装。

wikipedia

维基百科有一个很棒的 API,它允许用户以编程方式访问无与伦比的完全免费的知识和信息。在**wikipedia模块****[21]**使访问该API非常方便。

import wikipedia
result = wikipedia.page('freeCodeCamp')
print(result.summary)
for link in result.links:
    print(link)

和真实站点一样,该模块提供了多语言支持、页面消歧、随机页面检索,甚至还有一个donate()方法。

xkcd

幽默是 Python 语言的一个关键特征,它是以英国喜剧小品剧**Python飞行马戏团****[22]**命名的。Python 的许多官方文档都引用了该节目最著名的草图。不过,Python 的幽默并不仅限于文档。试试运行下面的行:

import antigravity

YAML

YAML**[23]**指的是 “ 非标记语言” 。它是一种数据格式化语言,是 JSON 的超集。

与 JSON 不同,它可以存储更复杂的对象并引用它自己的元素。你还可以编写注释,使其特别适合编写配置文件。该**PyYAML模块****[24]**可让你使用YAML使用Python。

安装并然后导入到你的项目中:

pip install pyyamlimport yaml

PyYAML 允许你存储任何数据类型的 Python 对象,以及任何用户定义类的实例。

zip

压轴出场的也是很棒的一个模块。你曾经遇到过需要从两个列表中形成字典吗?

keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))

zip()内置函数需要一系列可迭代的对象,并返回一个元组列表中。每个元组按位置索引对输入对象的元素进行分组。

你还可以通过调用对象来“解压缩”对象*zip()

Python 是一种非常多样化且发展良好的语言,因此肯定会有许多我没有考虑的功能。如果你想了解更多的python模块,可以参考awesome-python****[25]

 推荐学习:python学习教程

以上是歸納整理! Python實用技巧總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除