page contents

Python教程-推荐Python中五个不为人知的小技巧

本文讲述了python教程-推荐Python中五个不为人知的小技巧!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-06-FydPZt1f6663f83208f24.png本文讲述了python教程-推荐Python中五个不为人知的小技巧!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

在本文中,我将介绍一些大家在日常编码中都可以使用的技术或功能。在学习这些 Python技巧的过程中,我发现了一些超越常规的技术,它们为我们的代码增添了一丝魔力。

闲话少说,我们直接开始吧!
海象运算符
这是在 python 3.8版本中发布的新特性。这有助于我们在使用内部函数时定义值。我们来看个例子:

def extract_val():
    for i in range(10):
        yield i
    yield -1

def some_func(val):
    pass

gen_obj = extract_val()
val = next(gen_obj)
while val != -1:
    some_func(val)
    val = next(gen_obj)
在这个示例中,我创建了一个生成器对象gen_obj,然后调用 next 函数获取下一个值。我通过检查该值是否为负 1,然后调用next函数获取下一个val。现在,让我们用海象运算符 := 来实现同样的功能,代码如下:

def extract_val():
    for i in range(10):
        yield i
    yield -1

def some_func(val):
    pass

gen_obj = extract_val()
while (val := next(gen_obj))!= -1:
    some_func(val)
在这里我将val作为循环的结果,同时将val作为 while 循环中条件判断的一部分。

字典解包

我们直接通过例子来说明:
person = {
        "name": "AIWay",
        "age": "26",
    }
    
name, age = person["name"], person["age"]
print(f"姓名: {name}")
print(f"年龄: {age}")
虽然我们通过传递给字典对应的Key来解包相应的Value,但是更为简单的方式是使用两个星号直接解包字典,如下:

person = {
        "name": "AIWay",
        "age": "26",
    }
  
def print_data(name, age):
    print(f"姓名: {name}")
    print(f"年龄: {age}")

print_data(**person)
有趣的是,即使我改变 print_data 函数中参数的顺序,即将函数声明修改为def print_data(age,name),它仍然可以正常工作。

这主要是因为在执行解包过程时,Python会尝试将字典中的键与函数参数列表中的相应参数名称进行匹配。如果键与参数名称相匹配,则相应的值将被分配给该参数。

求模

函数divmod 可用于以更有条理的方式格式化数字,例如以小时和分钟为单位显示时间。因此,它可以在一个步骤中执行除法和求模运算。

total_minutes = 125
hours, minutes = divmod(total_minutes, 60)
print(f"{hours} hours and {minutes} minutes")   
# 2 hours and 5 minutes

提取嵌套列表

给定一个嵌套列表,为了对其进行展开处理,可以采用下面的旧方法:

lst = [[1], [2], [3], [4], [5]]
new_lst = []
for sublist in lst:
    for element in sublist:
        new_lst.append(element)
print(new_lst)
# [1, 2, 3, 4, 5]

## OR using list compression
flattened_lst = [val for sublist in List1 for val in sublist]
print(flattened_lst)
# [1, 2, 3, 4, 5]
但是,有一种技术经常被用来将嵌套列表展开为单个列表,从而使代码更加简洁易读。

lst = [[1], [2], [3], [4], [5]]
flattened_lst = sum(lst, [])
print(flattened_lst)
# [1, 2, 3, 4, 5]
上述代码中,将 lst 中的所有子列表合并为一个列表。[] 作为求和操作的初始值,确保结果是一个 list。虽然它很简洁,但内存效率不高。

最终我们推荐的一种方法是使用 itertools.chain()。这种方法可以避免创建中间列表,因此非常节省内存,适合处理大型数据集。

from itertools import chain
lst = [[1], [2], [3], [4], [5]]
flattened_lst = list(chain.from_iterable(lst))
print(flattened_lst)
# [1, 2, 3, 4, 5]

联合类型

Python 3.10 引入的联合类型允许变量、函数参数和返回类型接受多种类型的值。这一特性增强了代码的表现力和类型安全性,允许开发人员精确指定在给定上下文中哪些类型是可接受的。

from typing import Union

def process_data(data: Union[int, float, str]) -> None:
    print(data)

process_data(10)      # Valid
process_data(3.14)    # Valid
process_data("hello") # Valid

总结

以上是一些大家日常可以使用到的技术,这些技巧强化了在不断发展的 Python 生态系统中探索基础知识和持续学习的重要性。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-06-08 14:20
  • 阅读 ( 55 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1316 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章