热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python函数与生成器详解

本文介绍了Python中*args和**kwargs的使用方法,以及如何通过lambda表达式、map和filter函数处理数据。同时,探讨了enumerate和zip函数的应用,并展示了如何使用生成器函数处理大数据集。

*args 和 **kwargs


*args 用于传递任意数量的位置参数,这些参数将被收集到一个元组中。而 **kwargs 则用于传递关键字参数,这些参数会被收集到一个字典中。



def func(*args, **kwargs):
print('位置参数:', args)
for key, value in kwargs.items():
print(f'{key}: {value}')


lambda 表达式


lambda 表达式是一种简洁的方式定义单行函数。例如,可以使用 lambda 表达式快速创建一个匿名函数。



map 和 filter 函数


map 函数接受一个函数和一个序列作为参数,返回一个新的序列,该序列中的每个元素都是原序列中的元素经过给定函数处理后的结果。filter 函数则用于过滤序列,返回满足条件的元素。



# 使用 map 函数
result = list(map(lambda x: x % 2, range(10)))
print(result) # 输出: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

# 使用 filter 函数
filtered_result = list(filter(lambda x: x % 2, range(10)))
print(filtered_result) # 输出: [1, 3, 5, 7, 9]


iter 和 next 函数


iter 函数用于创建迭代器,而 next 函数用于从迭代器中获取下一个值。



# 创建一个列表
flash = ['jay garrick', 'barry allen', 'wally west', 'bart allen']

# 创建一个迭代器
superhero = iter(flash)

# 打印每个元素
print(next(superhero)) # 输出: jay garrick
print(next(superhero)) # 输出: barry allen
print(next(superhero)) # 输出: wally west
print(next(superhero)) # 输出: bart allen


enumerate 函数


enumerate 函数用于将一个可迭代对象(如列表)转换为索引-值对的枚举对象。



a = ['a', 'b', 'c', 'dd']
enu_a = enumerate(a)
print(type(enu_a)) # 输出:
list_enu_a = list(enu_a)
print(list_enu_a) # 输出: [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'dd')]

# 从索引 100 开始
print(list(enumerate(a, start=100))) # 输出: [(100, 'a'), (101, 'b'), (102, 'c'), (103, 'dd')]


zip 函数


zip 函数用于将多个可迭代对象中的元素配对,返回一个元组的列表。



a = ['a', 'b', 'c', 'dd']
b = ['q', 'w', 'e', 'rr']
c = ['a', 's', 'd', 'ff']

# 使用 zip 函数
print(list(zip(a, b, c))) # 输出: [('a', 'q', 'a'), ('b', 'w', 's'), ('c', 'e', 'd'), ('dd', 'rr', 'ff')]


处理大数据集


当处理大量数据时,可以使用 chunksize 参数分块读取文件,避免内存不足的问题。



import pandas as pd

# 初始化一个空字典
counts_dict = {}

# 分块读取文件
for chunk in pd.read_csv('tweets.csv', chunksize=10):
# 遍历 DataFrame 中的列
for entry in chunk['lang']:
if entry in counts_dict.keys():
counts_dict[entry] += 1
else:
counts_dict[entry] = 1

# 打印结果
print(counts_dict)


生成器函数


生成器函数通过 yield 关键字逐个生成值,适用于处理大数据集,避免一次性加载所有数据导致内存不足。



# 创建一个字符串列表
lannister = ['cersei', 'jaime', 'tywin', 'tyrion', 'joffrey']

# 创建一个生成器对象
lengths = (len(person) for person in lannister)

# 打印生成器中的值
for value in lengths:
print(value)

# 定义生成器函数
def get_lengths(input_list):
"""生成器函数,返回输入列表中每个字符串的长度。"""
for person in input_list:
yield len(person)

# 打印生成器函数的结果
for value in get_lengths(lannister):
print(value)

推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 在 Swift 编程中,遇到错误提示“一元运算符 '!' 不能应用于 '()' 类型的操作数”,通常是因为尝试对没有返回值的方法或函数应用逻辑非运算符。本文将详细解释该错误的原因,并提供解决方案。 ... [详细]
author-avatar
Huiying_Liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有