龙空技术网

30个Python相关的小技巧,让你写出更专业的代码(下)

前端达人 976

前言:

现时各位老铁们对“phputf8gb2312”大体比较关切,同学们都需要学习一些“phputf8gb2312”的相关资讯。那么小编同时在网摘上汇集了一些关于“phputf8gb2312””的相关知识,希望你们能喜欢,小伙伴们一起来学习一下吧!

转载说明:原创不易,未经授权,谢绝任何形式的转载

Python 是一门非常强大的编程语言,广泛应用于各种领域,从数据分析到网络编程,从机器学习到人工智能。不仅如此,Python 还具有高效和易用性的特点,其丰富的库和框架为开发者提供了各种便利。

上一篇文章介绍了15个小技巧,本文将介绍剩下的15个小技巧,这些技巧可以帮助您更好地编写 Python 代码,提高编程效率,减少代码冗余和错误。

16. 图片展示

Pillow 是一个非常流行的 Python 图像处理库,它可以用于处理各种格式的图像文件,如 JPEG、PNG、BMP、GIF 等等。Pillow 支持许多图像处理操作,如裁剪、缩放、旋转、滤镜、颜色转换等。

Pillow 库是 PIL (Python Imaging Library) 库的一个分支,它提供了许多新的功能和改进,支持 Python 3.x,并且在开发活跃,受到广泛使用。

以下是一个简单的示例代码,演示如何使用 Pillow 库来加载、裁剪和保存图像:

from PIL import Image# 打开图像文件image = Image.open("example.jpg")# 裁剪图像cropped_image = image.crop((100, 100, 400, 400))# 缩放图像resized_image = cropped_image.resize((200, 200))# 保存图像resized_image.save("example_resized.jpg")

在上面的代码中,我们首先使用 Image.open() 方法加载一个名为 "example.jpg" 的图像文件。然后,我们使用 crop() 方法裁剪图像,从 (100, 100) 到 (400, 400) 的位置。接下来,我们使用 resize() 方法将裁剪后的图像缩放为 200x200 像素。最后,我们使用 save() 方法将缩放后的图像保存为 "example_resized.jpg" 文件。

除了这些基本操作之外,Pillow 还提供了许多其他有用的功能,如图像滤镜、颜色转换、调整亮度/对比度、添加文字等等。Pillow 的官方文档提供了丰富的教程和示例,供你参考。

IPython 中进行展示:

17、使用 map() 函数

map() 函数是 Python 中的内置函数之一,它可以将一个函数应用于一个迭代器的每个元素,并返回一个新的迭代器。该函数的基本语法如下:

map(function, iterable, ...)

其中,function 是要应用于每个元素的函数,iterable 是要迭代的对象。可以将 map() 函数看作一个函数 “映射器”,它将一个函数映射到一个迭代器的每个元素上,生成一个新的迭代器,该迭代器包含了所有结果。

以下是一个简单的示例,演示如何使用 map() 函数将一个列表中的每个元素平方,并返回一个新的列表:

def square(x):    return x**2original_list = [1, 2, 3, 4, 5]squared_list = list(map(square, original_list))print(squared_list)  # 输出 [1, 4, 9, 16, 25]

在上面的代码中,我们定义了一个名为 square() 的函数,用于计算给定数字的平方。然后,我们创建一个原始列表 original_list,其中包含数字 1 到 5。最后,我们使用 map() 函数将 square() 函数应用于 original_list 中的每个元素,并返回一个新的列表 squared_list。

除了单个参数函数之外,map() 函数还可以将多个可迭代对象的元素作为参数传递给函数。在这种情况下,函数的参数数量应与可迭代对象的数量相同,如下所示:

list1 = [1, 2, 3, 4, 5]list2 = [10, 20, 30, 40, 50]def add(x, y):    return x + yresult = list(map(add, list1, list2))print(result)  # 输出 [11, 22, 33, 44, 55]

在上面的代码中,我们定义了一个名为 add() 的函数,用于将两个数字相加。然后,我们创建了两个列表 list1 和 list2,它们分别包含数字 1 到 5 和 10 到 50。最后,我们使用 map() 函数将 add() 函数应用于 list1 和 list2 中的每个元素,返回一个新的列表 result,其中包含所有元素的和。

