- 主题:python3时代一切皆generator之后如何流式处理字符串?
旧函数:
def escapeMarkdown(s):
out = ""
for c in s:
if c in r"\`*_{}[]<>()#+-.!|=":
out += "\\" + c
else:
out += c
return out
打算改为:
def escapeMarkdown(s):
for c in s:
if c in r"\`*_{}[]<>()#+-.!|=":
yield "\\" + c
else:
yield c
但是函数返回的对象是个generator
print这个返回结果的时候是这样的:
'<generator object escapeMarkdown at 0x7f88a3f81350>'
这可怎么搞?
如果把这个函数改成generator,调用它的地方居然全都需要改吗?
--
FROM 139.227.18.*
【 在 milksea 的大作中提到: 】
: 你还得join,结果效果还不如原来的。
: generator是延迟求值,你这里没这个需要。
可以写的简单一些而已
generator不是iteratable吗?print之类的函数不能直接对着它一个字一个字往外读吗?
还是我理解错了?
--
FROM 139.227.18.*
【 在 xuanqing 的大作中提到: 】
: 我理解print只是把对象的__str__给打印出来吧
这就是问题啊……唉
它咋没把generator当作一个“和str类似可以一个字一个字读”的东西呢?
: 而且generator不是出一轮之后就没了吗
: 你这一print不是还要再生成一轮
我其实就只用一次啊
--
FROM 139.227.18.*
【 在 xuanqing 的大作中提到: 】
: 标 题: Re: python3时代一切皆generator之后如何流式处理字符串?
: 发信站: 水木社区 (Thu Aug 29 23:12:59 2024), 站内
:
:
: 【 在 JulyClyde 的大作中提到: 】
: : 标 题: Re: python3时代一切皆generator之后如何流式处理字符串?
: : 发信站: 水木社区 (Thu Aug 29 10:45:11 2024), 站内
: :
: :
: : 【 在 xuanqing 的大作中提到: 】
: : : 我理解print只是把对象的__str__给打印出来吧
: : 这就是问题啊……唉
: : 它咋没把generator当作一个“和str类似可以一个字一个字读”的东西呢?
: 那这样和之前不就没什么区别了吗, 为啥还要改呢
就是没打算改外边的读法啊
只想改里边的写法
: : : 而且generator不是出一轮之后就没了吗
: : : 你这一print不是还要再生成一轮
: : 我其实就只用一次啊
: 你是要用来做串联处理吗
: 这么在意generator
我不太喜欢那种
在里边把中间结果存起来,循环循环循环
最后一股脑扔出去的写法
觉得比较麻烦
一次生成一个然后扔出去,我这里能至少节省一层缩进
--
FROM 139.227.18.*
呜呜呜
我就是想节省一个“把总结果攒齐了”的步骤
【 在 song023 的大作中提到: 】
: 你这个函数改成generater没有任何意义,完全是附庸风雅,浪费表情
--
FROM 139.227.18.*
为什么啊?不是流式处理吗,出来一个处理一个啊
【 在 song023 的大作中提到: 】
: 那用generate 你调用方不是也得等结果攒齐, 你这种场景完全就是浪费表情。 要看具体的功能场景
--
FROM 139.227.18.*
不错不错
【 在 lengxinyi 的大作中提到: 】
: 你写的是python版的c
: 要是我实现就这么写:
: def escape_markdown(s):
: markdown_special_chars = r"\`*_{}[]<>()#+-.!|="
: return ''.join(f'\\{c}' if c in markdown_special_chars else c for c in s)
--
FROM 139.227.18.*