Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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
是否有一个与C';的endptr参数等效的Python;斯特罗德是谁?_Python_Strtod - Fatal编程技术网

是否有一个与C';的endptr参数等效的Python;斯特罗德是谁?

是否有一个与C';的endptr参数等效的Python;斯特罗德是谁?,python,strtod,Python,Strtod,我正在尝试编写一个函数,用于拆分包含浮点数和一些单位的字符串。字符串的数字和单位之间可能有空格,也可能没有空格 在C语言中,函数有一个非常方便的参数,名为endptr,它允许您解析字符串的初始部分,并获取指向剩余部分的指针。因为这正是这个场景所需要的,所以我想知道Python中是否有类似的功能 由于float本身目前不提供此功能,因此我使用的正则表达式解决方案基于: 这并不完全足够,原因有二。首先,它重新发明了轮子。第二个问题是,如果不增加额外的复杂性,它就不能正确地识别区域设置(这就是为什么我

我正在尝试编写一个函数,用于拆分包含浮点数和一些单位的字符串。字符串的数字和单位之间可能有空格,也可能没有空格

在C语言中,函数有一个非常方便的参数,名为
endptr
,它允许您解析字符串的初始部分,并获取指向剩余部分的指针。因为这正是这个场景所需要的,所以我想知道Python中是否有类似的功能

由于
float
本身目前不提供此功能,因此我使用的正则表达式解决方案基于:

这并不完全足够,原因有二。首先,它重新发明了轮子。第二个问题是,如果不增加额外的复杂性,它就不能正确地识别区域设置(这就是为什么我不想重新发明轮子的原因)

对于记录,字符串的尾部不能包含数字将包含的任何字符。唯一真正的问题是,我不要求单位与数字之间用空格分隔,因此执行简单的
string.split(maxplit=1)
是行不通的


有没有更好的方法从字符串开头获取浮点数,这样我就可以将其余部分作为其他内容处理?

我知道这是一个愚蠢的解决方案,但这样如何:

def float_and_more(something):
    orig = something
    rest = ''
    while something:
        try:
            return float(something), rest                  
        except ValueError:
            rest = something[-1] + rest                    
            something = something[:-1]                     
    raise ValueError('Invalid value: {}'.format(orig))
你可以这样使用它:

>>> float_and_more('2.5 meters')
(2.5, 'meters')

如果您想真正使用它,您可能会使用
io.StringIO
,而不是不断地重新创建字符串。

locale.atof
?我从未使用过它,也不知道ti有多全面。
float
本身不知道区域设置。如果您想要区域设置感知,您需要类似的东西,它将拒绝一些
float
接受的东西。是的。这是个骗局。太糟糕了,那里没有任何像样的答案……我结束了这个问题,这是一个完全重复的问题。恐怕你被正则表达式卡住了。dupe链接建议从浮点解析的C源代码重新实现该函数。。。“是啊,为什么不呢?”让·弗朗索瓦·法布说。可能如果我找到更好的答案,我会发布另一个问题的答案……嘿,同样的想法:)@Jean-Françoisfare。同样的评论。二进制搜索对于长字符串会更好,老实说,这听起来根本不是一个好方法。
>>> float_and_more('2.5 meters')
(2.5, 'meters')