18、从列表或字符串中获取唯一元素

set() 是 Python 中的内置函数之一,它用于创建一个无序、不重复的集合,可以用于去重、判断元素是否存在等操作。该函数的基本语法如下:

set(iterable)

其中,iterable 是一个可迭代对象,例如列表、元组或字符串。set() 函数会将 iterable 中的所有元素添加到集合中,并去除重复项,最终返回一个包含所有不同元素的集合。

以下是一个简单的示例,演示如何使用 set() 函数创建一个包含不同元素的集合:

original_list = [1, 1, 2, 3, 4, 4, 5, 5, 5]unique_set = set(original_list)print(unique_set)  # 输出 {1, 2, 3, 4, 5}

在上面的代码中,我们创建了一个列表 original_list,其中包含多个重复元素。然后,我们使用 set() 函数创建一个集合 unique_set,该集合包含了所有不同的元素,去除了重复项。

set() 函数还可以执行各种集合操作,例如交集、并集和差集等。以下是一些示例代码:

# 创建两个集合set1 = set([1, 2, 3, 4, 5])set2 = set([4, 5, 6, 7, 8])# 计算交集intersection = set1.intersection(set2)print(intersection)  # 输出 {4, 5}# 计算并集union = set1.union(set2)print(union)  # 输出 {1, 2, 3, 4, 5, 6, 7, 8}# 计算差集difference = set1.difference(set2)print(difference)  # 输出 {1, 2, 3}

在上面的代码中,我们创建了两个集合 set1 和 set2,它们包含一些不同的元素。然后,我们使用 set1.intersection(set2)、set1.union(set2) 和 set1.difference(set2) 函数计算它们的交集、并集和差集,最终返回新的集合。

19.找到最常出现的值

要在列表或字符串中查找最常出现的值,你可以这样:

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]print(max(set(test), key = test.count))

这段代码使用了 Python 的 set() 函数和 max() 函数,以及 list 的 count() 方法。

首先,我们定义了一个名为 test 的列表,其中包含了一些整数。接下来,我们调用 set() 函数将 test 列表转换成一个集合,去除其中的重复元素。因此,set(test) 返回一个集合 {1, 2, 3, 4}。

然后,我们使用 max() 函数来计算集合中出现次数最多的元素。max() 函数接受两个参数:一个可迭代对象和一个关键字函数。关键字函数将应用于可迭代对象中的每个元素,并返回一个用于比较的值。

在这个例子中,我们将 test.count 函数作为关键字参数传递给 max() 函数。这意味着 max() 函数将对集合中的每个元素调用 test.count() 方法来获取它在原始列表 test 中出现的次数,然后返回出现次数最多的元素。

因此,print(max(set(test), key=test.count)) 输出的结果为 4,因为 4 在原始列表 test 中出现了最多的次数(4次)。

20.创建进度条

您可以创建自己的进度条,这很有趣。但是使用 progress 包让你更容易的创建进度条。

首先安装 progress

pip3 install progress

progress 是一个 Python 包,提供了在命令行中显示进度条和其他进度指示器的功能,让长时间运行的操作更加直观和易于管理。

使用 progress 包可以让你在循环、下载文件、数据处理等过程中方便地显示进度条,提高交互性和用户体验。该包还提供了许多选项和配置参数,以便自定义进度条的样式、计算和显示。

下面是一个使用 progress 包的示例代码:

from progress.bar import IncrementalBarimport time# 模拟一个需要长时间运行的操作def long_running_process():    for i in range(100):        time.sleep(0.1)# 创建进度条bar = IncrementalBar('Processing', max=100)# 运行操作,并在进度条中更新进度long_running_process()bar.next()# 完成操作,结束进度条bar.finish()

在这个示例代码中,我们首先导入 IncrementalBar 类和 time 模块。IncrementalBar 类是 progress 包中的一个进度条类型,可以根据操作进展情况增量式地更新进度。

接下来,我们定义了一个需要长时间运行的函数 long_running_process(),该函数会循环100次并每次暂停0.1秒。这个函数模拟了一个长时间运行的操作,例如数据处理或文件下载。

