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

推荐阅读
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社区 版权所有