[text] slightly improve performance of 'extract' functions

by using 'None' instead of '0' as default 'pos' value
this only saves a few nanoseconds per call, but still
This commit is contained in:
Mike Fährmann
2025-05-23 17:53:28 +02:00
parent f3ed15573a
commit fe39b7d8c8

View File

@@ -100,7 +100,7 @@ def nameext_from_url(url, data=None):
return data
def extract(txt, begin, end, pos=0):
def extract(txt, begin, end, pos=None):
"""Extract the text between 'begin' and 'end' from 'txt'
Args:
@@ -125,7 +125,7 @@ def extract(txt, begin, end, pos=0):
last = txt.index(end, first)
return txt[first:last], last+len(end)
except Exception:
return None, pos
return None, 0 if pos is None else pos
def extr(txt, begin, end, default=""):
@@ -137,14 +137,14 @@ def extr(txt, begin, end, default=""):
return default
def rextract(txt, begin, end, pos=-1):
def rextract(txt, begin, end, pos=None):
try:
lbeg = len(begin)
first = txt.rindex(begin, 0, pos)
first = txt.rindex(begin, None, pos)
last = txt.index(end, first + lbeg)
return txt[first + lbeg:last], first
except Exception:
return None, pos
return None, -1 if pos is None else pos
def rextr(txt, begin, end, pos=None, default=""):
@@ -156,7 +156,7 @@ def rextr(txt, begin, end, pos=None, default=""):
return default
def extract_all(txt, rules, pos=0, values=None):
def extract_all(txt, rules, pos=None, values=None):
"""Calls extract for each rule and returns the result in a dict"""
if values is None:
values = {}
@@ -164,10 +164,10 @@ def extract_all(txt, rules, pos=0, values=None):
result, pos = extract(txt, begin, end, pos)
if key:
values[key] = result
return values, pos
return values, 0 if pos is None else pos
def extract_iter(txt, begin, end, pos=0):
def extract_iter(txt, begin, end, pos=None):
"""Yield values that would be returned by repeated calls of extract()"""
try:
index = txt.index
@@ -182,7 +182,7 @@ def extract_iter(txt, begin, end, pos=0):
return
def extract_from(txt, pos=0, default=""):
def extract_from(txt, pos=None, default=""):
"""Returns a function object that extracts from 'txt'"""
def extr(begin, end, index=txt.index, txt=txt):
nonlocal pos