Python类条件:从x输入获取[x,x]输出?
我正在用Python进行一些区间计算。这是我所写内容的摘录。我想包括退化区间,即实数1的区间为[1,1] 因此,当我键入Interval(1)时,我希望返回[1,1]。但是我已经用两个参数定义了我的区间类 我无法生成子类-它仍然需要两个参数。谁能给我指一下正确的方向吗?我可以在某种意义上扩展_包含_吗 TLDR:如何从x输入中获得[x,x]输出Python类条件:从x输入获取[x,x]输出?,python,Python,我正在用Python进行一些区间计算。这是我所写内容的摘录。我想包括退化区间,即实数1的区间为[1,1] 因此,当我键入Interval(1)时,我希望返回[1,1]。但是我已经用两个参数定义了我的区间类 我无法生成子类-它仍然需要两个参数。谁能给我指一下正确的方向吗?我可以在某种意义上扩展_包含_吗 TLDR:如何从x输入中获得[x,x]输出 from numpy import * import numpy as np from pylab import * class Interval:
from numpy import *
import numpy as np
from pylab import *
class Interval:
def __init__(self, LeftEndpoint, RightEndpoint):
self.min = LeftEndpoint
self.max = RightEndpoint
if LeftEndpoint > RightEndpoint:
raise ValueError('LeftEndpoint must not be greater than RightEndpoint')
def __repr__(self): #TASK 3
return '[{},{}]'.format(self.min,self.max)
def __contains__(self, num):
if num < self.min:
raise Exception('The number is not in the given interval')
if num > self.max:
raise Exception('The number is not in the given interval')
p = Interval(1,2)
print(p) #returns [1,2]
从numpy导入*
将numpy作为np导入
从派拉布进口*
上课时间:
def uuu init uuuu(self、LeftEndpoint、righEndpoint):
self.min=LeftEndpoint
self.max=RightEndpoint
如果LeftEndpoint>RightEndpoint:
raise ValueError('LeftEndpoint不能大于RightEndpoint')
定义报告(自我):#任务3
返回'[{},{}]'.format(self.min,self.max)
def___;包含___;(self,num):
如果numself.max:
引发异常('该数字不在给定的间隔内')
p=间隔(1,2)
打印(p)#返回[1,2]
只需给RightEndpoint
一个默认值,比如None
;如果函数中仍为None
,则您知道没有为其分配值,因此可以将其设置为与LeftEndpoint
相同的值:
def __init__(self, LeftEndpoint, RightEndpoint=None):
if RightEndpoint is None:
RightEndpoint = LeftEndpoint
注意:如果遵循,则参数和局部变量名称应全部为小写字母,并带有下划线。而\uuuu contains\uuuu
方法应该真正返回True
或False
,而不是引发异常:
class Interval:
def __init__(self, left, right=None):
if right is None:
right = left
if left > right:
raise ValueError(
'left must not be greater than right')
self.left = left
self.right = right
def __repr__(self):
return f'[{self.left}, {self.right}]'
def __contains__(self, num):
return self.left <= num <= self.right
您可以使用
*args
传入数量可变的参数,然后动态分配RightEndpoint
:
def __init__(self, *args):
self.min = args[0]
if len(args) < 2:
RightEndpoint = args[0]
elif len(args) == 2:
RightEndpoint = args[1]
else:
# decide what to do with more than 2 inputs
self.max = RightEndpoint
#...
p = Interval(1,2)
print(p) #returns [1,2]
p1 = Interval(1)
print(p1) #returns [1,1]
def\uuuu初始化(self,*args):
self.min=args[0]
如果len(args)<2:
RightEndpoint=args[0]
elif len(args)=2:
RightEndpoint=args[1]
其他:
#决定如何处理2个以上的输入
self.max=RightEndpoint
#...
p=间隔(1,2)
打印(p)#返回[1,2]
p1=间隔(1)
打印(p1)#返回[1,1]
(如果您想使用关键字参数,也可以使用
**kwargs
。谢谢!我都试过了,只是一开始我没有把它设为零。回答得很好,再次感谢。仅当您需要支持任意数量的值时才使用它。对于一两个人来说,这太过分了,现在需要你处理len(args)>2
,这在这里没有意义。感谢Martijn Pieters的评论-我想我只是对在我自己的代码中使用默认参数有所警惕,因为当我不被迫调用它们时,我很容易忘记它们。因此,我宁愿使用一个变量集,在这里我考虑类/函数中可能的输入,或者显式地指定参数,而不是依赖于默认值。在这个角度上你能给出什么建议吗?那就找一个更好的编辑器,一个理解Python代码的编辑器,在自动完成或检查代码时向你显示参数。使用*args
会使这些工具更难帮助您分析代码。
def __init__(self, *args):
self.min = args[0]
if len(args) < 2:
RightEndpoint = args[0]
elif len(args) == 2:
RightEndpoint = args[1]
else:
# decide what to do with more than 2 inputs
self.max = RightEndpoint
#...
p = Interval(1,2)
print(p) #returns [1,2]
p1 = Interval(1)
print(p1) #returns [1,1]