给定一个任意python对象,确定它是否是数字的最佳方法是什么?这里is定义为acts like a number in certain circumstances.
例如,假设您正在编写矢量类.如果给出另一个向量,您想要找到点积.如果给定标量,则需要缩放整个向量.
检查,如果事情是int,float,long,bool很烦人,不包括可能像数字用户定义的对象.但是,__mul__例如,检查是不够好的,因为我刚才描述的矢量类会定义__mul__,但它不是我想要的那种数字.
我尝试检查一个变量是一个数字的任何类型(的一个实例int,float,Fraction,Decimal,等等).
我提出了这个问题及其答案:如何正确使用python的isinstance()来检查变量是否为数字?
但是,我想排除复杂的数字,如1j.
该类numbers.Real看起来完美,但它返回False的Decimal数字...
from numbers Real
from decimal import Decimal
print(isinstance(Decimal(1), Real))
# False
Run Code Online (Sandbox Code Playgroud)
相反,它可以正常工作Fraction(1).
该文档描述了一些应该与数字一起使用的操作,我在十进制实例上没有任何错误地测试它们.此外,十进制对象不能包含复数.
那么,为什么isinstance(Decimal(1), Real)会回来False呢?
虽然nan == nan总是如此False,但在许多情况下,人们希望将它们平等对待,这体现在pandas.DataFrame.equals:
相同位置的NaN被认为是相等的。
我当然可以写
def equalp(x, y):
return (x == y) or (math.isnan(x) and math.isnan(y))
Run Code Online (Sandbox Code Playgroud)
但是,这对于像非容器这样的容器[float("nan")]和isnan对非数字容器来说都是失败的(因此复杂度会增加)。
那么,人们如何比较可能包含的复杂Python对象nan呢?
PS。动机:比较大熊猫中的两行时DataFrame,我会将其转换为dicts并逐元素比较dict。
如果 python 是一种支持重载的静态编程语言,将很容易解决。我正在制作一个名为 Complex 的类,它是复数的表示(我知道 python 有它自己的,但我想自己制作一个),其中 a 是实数, b 是虚数 ( Complex(a, b))。它应该支持将 Complex 实例添加到一起 ( Complex(2, 4) + Complex(4, 5) = Complex(6, 9)),以及添加一个整数 ( Complex(2, 3) + 4 = Complex(6, 3))。但是,由于python的性质...
__add__(self, other):
Run Code Online (Sandbox Code Playgroud)
...我必须选择该类将支持哪个,因为它不会在编译时识别类型,也不支持函数的重载。最好的解决方案是什么?我是否必须编写与other参数数据类型相关的 if 语句?
我正在尝试从书籍作业中编写一个小程序,但是我在检测用户输入是否为int/float(增加到总数)或string(return error)时遇到问题.我尝试在add_to_total变量上使用.isdigit()但是当我键入float时,它会直接跳到else代码块.我试过在网上搜索但找不到明确的答案.这是我的代码:
total = 0
print("Welcome to the receipt program!")
while True:
add_to_total = raw_input("Enter the value for the seat ['q' to quit]: ")
if add_to_total == 'q':
print("*****")
print "Total: $%s" % total
break
if add_to_total.isdigit(): #Don't know how to detect if variable is int or float at the same time.
add_to_total = float(add_to_total)
total += add_to_total
else:
print "I'm sorry, but '%s' isn't valid. Please try again." % …Run Code Online (Sandbox Code Playgroud) python ×5
numbers ×2
add ×1
decimal ×1
equality ×1
int ×1
integer ×1
isinstance ×1
methods ×1
nan ×1
overloading ×1
pandas ×1
python-2.7 ×1
types ×1
variables ×1