Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3 REGEX.finditer:hex地址在;0x…“处的可调用”迭代器对象;?_Python_Python 3.x_Regex - Fatal编程技术网

Python3 REGEX.finditer:hex地址在;0x…“处的可调用”迭代器对象;?

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)时,

下面的Python 3.5打印
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)
视为a
a是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)
视为a
a是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())
非常好的解释,谢谢。我确实学到了不止一件事…很好的解释,谢谢。我确实学到了不止一件事。。。