在下面的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的新手,我将不胜感激。
答案 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>
生成器表达式不会立即实现每个元素;相反,您可以迭代生成器以一次获取一个元素。当您想避免在内存中保存大型集合时,这可能很有效。