Return一次一个字
Return one word at a time
我有一个函数,它接受一个文本文件并一个一个地打印文件中的每个单词,每个单词一个新行。
这是执行我上面所说的代码:
def print_one_word():
with open("test_script.txt", "r") as f:
lines = f.readlines()
word_current = []
for line in lines:
for word in line.split():
word_current.append(word)
print("".join(word_current))
word_current.clear()
示例,具有指定的文本文件内容:
test_script.txt
具有内容(按格式):stack, hello test python's name
函数 print_one_word()
会将以下内容打印到标准输出(按格式):
stack,
hello
test
python's
name
目标是将每个单词一个接一个地传递给第二个函数,该函数将对其执行一些操作(例如:将第一个字母大写)。然而,最重要的部分是它只向第二个函数发送一个单词,一旦执行操作,就会发送下一个单词。
为此,我将 print
替换为 return
,在意识到这行不通(只会发送一个字)后,我尝试使用 yield
。但是,它仍然只向第二个函数发送一个字,然后停止(不会继续发送后面的字)。
我还尝试了一些方法(创建一个单词列表,不带格式打印该列表,然后清除列表),例如简单地打印 word
等等。不幸的是,我得到了同样的结果;我可以一次一个地打印每个单词,但不能一次一个地向第二个函数发送每个单词。
有人有什么建议吗?提前致谢。
编辑,为清楚起见:
第二个函数接受一个参数,我用第一个函数作为参数。
示例:
def operation(script):
does some things
operation(print_one_word())
只需将所有单词存储到一个列表中,然后调用您想要的任何函数(在这种情况下,我之后会调用 do_something()
:
def do_something(word):
print(word.upper())
def print_one_word():
with open("test_script.txt", "r") as f:
lines = f.readlines()
all_words = []
for line in lines:
for word in line.split():
all_words.append(word)
print(word)
for word in all_words:
do_something(word)
print_one_word()
输出:
stack,
hello
test
python's
name
STACK,
HELLO
TEST
PYTHON'S
NAME
这是一个示例,说明如何 return 列表并从函数中生成,请记住 yield
return 生成器对象,如果你想重用生成的结果,你需要列出它们:
def yield_words():
with open("test_script.txt", "r") as f:
lines = f.readlines()
for line in lines:
for word in line.split():
yield word
def list_words():
with open("test_script.txt", "r") as f:
return [word
for line in f.readlines()
for word in line.split()]
def operation(prefix, word):
print(f'{prefix} {word}')
yielded_words = list(yield_words())
listed_words = list_words()
for word in listed_words:
operation('listed', word)
for word in yielded_words:
operation('yielded', word)
输出:
listed this
listed is
listed a
listed test
listed hello
listed there
yielded this
yielded is
yielded a
yielded test
yielded hello
yielded there
我有一个函数,它接受一个文本文件并一个一个地打印文件中的每个单词,每个单词一个新行。
这是执行我上面所说的代码:
def print_one_word():
with open("test_script.txt", "r") as f:
lines = f.readlines()
word_current = []
for line in lines:
for word in line.split():
word_current.append(word)
print("".join(word_current))
word_current.clear()
示例,具有指定的文本文件内容:
test_script.txt
具有内容(按格式):stack, hello test python's name
函数 print_one_word()
会将以下内容打印到标准输出(按格式):
stack,
hello
test
python's
name
目标是将每个单词一个接一个地传递给第二个函数,该函数将对其执行一些操作(例如:将第一个字母大写)。然而,最重要的部分是它只向第二个函数发送一个单词,一旦执行操作,就会发送下一个单词。
为此,我将 print
替换为 return
,在意识到这行不通(只会发送一个字)后,我尝试使用 yield
。但是,它仍然只向第二个函数发送一个字,然后停止(不会继续发送后面的字)。
我还尝试了一些方法(创建一个单词列表,不带格式打印该列表,然后清除列表),例如简单地打印 word
等等。不幸的是,我得到了同样的结果;我可以一次一个地打印每个单词,但不能一次一个地向第二个函数发送每个单词。
有人有什么建议吗?提前致谢。
编辑,为清楚起见:
第二个函数接受一个参数,我用第一个函数作为参数。
示例:
def operation(script):
does some things
operation(print_one_word())
只需将所有单词存储到一个列表中,然后调用您想要的任何函数(在这种情况下,我之后会调用 do_something()
:
def do_something(word):
print(word.upper())
def print_one_word():
with open("test_script.txt", "r") as f:
lines = f.readlines()
all_words = []
for line in lines:
for word in line.split():
all_words.append(word)
print(word)
for word in all_words:
do_something(word)
print_one_word()
输出:
stack,
hello
test
python's
name
STACK,
HELLO
TEST
PYTHON'S
NAME
这是一个示例,说明如何 return 列表并从函数中生成,请记住 yield
return 生成器对象,如果你想重用生成的结果,你需要列出它们:
def yield_words():
with open("test_script.txt", "r") as f:
lines = f.readlines()
for line in lines:
for word in line.split():
yield word
def list_words():
with open("test_script.txt", "r") as f:
return [word
for line in f.readlines()
for word in line.split()]
def operation(prefix, word):
print(f'{prefix} {word}')
yielded_words = list(yield_words())
listed_words = list_words()
for word in listed_words:
operation('listed', word)
for word in yielded_words:
operation('yielded', word)
输出:
listed this
listed is
listed a
listed test
listed hello
listed there
yielded this
yielded is
yielded a
yielded test
yielded hello
yielded there