The following Python 3.5 prints
add_date_iter == <callable_iterator object at 0xb78e218c>.
import re date_added_attrs = re.compile(r'( +ADD_DATE=)("(d+)")') add_date_iter = date_added_attrs.finditer(test_string) print("add_date_iter ==", add_date_iter)
So far, so good. BUT of what use is
0xb78e218c? It appears to be a hexadecimal memory or object address. Whatever it is, why / how if at all might a Python 3 program make use of it?
EDIT: My question is NOT about REGEX. The REGEX works fine. My question is, what’s the purpose / benefit of the hexadecimal value returned by the .finditer operation?
what's the purpose / benefit of the hexadecimal value returned by the .finditer operation?
When you write
print("add_date_iter ==", add_date_iter), you are simply converting the iterator object to a string and printing it. That is,
<callable_iterator object at 0xb78e218c> is the return value of the object's internal
The hexadecimal address is telling you where in memory the iterator is stored. It is the same value you would get if you ran
hex(id(add_date_iter)). It is generally only useful when you're trying to figure out the internals of how Python is managing memory during a certain process, or if you want to check whether two variables are holding a reference to the same object. When comparing objects, you can think of
id(a) == id(b) as a long way of writing
a is b.
For instance, if you had this code:
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)
You would get an output like this:
140665126149392 140665230088528 False 140665126149392 140665126149392 True
In the first case, even though the instance variables
val have the same value, the objects themselves are different. After writing
b = a, though, both variables now refer to the same object.
One place you can get tripped up with this is with integers, which is why you should always use
== instead of
is unless you really know what you're doing (or you're checking
is None, since
None is actually a singleton object):
a = 5 b = 5 a is b # True a = 300 b = 300 a is b # False
One final point: since Python has first class functions (i.e. functions are treated as objects), everything discussed above works with functions, too. Just reference the function without parentheses, like
* Note: If you write
__repr__ method instead
Answered by jdaz on November 18, 2021
4 Asked on December 4, 2020 by user4516211
1 Asked on December 4, 2020 by cylee
1 Asked on December 4, 2020 by orbit
2 Asked on December 4, 2020
0 Asked on December 4, 2020 by sumit-arora
2 Asked on December 4, 2020 by alphanso
1 Asked on December 3, 2020 by zerkms
0 Asked on December 3, 2020 by ookie
0 Asked on December 3, 2020 by nostromo
1 Asked on December 3, 2020 by hiddentoad
0 Asked on December 3, 2020 by atul-tirkey
4 Asked on December 3, 2020 by ossz
1 Asked on December 3, 2020 by ge-go
2 Asked on December 3, 2020 by amritkrs
Get help from others!