以下是可能的输入:
a="50"
b=50
c=50.1
d="50.1"
1-通用输入:
此函数的输入可以是任何内容!
判断给定变量是否为数值。数值字符串由可选符号、任意数量的数字、可选小数部分和可选指数部分组成。因此,+0123.45e6 是一个有效的数值。十六进制(例如 0xf4c3b00c)和二进制(例如 0b10100111001)表示法是不被允许的。
is_numeric 函数
import ast
import numbers
def is_numeric(obj):
if isinstance(obj, numbers.Number):
return True
elif isinstance(obj, str):
nodes = list(ast.walk(ast.parse(obj)))[1:]
if not isinstance(nodes[0], ast.Expr):
return False
if not isinstance(nodes[-1], ast.Num):
return False
nodes = nodes[1:-1]
for i in range(len(nodes)):
if i % 2 == 0:
if not isinstance(nodes[i], ast.UnaryOp):
return False
else:
if not isinstance(nodes[i], (ast.USub, ast.UAdd)):
return False
return True
else:
return False
测试:
>>> is_numeric("54")
True
>>> is_numeric("54.545")
True
>>> is_numeric("0x45")
True
is_float函数
判断给定变量是否为浮点数。浮点字符串由可选符号、任意数量的数字、小数点和分数组成。
import ast
def is_float(obj):
if isinstance(obj, float):
return True
if isinstance(obj, int):
return False
elif isinstance(obj, str):
nodes = list(ast.walk(ast.parse(obj)))[1:]
if not isinstance(nodes[0], ast.Expr):
return False
if not isinstance(nodes[-1], ast.Num):
return False
if not isinstance(nodes[-1].n, float):
return False
nodes = nodes[1:-1]
for i in range(len(nodes)):
if i % 2 == 0:
if not isinstance(nodes[i], ast.UnaryOp):
return False
else:
if not isinstance(nodes[i], (ast.USub, ast.UAdd)):
return False
return True
else:
return False
测试:
>>> is_float("5.4")
True
>>> is_float("5")
False
>>> is_float(5)
False
>>> is_float("5")
False
>>> is_float("+5.4")
True
什么是ast?
2- 如果您有信心变量内容是字符串(String):
使用str.isdigit()方法。
>>> a=454
>>> a.isdigit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'isdigit'
>>> a="454"
>>> a.isdigit()
True
3-数字输入:
检测整数值:
>>> isinstance("54", int)
False
>>> isinstance(54, int)
True
>>>
检测浮点数:
>>> isinstance("45.1", float)
False
>>> isinstance(45.1, float)
True
x = float('0.00'); if x: use_float(x);
,你的代码中现在有一个bug。这些函数抛出异常而不是一开始返回None
的原因是为了避免Truthy值。更好的解决方案是在需要使用时避免实用程序函数,而是在调用float时使用try catch语句块捕获异常。 - ovangle