我试图将异常提升代码块写入我的Python代码,以确保传递给函数的参数满足适当的条件(即使参数成为必需,类型检查参数,建立参数的边界值等等).我很满意地理解如何手动引发异常以及处理异常.
from numbers import Number
def foo(self, param1 = None, param2 = 0.0, param3 = 1.0):
if (param1 == None):
raise ValueError('This parameter is mandatory')
elif (not isinstance(param2, Number)):
raise ValueError('This parameter must be a valid Numerical value')
elif (param3 <= 0.0):
raise ValueError('This parameter must be a Positive Number')
...
Run Code Online (Sandbox Code Playgroud)
这是Python中可接受的(经过验证的)参数检查方式,但我不得不怀疑:由于Python除了if-then-else语句之外没有编写Switch-case的方法,是否有更有效或更正确的方法执行此任务?或者实施长期if-then-else语句是我唯一的选择?
在处理 Pandas 时,我试图打印对象运动学和角度状态的分析。我这样做的代码如下:
def displayData(tList, xList, zList, dxList, dzList, thetaList, dthetaList, Q_sList):
states = pd.DataFrame({ 't' : tList,
'x' : xList,
'z' : zList,
'dx' : dxList,
'dz' : dzList,
'theta' : thetaList,
'dtheta' : dthetaList,
'Q_s' : Q_sList})
print states[['t', 'x', 'z', 'dx', 'dz', 'theta', 'dtheta', 'Q_s']]
Run Code Online (Sandbox Code Playgroud)
但是,当要求打印数据时,输出将列分解到某个点之外:
t x z dx dz theta \
0 0.000 -500.000000 -100.000000 100.000000 -0.000000 0.000000
1 0.005 -499.500000 -100.000000 99.999983 0.057692 -0.000577
2 0.010 -499.000000 -99.999712 99.999933 0.115329 -0.001153
... ... ... …Run Code Online (Sandbox Code Playgroud) 我只是在3D游戏编程中更深入地使用四元数(是的,我知道矩阵并且它们没问题,但我们总是要学习一些新东西),所以,我们可以像这样旋转一些对象Pout = q*Pin*conjug(q),q在哪里是四元数,Pin是一个对象(假设我们正在使用一些框架,这个类是为我们定义的)Vector3类,conjug(q)是它的共轭后的q四元数,最后Pout是新的Vector3的对象,我们得到了在旋转初始Vector3的对象之后Pin通过一些角度α(或theta,无论你喜欢什么).另外,我知道有一种方法可以组合旋转,如下所示:q_final = q2*q1(这表示由alfa1旋转,然后由alfa2角度旋转).最后,点积表示2个四元数之间的角度,比方说球体.这对我来说很清楚.我的问题将涉及分裂,加法和减法等问题.
我的问题是:有人可以告诉我,他们在3D编程中代表什么(划分,添加,减去四元数操作)?它们将如何影响3D模型?
先谢谢您的回答.
ps如果你(DarenW,bensiu,Dharmendra,Uwe Keim,Jennis)无法理解这个问题,请留下这个话题.有人可能会有答案.谢谢.
假设我有以下示例:
class foo:
...
def bar(self, w, x, y, z, ...):
self.w = w
self.x = x
self.y = y
self.z = z
...
Run Code Online (Sandbox Code Playgroud)
我希望通过参数循环将n个属性赋值行减少bar()到一个赋值行集setattr().为此目的,有没有一种好方法可以循环通过所述论点?
我希望保留已定义的参数名称,以便限制传递给函数的参数数量以及传递它们的顺序.我也明白函数可以像对象一样处理 ; 那么有可能获得一个已定义参数的列表作为函数的属性并迭代它吗?
我有一个叫做的类run_c,用于初始化和执行运动学模拟的运行.我将默认值分配给执行之前的属性run_c,例如.所有这一切都是提取用户输入值,聚合到字典中,并将它们分配给相应的属性(如果它们存在).例如...xrun_c.__init__()__init__()run_c
import vars.Defaults as dft
class run_c:
...
dt = dft.dt
x = dft.x0
states = [ [], [], [], [] ]
...
def __init__(self, input):
for key in input.keys():
if hasattr(self, key): setattr(self, key, input[key])
...
self.execute()
Run Code Online (Sandbox Code Playgroud)
run_c.states是一个列表,用于记录run_c属性值随时间步长变化的列表.之后,run_c.execute()我在内部存储x值states[1],递增时间步长dt,并x使用速度和时间步长进行更新.这很简单,对吗?...
不过,这是问题的开始.第一次run_c创建,初始化和执行实例时,它运行完美.但是,我通过基于从JSON文件读取的列表创建,初始化和执行多个运行来操作此模拟.因此,在驱动程序模块中......
from Run import run_c
def main():
...
for runEntry in runList:
currRun = run_c(runEntry)
...
...
Run Code Online (Sandbox Code Playgroud)
会发生的是, …
python ×4
3d ×1
arguments ×1
dataframe ×1
exception ×1
graphics3d ×1
if-statement ×1
io ×1
pandas ×1
quaternions ×1
setattr ×1
typechecking ×1