然后,我们创建了一个进度条 bar,将其命名为 "Processing",并设置其最大值为100。然后,我们调用 long_running_process() 函数来运行操作,并使用 bar.next() 方法在进度条中更新进度。每次调用 bar.next() 方法,进度条就会增加1个单位,表示操作已经完成了1%。

最后,我们在操作完成后调用 bar.finish() 方法来结束进度条。这将输出一个最终的进度条,告诉用户操作已经完成。

以下动画演示了所有可用的进度类型:

21. 在交互式 shell 中使用 _

在 Python 的交互式 shell 中,使用下划线(_)可以方便地引用最近一次的表达式结果,是一种方便快捷的小技巧。

当你在交互式 shell 中执行一个表达式或语句时,Python 会将其计算并返回结果。如果你想在稍后的表达式中使用这个结果,你可以将它赋给一个变量或使用函数调用等方式来引用它。但如果你只是需要在下一个表达式中使用它,那么可以直接使用下划线符号来引用它,这样就不需要定义一个新的变量了。

下面是一个简单的示例,展示了如何在交互式 shell 中使用下划线:

>>> 2 + 24>>> _ + 1  # 使用 _ 引用上一次的结果5>>> _ * 210>>> _ ** 2100

在这个示例中,我们首先执行了 2 + 2 表达式,Python 计算并返回结果 4。然后,我们在下一个表达式中使用了下划线来引用上一次的结果,即 4 + 1,Python 计算并返回结果 5。接着,我们使用下划线引用上一次的结果来计算 5 * 2 和 10 ** 2,分别得到结果 10 和 100。

需要注意的是,下划线引用的是最近一次的表达式结果。如果你执行了多个表达式,并且想引用前面某个表达式的结果,那么你需要使用变量或其他方式来存储这个结果。

22.快速创建一个网络服务器

你可以快速启动一个Web服务,在当前目录运行以下命令:

python3 -m http.server

python3 -m http.server 是一个简单的命令行工具,可以在本地启动一个简单的 HTTP 服务器,用于在浏览器中查看静态网页和文件。

具体来说,python3 -m http.server 命令会将当前目录作为根目录启动一个 HTTP 服务器,默认监听端口为 8000。例如,如果你在一个名为 mywebsite 的目录中执行该命令,那么你可以在浏览器中通过 访问该目录下的静态文件。

这个命令是使用 Python 内置的 http.server 模块实现的。该模块提供了一个简单的 HTTP 服务器实现,可以用于快速查看静态文件。在使用该命令时,你可以指定端口号或 IP 地址等参数,例如:

python3 -m http.server 8080:指定端口号为 8080。python3 -m http.server 0.0.0.0:指定监听所有的 IP 地址,而不仅仅是本地回环地址。python3 -m http.server --bind 127.0.0.1:同样指定监听本地回环地址,等价于 python3 -m http.server。

需要注意的是,该命令只适用于开发环境和测试环境。在生产环境中,应该使用专业的 Web 服务器来提供服务,并采取必要的安全措施。

23. 多行字符串处理小技巧

在 Python 中,我们可以使用三个单引号或三个双引号来表示多行字符串,也称为多行文本。这种方式比使用多个字符串连接更简单,也更容易阅读和维护。以下是一些使用多行字符串的小技巧:

1、在多行字符串中使用单引号和双引号

在多行字符串中使用单引号和双引号是非常常见的。如果字符串本身包含单引号或双引号,则可以使用另一种引号来定义多行字符串。例如:

str1 = '''It's a beautiful day in the neighborhood!'''str2 = """She said, "I'll be there at five.""""

2、在多行字符串中使用换行符和缩进

多行字符串中的换行符和缩进不仅可以使代码更易于阅读,还可以让输出的字符串更清晰易懂。例如:

str3 = '''Hello,    this is a    multi-line string.'''print(str3)

输出:

Hello,    this is a    multi-line string.

3、在多行字符串中使用变量和表达式

在多行字符串中,我们可以使用变量和表达式来动态生成字符串。例如:

name = "Alice"age = 30str4 = f'''My name is {name}, and I am {age} years old.'''print(str4)

输出:

My name is Alice, and I am 30 years old.

4、在多行字符串中使用制表符和换行符

