以下python代码返回什么数据类型?

时间:2017-02-22 19:20:33

标签: python

在下面的python代码中,函数 bruteforce_list 返回了什么类型?

import paramiko, sys, os, socket, threading, time
import itertools,string,crypt

PASS_SIZE = 5

def bruteforce_list(charset, maxlength):
    return (''.join(candidate)
        for candidate in itertools.chain.from_iterable(itertools.product(charset, repeat=i)
        for i in range(1, maxlength + 1)))

letters_list = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQSTUVWXYZ1234567890!@#$&()'

for i in bruteforce_list(letters_list, PASS_SIZE):
     print i

我从未见过以这种方式在连接(候选)之后使用它们的循环方式。我是python的新手,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

通常在python中,您可以使用^(?:(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*bonus(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*days?(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*(?:28(?:th)?|twenty-eighth?)(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*|(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*days?(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*bonus(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*(?:28(?:th)?|twenty-eighth?)(?:(?!bonus|days?|28(?:th)?|twenty-eighth?).)*)$ 函数显示变量的类型。 所以尝试在循环type()中执行类似的操作,这应该会让您简要了解print type(i)是什么。

答案 1 :(得分:1)

正如@Mad Physicist所说,它返回一个生成器表达式。

创建生成器表达式的语法与列表推导的语法相同,只是列表推导使用方括号。

生成器表达式采用一般形式:

变量 变量 可迭代

您可以选择包含条件:

(如果条件变量 变量 可迭代

最后,你可以有多个for子句:

variable_a variable_a iterable_a variable_b iterable_b / p>

生成器表达式不会立即实现每个元素;相反,您可以迭代生成器以一次获取一个元素。当您想避免在内存中保存大型集合时,这可能很有效。