Python3 REGEX.finditer:hex地址在;0x…“处的可调用”迭代器对象;?
下面的Python 3.5打印Python3 REGEX.finditer:hex地址在;0x…“处的可调用”迭代器对象;?,python,python-3.x,regex,Python,Python 3.x,Regex,下面的Python 3.5打印add\u date\u iter== 到目前为止,一切顺利。但是0xb78e218c有什么用呢?它似乎是一个十六进制内存或对象地址。不管它是什么,Python 3程序为什么/如何使用它 编辑:我的问题不是关于正则表达式的。正则表达式运行良好。我的问题是,.finditer操作返回的十六进制值的目的/好处是什么 .finditer操作返回的十六进制值的用途/好处是什么 当您编写print(“add_date\u iter==”,add_date\u iter)时,
add\u date\u iter==
到目前为止,一切顺利。但是0xb78e218c
有什么用呢?它似乎是一个十六进制内存或对象地址。不管它是什么,Python 3程序为什么/如何使用它
编辑:我的问题不是关于正则表达式的。正则表达式运行良好。我的问题是,.finditer操作返回的十六进制值的目的/好处是什么 .finditer操作返回的十六进制值的用途/好处是什么 当您编写
print(“add_date\u iter==”,add_date\u iter)
时,您只需将迭代器对象转换为字符串并进行打印。也就是说,
是对象的内部\uuu str\uu
方法的返回值*
十六进制地址告诉您迭代器在内存中的存储位置。这与运行hex(id(add\u date\u iter))
时得到的值相同。通常,只有当您试图弄清楚Python在内存管理过程中是如何管理内存的,或者如果您想检查两个变量是否包含对同一对象的引用时,它才有用。在比较对象时,您可以将id(a)==id(b)
视为aa是b
更多细节。。。
例如,如果您有以下代码:
class A:
def __init__(self):
self.val = 0
a = A()
b = A()
print(id(a), id(b))
print(a is b)
b = a
print(id(a), id(b))
print(a is b)
您将得到如下输出:
140665126149392 140665230088528
False
140665126149392 140665126149392
True
在第一种情况下,即使实例变量val
具有相同的值,对象本身也是不同的。然而,在写入b=a
之后,这两个变量现在引用同一个对象
有一个地方你可能会被它绊倒,那就是为什么你应该总是使用==
而不是是,除非你真的知道你在做什么(或者你正在检查是None
,因为None
实际上是a):
最后一点:由于Python已经实现了(即函数被视为对象),所以上面讨论的所有内容也都与函数一起工作。只需引用不带括号的函数,如id(print)
*注意:如果您在交互式shell中编写add\u date\iter
而不使用print
,它将调用\uuuu repr\uu
方法
.finditer操作返回的十六进制值的用途/好处是什么
当您编写print(“add_date\u iter==”,add_date\u iter)
时,您只需将迭代器对象转换为字符串并进行打印。也就是说,
是对象的内部\uuu str\uu
方法的返回值*
十六进制地址告诉您迭代器在内存中的存储位置。这与运行hex(id(add\u date\u iter))
时得到的值相同。通常,只有当您试图弄清楚Python在内存管理过程中是如何管理内存的,或者如果您想检查两个变量是否包含对同一对象的引用时,它才有用。在比较对象时,您可以将id(a)==id(b)
视为aa是b
更多细节。。。
例如,如果您有以下代码:
class A:
def __init__(self):
self.val = 0
a = A()
b = A()
print(id(a), id(b))
print(a is b)
b = a
print(id(a), id(b))
print(a is b)
您将得到如下输出:
140665126149392 140665230088528
False
140665126149392 140665126149392
True
在第一种情况下,即使实例变量val
具有相同的值,对象本身也是不同的。然而,在写入b=a
之后,这两个变量现在引用同一个对象
有一个地方你可能会被它绊倒,那就是为什么你应该总是使用==
而不是是,除非你真的知道你在做什么(或者你正在检查是None
,因为None
实际上是a):
最后一点:由于Python已经实现了(即函数被视为对象),所以上面讨论的所有内容也都与函数一起工作。只需引用不带括号的函数,如id(print)
*注意:如果您在交互式shell中编写add_date_iter
而不使用print
,它将调用\uuuuu repr\uuuu
方法,那么您在这里使用regex的目标是什么?您还可以在想要查看的输出中包含示例输入吗?正则表达式工作正常。这不是我的问题。我的问题是,为什么成功的REGEX finditer操作返回的可调用迭代器中包含十六进制值?您正在尝试打印迭代器。这不是迭代器的用途。再说一次,你的实际目标是什么?当你打印这个特定的Python对象时,你碰巧得到了迭代器所在的内存地址,这就是你在这里看到的所有内容。不,这只是从对象继承的标准\urepr\uuuuu
的一部分。当您可能正在调试一些东西,但不应该用于任何事情时,它会很有帮助。所以只要查看一下print(object(),object(),object())
那么在这里使用regex的目的是什么?您还可以在想要查看的输出中包含示例输入吗?正则表达式工作正常。这不是我的问题。我的问题是,为什么成功的REGEX finditer操作返回的可调用迭代器中包含十六进制值?您正在尝试打印迭代器。这不是迭代器的用途。再说一次,你的实际目标是什么?当你打印这个特定的Python对象时,你碰巧得到了迭代器所在的内存地址,这就是你在这里看到的所有内容。不,这只是从对象继承的标准\urepr\uuuuu
的一部分。当您可能正在调试一些东西,但不应该用于任何事情时,它会很有帮助。所以请查看print(object(),object(),object())
非常好的解释,谢谢。我确实学到了不止一件事…很好的解释,谢谢。我确实学到了不止一件事。。。