在多行字符串中,我们可以使用制表符和换行符来生成格式化的输出。例如:

str5 = f'''Name\tAge\tCityJohn\t25\tNew YorkAlice\t30\tLos AngelesBob\t35\tChicago'''print(str5)

输出:

Name    Age    CityJohn    25     New YorkAlice   30     Los AngelesBob     35     Chicago

5、使用 \n 来插入换行符

在多行字符串中,我们可以使用 \n 来插入换行符,使得字符串更加易读。而且如果你不想让 \n 被转义为换行符,你可以在字符串前面加上 r 来得到一个原始字符串。

下面是一些使用 \n 和原始字符串的例子:

# 在多行字符串中使用 \nmulti_line_string = "这是一个\n多行字符串\n的例子。"print(multi_line_string)# 使用 r 来得到原始字符串raw_string = r"C:\Windows\System32"print(raw_string)# 在原始字符串中使用 \nraw_multi_line_string = r"这是一个\n多行字符串\n的例子。"print(raw_multi_line_string)

输出:

这是一个多行字符串的例子。C:\Windows\System32这是一个\n多行字符串\n的例子。

需要注意的是,在原始字符串中,\n 仍然是一个普通的字符,不会被解释为换行符。

24、三目运算符

Ternary Operator 是 Python 中的一个非常常用的语法结构,也被称为条件运算符或三目运算符。这个运算符可以帮助我们更简洁地进行条件分支,非常适合用于简单的条件分支语句。而 Ternary Operator For Conditional Assignment 是使用 ternary operator 进行条件赋值的一个小技巧。

Ternary Operator 的一般形式如下:

value_if_true if condition else value_if_false

其中 condition 是一个布尔表达式,如果为 True,则返回 value_if_true,否则返回 value_if_false。

Ternary Operator For Conditional Assignment 则是利用了这个语法结构,将条件赋值写成一行代码,非常简洁。例如:

x = 1y = 2z = 3# 传统的条件赋值if x > y:    max_val = xelse:    max_val = y# 使用 ternary operator 进行条件赋值max_val = x if x > y else y# 可以进行多重条件赋值result = 'foo' if z < x else 'bar' if z > y else 'baz'

需要注意的是,虽然 Ternary Operator For Conditional Assignment 确实可以让代码更简洁,但在一些情况下过度使用可能会导致代码难以阅读和理解。在编写代码时,需要根据具体情况进行取舍,避免过度使用。

25. 计算出现次数

collections 模块是 Python 内置的一个库,提供了许多有用的数据结构,其中包括 Counter 类,它是一个简单的计数器,可以用来统计可哈希对象的出现次数。

当我们需要统计一个列表中每个元素出现的次数时,可以使用 Counter 类。下面是一个例子:

from collections import Counterlst = [1, 2, 3, 2, 2, 1, 3, 1, 1, 4, 3, 3, 3]counts = Counter(lst)print(counts)

输出结果为:

Counter({1: 4, 3: 5, 2: 3, 4: 1})

可以看到,Counter 对象记录了每个元素出现的次数。我们也可以使用 most_common() 方法获取出现次数最多的元素:

print(counts.most_common(2))

输出结果为:

[(1, 4), (3, 5)]

这表示元素 1 出现了 4 次,元素 3 出现了 5 次,它们是出现次数最多的前两个元素。

使用 Counter 可以方便地统计各种类型的对象的出现次数,包括列表、字符串、字典等,这对于数据分析和处理非常有用。

26、比较多个值的大小关系

在 Python 中可以连续使用比较运算符来比较多个值的大小关系。例如,我们可以使用类似于下面的语句:

x < y < z

这个语句将会检查 x 是否小于 y 并且 y 是否小于 z,如果这两个条件都成立,那么整个表达式就会被认为是 True,否则为 False。

这个技巧可以使代码更加简洁易读。当需要比较多个值的大小关系时,使用链式比较可以避免多次使用布尔运算符,例如 and 和 or。同时,使用链式比较还可以避免出现多个嵌套的条件语句,提高代码的可读性和可维护性。

以下是一个示例代码,展示了如何使用链式比较:

