python生成器应用之字典生成

python 生成器

python 生成器,这里是指包含 yield关键字的函数,区别于类似表达式的那种情况,例如:

generator = (x*5+6 for x in range(20))

本文主要探讨 生成器函数(如下代码)在字典生成的应用。

def counts(n):
    i=0
    while i < n:
        yield i
        i +=1

关于字典

生成字典的函数,需要的必要参数:
1、组成字典的元素,可以自定义,例如一个字符(数字1-9,字母a-zA-z,符号@#$%^*&等)或者一个字符组合。
2、单一 一条字典数据中,包含的元素的个数,可以指定个数,1-n的数字,只要硬盘容量足够,可以任意长度。
组合结果由元素个数决定(元素个数的指数n**n,例如3个元素产生3 ** 3=27条数据),而不是字符个数。

字典生成代码

首先定义字典元素:

ele = list('abcdefg123456*#@')

或者通过自定义文件(文件名 dicts.txt,每个元素占一行)加载:

with open('dicts.txt') as f:
    ele = f.readlines()

然后设置 字典单条数据中包含元素的个数:

n=5

或者在命令行输入:

import sys
n=int(sys.argv[1])

下面看重点的生成器函数:

def t1(n, ele):
    a, c = ele, ele
    for x in range(n):
        yield iter(a)
        c = (i+j for i in ele for j in a)
        a = list(c)

函数中使用了生成器表达式 (i+j for i in ele for j in c),它实现了类似下面的循环嵌套:

for i in list1:
    for j in list2:
        ...

理论上,可以进行无限循环嵌套。

在调用上面的生成器函数时,返回的(除第一次外)也是生成器,分别对应的是选择所有元素中的2个、3个、4个 … n个元素时产生的字典生成器,可以根据需要选择 所有元素长度的的字典,或是 某一个元素长度的字典,下面实例调用的是最后一个生成器,即元素个数为n时生成的字典。

def main(n=5):
    tmp = t1(n, ele)
    x2=[]
    for i in tmp:
        x2 = i
    print(type(x2))
    #for j in x2:
        #print(j)
    with open('results.txt','w') as f:
        for i in x2:
            f.write('{}\n'.format(i))

上面的变量 x2 即为 函数输出的最后一个生成器,如果 n=5,x2是由5个元素组成的字典生成器,字典最后保存在results.txt文件中。

总结

通过python的生成器函数,可以输出 长度 和 组成元素 可 任意指定的字典,在 对登录页面 和 加密文件 爆破时,可以方便使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值