”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 高级 Python Hacks 或

高级 Python Hacks 或

发布于2024-07-30
浏览:250

Advanced Python Hacks ou

Python是一门多功能且功能强大的语言,掌握其高级功能可以显着提高您的编码效率和可读性。以下是一些高级 Python 技巧,可帮助您编写更好、更简洁、更高效的代码。

我写了两本周末阅读的关于Python的小书,链接如下:(1) https://leanpub.com/learnpython_inweekend_pt1 & (2) https://leanpub.com/learnpython_inweekend_pt2


1. 使用列表推导式来编写简洁的代码

列表推导式提供了一种创建列表的简洁方法。它们通常可以取代传统的 for 循环和条件语句,从而产生更清晰、更易读的代码。

# Traditional approach
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
    squared_numbers.append(num ** 2)

# Using list comprehension
squared_numbers = [num ** 2 for num in numbers]

2. 利用生成器表达式提高内存效率

生成器表达式允许您以简洁的方式创建迭代器,而无需将整个序列存储在内存中,从而使它们更加节省内存。

# List comprehension (creates a list)
squared_numbers = [num ** 2 for num in numbers]

# Generator expression (creates an iterator)
squared_numbers = (num ** 2 for num in numbers)

3.利用enumerate()进行索引跟踪

当迭代一个可迭代对象并需要跟踪每个元素的索引时, enumerate() 函数是无价的。

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"Index: {index}, Fruit: {fruit}")

4. 使用 join() 简化字符串连接

使用 join() 方法连接字符串比使用运算符更有效,特别是对于大字符串。

fruits = ['apple', 'banana', 'cherry']
fruit_string = ', '.join(fruits)
print(fruit_string)  # Output: apple, banana, cherry

5.使用__slots__减少内存使用

默认情况下,Python 将实例属性存储在字典中,这会消耗大量内存。使用 __slots__ 可以通过为一组固定的实例变量分配内存来减少内存使用量。

class Point:
    __slots__ = ['x', 'y']
    def __init__(self, x, y):
        self.x = x
        self.y = y

6.使用contextlib.suppress来忽略异常

contextlib.suppress 上下文管理器允许您忽略特定异常,通过避免不必要的 try-except 块来简化代码。

from contextlib import suppress

with suppress(FileNotFoundError):
    with open('file.txt', 'r') as file:
        contents = file.read()

7.利用itertools模块

itertools 模块提供了一系列用于迭代器的高效函数。乘积、排列和组合等函数可以简化复杂的运算。

import itertools

# Calculate all products of an input
print(list(itertools.product('abc', repeat=2)))

# Calculate all permutations
print(list(itertools.permutations('abc')))

8. 使用 functools.lru_cache 进行缓存

functools.lru_cache 装饰器可以缓存昂贵的函数调用的结果,从而提高性能。

from functools import lru_cache

@lru_cache(maxsize=32)
def fibonacci(n):
    if n 



9. 简洁代码的主装饰器

装饰器是修改函数或类行为的强大工具。它们可用于日志记录、访问控制等。

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

10.使用For-Else技巧

Python 中的 for-else 构造允许您在 for 循环正常完成后执行 else 块(即,不会遇到 break 语句)。这在搜索操作中特别有用。

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(f"{n} equals {x} * {n//x}")
            break
    else:
        # Loop fell through without finding a factor
        print(f"{n} is a prime number")

结论

通过将这些高级 Python 技巧融入到您的开发工作流程中,您可以编写更高效、可读且可维护的代码。

无论您是使用 __slots__ 优化内存使用、使用 join() 简化字符串操作,还是利用 itertools 模块的强大功能,这些技术都可以显着提高您的 Python 编程技能。

不断探索和实践这些概念,以在您的 Python 之旅中保持领先。

版本声明 本文转载于:https://dev.to/hisham_elamir/10-advanced-python-hacks-4-you-j2o?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 从PHP网址保存图片到本地电脑的技巧
    从PHP网址保存图片到本地电脑的技巧
    从php urls 如果您的PHP配置允许从URL获取数据,则可以使用以下代码:但是,如果由于安全性问题而禁用file_get_get_contents,则可以使用curl:通过使用以下一种方法,您可以方便地将图像从远程PHP URL保存到本地系统。[&& &&&&&华
    编程 发布于2025-04-19
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-04-19
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-04-19
  • 如何在没有querySelectorAll时通过属性选择元素?
    如何在没有querySelectorAll时通过属性选择元素?
    如何通过属性检索元素时,当QuerySelectorAll不可用document.querySelectorAll('[data-foo]')However, in the absence of querySelectorAll, an alternative solution i...
    编程 发布于2025-04-19
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-04-19
  • 如何从2D数组中提取元素?使用另一数组的索引
    如何从2D数组中提取元素?使用另一数组的索引
    Using NumPy Array as Indices for the 2nd Dimension of Another ArrayTo extract specific elements from a 2D array based on indices provided by a second ...
    编程 发布于2025-04-19
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-04-19
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-19
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-04-19
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-19
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确...
    编程 发布于2025-04-19
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-19
  • Go中如何保持固定数量的并发Goroutine运行?
    Go中如何保持固定数量的并发Goroutine运行?
    在go中螺纹goroutines:同时运行常数 GO并发领域在等待完成指定数量的Goroutines时提供了多种材料。但是,一个独特的挑战提出了自己:确保连续执行预定义的goroutines,一个开始作为另一个结论。考虑一个具有大量任务的情况,例如处理从mysql数据库中检索到的数据。一种天真的方...
    编程 发布于2025-04-19
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-04-19
  • 如何从MySQL两表中检索数据及处理缺失对应项?
    如何从MySQL两表中检索数据及处理缺失对应项?
    从mySQL中的两个表中进行选择,带有缺失的通讯器Consider the following example:You have two tables, categories (with columns id and title) and products (with columns id, ow...
    编程 发布于2025-04-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3