如何读取函数的多种形式的属性?
How to read multiple forms of attributes of function?
我需要为我的多项式函数加载属性,但它以不同的形式加载。
在作业中,我有 3 个表单值,但我不知道如何读取所有这些值。其中一个作为 list() 输入,下一个作为元素输入,最后一个由多项式的度数输入(这对我来说是最大的问题)。
p1 = Polynomial([1,-3,0,2])
p2 = Polynomial(1,-3,0,2)
p3 = Polynomial(x0=1,x3=2,x1=-3)
>>> print(*p*)
2x^3 - 3x + 1
我已经尝试过类似的方法:
class Polynomial(object):
def __init__(self,*X):
self.x = X
def __str__(self):
index = 0
while True:
element = element+self.x[index]+"x^"+index
但这不是第三种情况,不适用于第一种和第二种情况。
使用
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
第一种情况,args
会包含[[1,-3,0,2]]
(所以你要操作args[0]
)
在第二种情况下,args
将包含[1,-3,0,2]
在最后一种情况下,kwargs
将包含 { x0: 1, x3: 2, x1: -3 }
在最后一种情况下,要将 kwargs
翻译成您想要的列表(IE [1,-3,0,2]
),您可以
[kwargs.get("x0", 0), kwargs.get("x1", 0), kwargs.get("x2", 0), kwargs.get("x3", 0)]
这将为您提供您想要的 kwargs
值的列表,如果没有找到则为 0。 (更好的方式:[kwargs.get(x, 0) for x in ["x0","x1","x2","x3"]]
)
为了按照指定定义您的 class 构造函数,您需要它能够在给定 args 时在列表和多个元素之间排序,或者在给出 **kwargs 时能够在多个关键字参数之间排序。
假设用户没有搞砸输入,这将是一个有效的例子:
class Polynomial:
"""
Assuming max. degree is always 3
"""
def __init__(self, *args, **kwargs):
if args:
if len(args) == 1: # here user gave a list
self.x0 = args[0][0]
self.x1 = args[0][1]
self.x2 = args[0][2]
self.x3 = args[0][3]
elif len(args) == 4: # here we have the four coefficients
self.x0 = args[0]
self.x1 = args[1]
self.x2 = args[2]
self.x3 = args[3]
elif kwargs: # if args are not present, we check if keywords arguments are
self.x0 = kwargs['x0']
self.x1 = kwargs['x1']
self.x2 = kwargs['x2']
self.x3 = kwargs['x3']
这里有一个关于参数处理的教程:https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
现在您可以修改它,以便考虑多度、缺少关键字、输入错误等...
有时,输入检查和清理可能非常复杂,因此需要一个完整的其他方法定义。
我需要为我的多项式函数加载属性,但它以不同的形式加载。
在作业中,我有 3 个表单值,但我不知道如何读取所有这些值。其中一个作为 list() 输入,下一个作为元素输入,最后一个由多项式的度数输入(这对我来说是最大的问题)。
p1 = Polynomial([1,-3,0,2])
p2 = Polynomial(1,-3,0,2)
p3 = Polynomial(x0=1,x3=2,x1=-3)
>>> print(*p*)
2x^3 - 3x + 1
我已经尝试过类似的方法:
class Polynomial(object):
def __init__(self,*X):
self.x = X
def __str__(self):
index = 0
while True:
element = element+self.x[index]+"x^"+index
但这不是第三种情况,不适用于第一种和第二种情况。
使用
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
第一种情况,args
会包含[[1,-3,0,2]]
(所以你要操作args[0]
)
在第二种情况下,args
将包含[1,-3,0,2]
在最后一种情况下,kwargs
将包含 { x0: 1, x3: 2, x1: -3 }
在最后一种情况下,要将 kwargs
翻译成您想要的列表(IE [1,-3,0,2]
),您可以
[kwargs.get("x0", 0), kwargs.get("x1", 0), kwargs.get("x2", 0), kwargs.get("x3", 0)]
这将为您提供您想要的 kwargs
值的列表,如果没有找到则为 0。 (更好的方式:[kwargs.get(x, 0) for x in ["x0","x1","x2","x3"]]
)
为了按照指定定义您的 class 构造函数,您需要它能够在给定 args 时在列表和多个元素之间排序,或者在给出 **kwargs 时能够在多个关键字参数之间排序。
假设用户没有搞砸输入,这将是一个有效的例子:
class Polynomial:
"""
Assuming max. degree is always 3
"""
def __init__(self, *args, **kwargs):
if args:
if len(args) == 1: # here user gave a list
self.x0 = args[0][0]
self.x1 = args[0][1]
self.x2 = args[0][2]
self.x3 = args[0][3]
elif len(args) == 4: # here we have the four coefficients
self.x0 = args[0]
self.x1 = args[1]
self.x2 = args[2]
self.x3 = args[3]
elif kwargs: # if args are not present, we check if keywords arguments are
self.x0 = kwargs['x0']
self.x1 = kwargs['x1']
self.x2 = kwargs['x2']
self.x3 = kwargs['x3']
这里有一个关于参数处理的教程:https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
现在您可以修改它,以便考虑多度、缺少关键字、输入错误等... 有时,输入检查和清理可能非常复杂,因此需要一个完整的其他方法定义。