python - Python:在函数本身中打印解析函数的结果,还是让函数返回结果并将其打印为外部调用函数?
问题描述
我的问题可能是一个基本的问题,但我还没有找到任何答案。我的目标是编写一个程序来解析文本文件中的新条目,并在该行超过 5 个字符时输出它们。考虑以下按预期工作的代码:
from pygtail import Pygtail
def parse(input):
for line in input:
if len(line) > 5:
print(line)
def main():
tail = Pygtail('D:\\test.txt')
while True:
parse(tail)
main()
但是,如果我希望 parse 函数返回一个值,而 main 函数打印返回的内容,我会None
在输出中一遍又一遍地得到。错误代码:
from pygtail import Pygtail
def parse(input):
for line in input:
if len(line) > 5:
return line
def main():
tail = Pygtail('D:\\test.txt')
while True:
x = parse(tail)
print(x)
main()
我知道这None
是默认返回值,但我没有得到的是,当我尝试在文件中保存更长的行时,它似乎并不重要,并且会一直打印出来None
。它会以某种方式弄乱文件的偏移量吗?在我看来,这两个版本的代码都应该表现得一样,但事实并非如此。任何人都可以解释为什么会这样吗?
解决方案
这是 a 的经典用法generator
。这是一个类似函数的项,每次调用都会返回一个结果;在每个连续的呼叫中,它将从中断的地方继续。你迭代结果。
def parse(input):
for line in input:
if len(line) > 5:
yield line
def main():
tail = Pygtail('D:\\test.txt')
for x in parse(tail):
print(x)
你几乎肯定用过range
这样的。
推荐阅读
- elasticsearch - 如何在 Elasticsearch 中修复“curl: (23) Failed writing body (4096 != 9142)”
- wcf - 使用 SwaggerWcf 时如何查看我的 Swagger 文档?
- forms - 内联表单输入和提交按钮在屏幕宽度 < 576 像素处未对齐
- python-2.7 - pypi 上 GEOS 的更高版本
- python - 使用 Python 合并 PDF 文件
- php - 如何将 API 请求限制为每个用户同时一个?
- angular - Angular 7 Singleton Service 在两个组件之间进行通信
- python - 如何使用 Python 对文本文件执行数据库 CRUD 操作?
- php - 为 Laravel Voyager 创建数据导入页面
- bundler - BuildBundlerMinifier 可以在 JetBrains Rider 中更新 FILE SAVE 上的捆绑包吗?