如何在python中使用生成器生成文本?

如何在python中使用生成器生成文本?,python,generator,Python,Generator,我想用python生成器生成一个文本 我是一个初学者,最近开始学习python,我在网上搜索过,但没有发现任何有用的东西 def make_text(n): b = ["hello"] yield n+b n = ['how are you', 'what is your name'] for x in range(2): title = driver.find_element_by_xpath('//*[@id="title"]') title.send_key

我想用python生成器生成一个文本

我是一个初学者,最近开始学习python,我在网上搜索过,但没有发现任何有用的东西

def make_text(n):
    b = ["hello"]
    yield n+b
n = ['how are you', 'what is your name']
for x in range(2):
    title = driver.find_element_by_xpath('//*[@id="title"]')
    title.send_keys(make_text(n))
我想得到:

hello how are you 
hello what's your name? 
但我得到了这个错误:

object of type 'generator' has no len() 

提前感谢

以下是您可以做的基本示例。您需要迭代
yield
ed对象

def make_text(word):
    greetings = ['how are you', 'what is your name']
    for greet in greetings:
        yield "{} {}".format(word, greet)

def say():
    texts = ['hello',]
    for text in texts:
        x = make_text(text)
        for n in x:
            print(n)
            title = driver.find_element_by_xpath('//*[@id="title"]')
            title.send_keys(n)


say()
产出

hello how are you
hello what is your name

这里有一个你能做的基本例子。您需要迭代
yield
ed对象

def make_text(word):
    greetings = ['how are you', 'what is your name']
    for greet in greetings:
        yield "{} {}".format(word, greet)

def say():
    texts = ['hello',]
    for text in texts:
        x = make_text(text)
        for n in x:
            print(n)
            title = driver.find_element_by_xpath('//*[@id="title"]')
            title.send_keys(n)


say()
产出

hello how are you
hello what is your name

更适合初学者的代码版本是:

def make_text(n):
    b = ["hello"]
    return n + b

words = ['how are you', 'what is your name']

for word in words:
    text = make_text(word)
    print(text)

更适合初学者的代码版本是:

def make_text(n):
    b = ["hello"]
    return n + b

words = ['how are you', 'what is your name']

for word in words:
    text = make_text(word)
    print(text)

为什么不使用
return n+b
而不是
yield n+b
?生成器将与生成器上的迭代一起使用。我在代码中没有这样做。如果迭代
生成文本()
标题,代码将不会抛出该错误。send\u keys
检查传递的
参数的
len
?如果是这种情况,则无法将生成器传递到
标题。发送密钥
:)。不管怎样,你为什么要用
generator
s来完成这个任务?@hansolo我想在循环第一次运行时听到“你好吗”,然后问你叫什么名字time@reportgunner我希望它是一台发电机,我不认为它是一个没有屈服的生成器,为什么不使用
返回n+b
而不是
产生n+b
?生成器应该与生成器上的迭代一起使用。我在代码中没有这样做。如果迭代
生成文本()
标题,代码将不会抛出该错误。send\u keys
检查传递的
参数的
len
?如果是这种情况,则无法将生成器传递到
标题。发送密钥
:)。不管怎样,你为什么要用
generator
s来完成这个任务?@hansolo我想在循环第一次运行时听到“你好吗”,然后问你叫什么名字time@reportgunner我希望它是一台发电机,我不认为它是一台没有产量的发电机