python基础二(续)

生成器

  • 使用场景
    在使用列表时,很多时候我们不会一下子使用数据,通常都是一个一个使用;当数据较大的时候,定义一个列表会是程序内存占用突然增大,为了解决此类问题,python中引用了生成器
  • 生成方式:
    方式一:将列表生成式的[]改为()即可
lt=(i for i in range(3))
print(lt)

方式2:在函数中使用yield关键字

def test(n):
	lt = []
	for i in range (1,n+1):
		lt.append(i)
	return lt
print(test(10))
  • 使用说明:
    生成器对象保存的是特定数据的生成算法,而不是特定的所有数据
    使用任意一种方式操作,都是单次的
    生成器可以做的操作:遍历、next、转换为列表

迭代器

  • 定义:能够使用for-in进行遍历,并且可以使用next函数进行迭代的对象
  • 说明:
    生成器就是一种特殊的迭代器
    判断一个对象是否是迭代器
from collections import Iterator
#判断是否是迭代器
print(isinstance(lt,Iterator))
  • 字符串及容器类型的对象都不是迭代器,他们都是可迭代对象

可迭代对象

  • 定义:可以使用for-in遍历的对象,都是可迭代对象
  • 说明:
    • 前面学习过的字符串及容器类型的对象都是可迭代对象
    • 迭代器一定是可迭代对象
    • 判断一个对象是否是可迭代对象
from collections import Iterable, Iterator

lt = [1, 2, 3]

# 判断是否是可迭代对象
print(isinstance(lt, Iterable))
# 判断是否是迭代器
print(isinstance(lt, Iterator))

iter:可以将可迭代对象转换为迭代器

random

import random

# 生成指定范围内的随机整数
print(random.randint(1, 10))

# 生成0~1之间的随机小数
print(random.random())

# 生成指定范围内的随机整数,可以指定步幅
print(random.randrange(1, 10, 2))

lt = [1, 2, 3, 4, 5, 6, 7]
# 从容器对象或字符串中随机挑选一个元素
print(random.choice(lt))
# print(random.choice('ashdaiapo'))

# 从容器对象中随机挑取指定个数的元素
print(random.sample(lt, 3))

# 从容器对象中随机挑取一个元素,sample函数个数为1的情况
print(random.choices(lt))

# 打乱一个列表
random.shuffle(lt)
print(lt)

高级函数

  • map
    参数:
func :一个函数
iter:一个可迭代对象

功能:
将可迭代对象遍历,每个元素都是用该函数处理一遍,然后返回,保存这种算法的迭代器
使用:

from collections import Iterator
lt = [1, 2, 3, 4, 5]

def pingfang(n):
    return n * n

# 返回map对象,是一个迭代器
# ret = map(pingfang, lt)

ret = map(lambda x: x*x, lt)
print(isinstance(ret, Iterator))
print(list(ret))

# print(next(ret))
# print(next(ret))

  • filter
    参数:
function:一个函数
iterable:可迭代对象

功能:
使用function依次作用与可迭代对象中的每个元素,当返回结果为Ture时保留该元素。返回filter对象,是一个迭代器。

  • reduec
    参数
function:一个函数
sequence:一个序列

功能:
首先从序列中取出前两个元素,作为function的参数处理一下
处理完的结果与下一个元素再使用function处理一下
处理结束,将处理完的结果返回

  • 示例
rom functools import reduce

lt = [1, 2, 3, 4, 5]

def add(a, b):
	return a + b

# ret = reduce(add, lt)
# ret = reduce(lambda x, y: x*y, lt)
ret = reduce(lambda x, y: x*10 + y, lt)
print(ret)  

猜你喜欢

转载自blog.csdn.net/weixin_44146168/article/details/85718114
今日推荐