Encerramentos completos de pilha do Python, iteradores, geradores

1. O que é um fechamento?

Closures são referências a variáveis ​​de funções internas (não globais) de funções externas, chamadas closures.
Pode tornar uma variável local residente na memória
Insira a descrição da imagem aqui

Segundo, o iterador

  • O objeto iterador é acessado a partir do primeiro elemento da coleção até que todos os elementos sejam acessados.
  • O iterador só pode avançar sem retroceder.
  • O iterador possui dois métodos básicos: iter () e next ()
  • Objetos iteráveis: str, lista, tupla, conjunto, f (iterável, também iterador), dict
  • Todos os objetos iteráveis ​​acima têm uma função __iter __ ()
  • iterável: objeto iterável com a função __iter __ () dentro
  • iterador: O iterador, que contém os
    recursos do iterador __iter __ () e __next __ () :
    1. Economize memória
    2. Mecanismo preguiçoso
    3. Não pode ser repetido, só pode ser executado para baixo
lst = [1,2,3]
print(dir(lst)

Insira a descrição da imagem aqui

lst = ["皇阿玛","皇额娘","容嬷嬷","紫薇"]
#获取迭代器
it = lst.__iter__()
#迭代器往外拿元素,__next__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())

Insira a descrição da imagem aqui

Stopiteration

A exceção StopIteration é usada para marcar a conclusão da iteração para impedir um loop infinito

lst = ["皇阿玛","皇额娘","容嬷嬷","紫薇"]
#获取迭代器
it = lst.__iter__()
#迭代器往外拿元素,__next__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())

Insira a descrição da imagem aqui

lst = ['皇阿玛','皇额娘','容嬷嬷','紫薇']
it = lst.__iter__()
while True:
	try:
		name = it.__next__()
		print(name)
	except StopIteration:
		break

Insira a descrição da imagem aqui

Terceiro, o gerador

  • A essência de um gerador é um iterador

  • Os três métodos de geração do gerador:
    1. Através da função do gerador
    2. Criando o gerador através da expressão do gerador
    3. Através da conversão de dados

  • função Gerador:
    função contém o rendimento é um gerador de funções
    (Nota: a função de gerador é executado, o gerador é adquirido, em vez de executar um gerador)

def func():
    print("我爱苹果")
    yield "也爱菠萝"
    print("想吃汉堡")
    yield "想喝可乐"

g = func()
print(g.__next__())
print(g.__next__())

Insira a descrição da imagem aqui

  • Expressão do gerador:
    (resultado da variável no objeto iterável se filtro de condição)
  • Valores:
    1, _ próximo_ ()
    2, envia (valor) para passar um valor para a posição de rendimento anterior, o primeiro e o último rendimento não precisam passar o valor
    3, pode para o loop
    4, gerador de lista (g)
  • Várias derivações e expressões geradoras:
    lista compreensões: [resultado para variável em objeto iterável se filtro]
lst = [i for i in range(1,15)]
print(lst)

Insira a descrição da imagem aqui

#找出名字里带有两个e的
names = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven',
          'Joe'],['Alice','Jill','Ana','Wendy','Jennifer',
                  'Sherry','Eva']]
lst4 = [name for first in names for name in first if name.count('e') == 2 ]
print(lst4)

Insira a descrição da imagem aqui
Derivação do dicionário: {Resultado da variável no objeto iterável se o filtro} Resultado => chave: valor

lst5 = ['alex','wusir','taibai','ritian']
lst6 = ['sb','active','white','niupi']
new_dict = {lst5[i]:lst6[i] for i in range(len(lst5))}
print(new_dict

Insira a descrição da imagem aqui

Definir compreensão: {resultado para variável em objeto iterável se filtro} chave de resultado

Derivação do conjunto: pode nos ajudar a gerar diretamente um conjunto, as características do conjunto: não ordenado, não repetido. Portanto, a derivação definida tem sua própria função de deduplicação.

A sintaxe das expressões de gerador e compreensão de lista é basicamente a mesma, exceto que [] é substituído por ()

gen = (i para i no intervalo (1.100) se i% 2 == 0)
print (gen)

Resumo:

Lá de derivação, lista tipo derivação, dicionário derivação, o conjunto de derivação, não derivação tupla
expressão gerador :( resulta para variáveis em iterables se as condições do filtro)
gerador directamente para a expressão pode gerador objecto, O objeto gerador pode ser diretamente para o loop for.O
gerador possui um mecanismo lento

Publicado 26 artigos originais · elogiado 5 · visitas 777

Acho que você gosta

Origin blog.csdn.net/weixin_44730235/article/details/105131407
Recomendado
Clasificación