gpt4 book ai didi

Python 生成器对象和 .join

转载 作者:太空狗 更新时间:2023-10-29 17:24:14 25 4
gpt4 key购买 nike

关于 python 和 .join() 方法的基本问题:

file1 = open(f1,"r")
file2 = open(f2,"r")
file3 = open("results","w")

diff = difflib.Differ()
result = diff.compare(file1.read(),file2.read())
file3.write("".join(result)),

上面的代码片段产生了一个很好的输出,以字符串格式存储在一个名为“results”的文件中,逐行显示了两个文件之间的差异。但是我注意到,如果我只是使用 .join() 打印“结果”而不,编译器会返回一条包含内存地址的消息。在尝试使用 .join() 将结果写入文件 without 后,编译器通知我只能在 .join( ) 方法,而不是生成器对象。因此,根据我引用的所有证据,如果我错了,请纠正我:

  1. result = diff.compare(file1.read(),file2.read()) <---- result 是生成器对象?

  2. result 是一个字符串列表,result 本身是对第一个字符串的引用?

  3. .join() 获取一个内存地址并指向第一个,然后迭代该结构中字符串的其余地址?

  4. 生成器对象是返回指针的对象?

如果我的问题不清楚,我深表歉意,但我基本上想问问python老手我的推论是否正确。我的问题不是关于可观察到的结果,而是关于 python 的内部工作原理。感谢您的所有帮助。

最佳答案

join 是字符串的一种方法。该方法接受任何可迭代对象并对其进行迭代并将内容连接在一起。 (内容必须是字符串,否则会引发异常。)

如果您尝试将生成器对象直接写入文件,您只会得到生成器对象本身,而不是它的内容。 join“展开”生成器的内容。

您可以看到一个简单、明确的生成器发生了什么:

def gen():
yield 'A'
yield 'B'
yield 'C'

>>> g = gen()
>>> print g
<generator object gen at 0x0000000004BB9090>
>>> print ''.join(g)
ABC

生成器一次分发一个内容。如果您尝试查看生成器本身,它不会执行任何操作,您只是将其视为“生成器对象”。要获取其内容,您需要遍历它们。您可以使用 for 循环、next 函数或迭代事物的任何其他函数/方法(str.join 其中)。

当你说结果“是一个字符串列表”时,你就接近这个想法了。生成器(或可迭代的)有点像“潜在列表”。它不是实际上 一次包含所有内容的列表,而是让您一次剥离每个项目。

没有一个对象是“内存地址”。生成器对象(与许多其他对象一样)的字符串表示包含一个内存地址,因此如果您打印它(如上)或将其写入文件,您将看到该地址。但这并不意味着该对象"is"该内存地址,并且该地址本身并不是真正可用的。它只是一个方便的识别标签,因此如果您有多个对象,您可以将它们区分开来。

关于Python 生成器对象和 .join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com