x = 2y = 3z = 4if x < y < z:    print('x is less than y, and y is less than z')else:    print('x is not less than y, or y is not less than z')

输出:

x is less than y, and y is less than z

在上面的示例中,我们使用链式比较检查了 x 是否小于 y,y 是否小于 z,由于两个比较运算符都返回 True,因此整个表达式的值也为 True。

27. 添加一些颜色

Colorama是一个用于在Windows命令行中添加ANSI样式和风格的Python库。它提供了一种跨平台的方法,可以在Windows、Linux和MacOS等平台上使用ANSI转义码来设置文本颜色和样式,让命令行应用程序更加具有吸引力。

Colorama库提供了一个简单的接口来使用ANSI转义序列。在Windows系统上,这些序列不会自动地被处理,因此需要使用Colorama来设置文本的颜色和样式。这个库主要用于在控制台中打印彩色的文字,比如可以用它来在输出中区分不同级别的日志信息,或者用来美化命令行工具的输出。

以下是一个简单的例子,展示了如何使用Colorama来设置输出文本的颜色和样式:

from colorama import init, Fore, Back, Style# 初始化Coloramainit()# 输出彩色文本print(Fore.RED + 'Hello, world!' + Style.RESET_ALL)print(Back.GREEN + 'Hello, world!' + Style.RESET_ALL)print(Fore.YELLOW + Back.BLUE + 'Hello, world!' + Style.RESET_ALL)print(Style.DIM + 'Hello, world!' + Style.RESET_ALL)

在上面的例子中,Fore和Back类提供了多种颜色选项,Style类提供了其他的样式选项。在输出文本之前,需要使用init()函数来初始化Colorama库。使用Style.RESET_ALL可以恢复文本的默认颜色和样式。

Colorama库还提供了deinit()函数,用于关闭ANSI转义序列的输出,回到原始的控制台文本输出方式。

需要注意的是,使用Colorama库的应用程序只能在支持ANSI转义序列的终端(如Linux和macOS终端)中正常运行,否则可能会出现不兼容的情况。

总之,Colorama是一个非常有用的Python库,可以让命令行应用程序变得更加美观和易于阅读。

28. 处理日期

python-dateutil 是 Python 的一个第三方日期时间处理库,它扩展了 Python 自带的 datetime 模块,提供了许多方便的日期时间处理方法和工具。

它主要的特性包括:

可以解析字符串为日期时间对象,支持多种日期时间格式。可以处理时区信息。可以对日期时间对象进行各种数学运算。可以生成日期时间范围序列。可以对日期时间进行字符串格式化输出。

以下是 python-dateutil 的几个常用功能和代码示例:

1、解析字符串为日期时间对象

dateutil 提供了 parser.parse 方法,可以将字符串转换为日期时间对象,自动识别多种日期时间格式:

from dateutil import parserdt = parser.parse('2022-02-17 12:30:45')print(dt)  # 2022-02-17 12:30:45

2、处理时区信息

dateutil 提供了 tz 模块,可以处理时区信息,支持多个时区。

from dateutil import tz# 创建 UTC 时间utc = tz.tzutc()dt_utc = datetime(2022, 2, 17, tzinfo=utc)print(dt_utc)  # 2022-02-17 00:00:00+00:00# 创建指定时区时间tz_sh = tz.gettz('Asia/Shanghai')dt_sh = datetime(2022, 2, 17, tzinfo=tz_sh)print(dt_sh)  # 2022-02-17 00:00:00+08:00

3、对日期时间进行数学运算

dateutil 中的日期时间对象支持各种数学运算,包括加减、比较等。

from dateutil.relativedelta import relativedeltadt1 = datetime(2022, 2, 17)dt2 = datetime(2022, 3, 20)# 计算两个日期之差diff = relativedelta(dt2, dt1)print(diff)  # relativedelta(months=+1, days=+3)# 计算日期加上一个时间段之后的新日期dt3 = dt1 + relativedelta(months=1, days=3)print(dt3)  # 2022-03-20 00:00:00

4、生成日期时间范围序列

dateutil 提供了 rrule 模块,可以生成日期时间范围序列。

