热门标签 | 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)

推荐阅读
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 使用lambda表达式排序Collections.sort(temp,(Stringa,Stringb)-{returnb.compareTo(a);});Collections ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
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社区 版权所有