from datetime import datetime, timedeltafrom dateutil.rrule import rrule, DAILYstart_date = datetime(2022, 2, 1)end_date = datetime(2022, 2, 28)date_range = list(rrule(DAILY, dtstart=start_date, until=end_date))print(date_range)

在这个例子中,我们首先定义了一个起始日期和一个结束日期,然后使用 rrule() 函数生成这两个日期之间每一天的日期序列。我们将生成的序列转换为列表,然后打印出来。输出应该是一个包含所有日期的列表。

请注意,我们可以使用 rrule() 函数的第一个参数指定日期序列的频率。在上面的例子中,我们使用 DAILY,这意味着我们要生成每一天的日期。您可以使用其他频率,如 HOURLY、MINUTELY 或 WEEKLY,根据需要生成日期时间范围序列。

29.整数除法

在 Python 中,整数除法使用双斜杠(//)运算符进行表示。整数除法的结果将舍去小数部分,并返回整数。

这种除法行为被称为“截断除法”或“地板除法”,因为它向下舍入到最接近的整数。

整数除法的使用场景是在需要得到整数结果的情况下,而不关心小数部分的值。

下面是一个整数除法的示例:

>>> 7 // 32>>> 10 // 25>>> 15 // 72

在 Python 2 中,除法运算行为不同,当两个整数进行除法运算时,会得到一个整数结果,而不是小数。这个行为可以通过使用浮点数来避免。在 Python 2 中,可以将其中一个数字转换为浮点数,这样就会得到带有小数的结果。

例如,在 Python 2 中:

>>> 7 / 32>>> 7 / 3.02.3333333333333335>>> 7.0 / 32.3333333333333335

在 Python 3 中,整数除法会默认得到一个浮点数结果,如果需要得到整数结果,需要使用双斜杠运算符。

>>> 7 / 32.3333333333333335>>> 7 // 32

整数除法在编写代码时非常有用,可以避免不必要的小数位数,并且可以使计算结果更容易理解。

30.字符编码检测

chardet 是一个用于字符编码检测的 Python 库,能够自动识别多种编码类型(如 UTF-8、GB2312、GBK、BIG5 等),并返回字符编码的名称、编码的置信度等信息。

使用 chardet 模块非常简单,只需要将待检测的二进制数据传入 chardet.detect() 函数中即可,该函数会返回一个字典,其中包含编码的名称和置信度。

以下是一个使用 chardet 模块检测文件编码的示例代码:

import chardet# 打开文件with open('example.txt', 'rb') as f:    # 读取文件内容    data = f.read()    # 检测文件编码    result = chardet.detect(data)    # 输出结果    print('File encoding is: {} with confidence: {}'.format(result['encoding'], result['confidence']))

在上面的示例代码中,我们打开了一个文本文件 example.txt,使用 chardet.detect() 函数检测文件的编码,并输出检测结果。如果文件的编码是 UTF-8,那么输出的结果就会类似于下面这样:

File encoding is: UTF-8 with confidence: 0.99

需要注意的是,chardet 仅仅是根据文件中的字符内容来推测文件编码类型,因此其准确性并不完全,特别是在一些特殊的情况下,其检测结果可能会有误。

总结

到这里关于Python 的 30 个提示、技巧和最佳实践就分享到这里。当你熟练掌握了这些 Python 技巧后,你将能够更加高效地编写 Python 代码。这些技巧可以帮助你编写更短、更简洁的代码,提高你的编程效率和代码质量。除了这些技巧,还有许多其他的 Python 库和工具可以帮助你更好地完成各种任务,因此,继续探索并学习 Python 的更多特性是非常有益的。

同时,这些小技巧也告诉我们,Python 是一门非常灵活和强大的编程语言,有着丰富的内置函数和标准库。在实际的编程过程中,我们可以通过熟练掌握这些内置函数和标准库,以及了解各种编程技巧来更好地实现我们的编程需求。

最后,提醒大家,虽然这些 Python 技巧很有用,但在编写代码时,最重要的还是保持代码的可读性和易于维护性。因此,在使用这些技巧的同时,也要注意代码的规范和清晰。

如果你喜欢我的分享,别忘了点赞转发,让更多的人看到,最后别忘记关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

标签: #phputf8gb2312 #pythonbob #python输出浮点数30 #python编码格式