gpt4 book ai didi

python - 如何在 Python 中动态选择和传递命名参数?

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:19 33 4
gpt4 key购买 nike

有效载荷是一个逗号分隔的数据 block ,表示来自逆变器的读数。这些读数需要存储在名为 InverterHistory 的表中。每个字段并不总是有一个值。该模型已经设置为允许字段为空/空白。所以我试图在将值分配给字段之前检查是否存在值。这是我目前所拥有的:

i = Inverter.objects.get(mac=u)
payload.reverse()

try:
ac_volts_a = str(payload.pop())
ac_volts_b = str(payload.pop())
ac_volts_c = str(payload.pop())
ac_current_a = str(payload.pop())
ac_current_b = str(payload.pop())
ac_current_c = str(payload.pop())
dc_volts = str(payload.pop())
dc_current = str(payload.pop())
kw_out = str(payload.pop())
mwh_total = str(payload.pop())
current_time = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")

i_data = InverterHistory(
inverter = i,
if ac_volts_a:
voltage_ac_a = float(ac_volts_a),
if ac_volts_b:
voltage_ac_b = float(ac_volts_b),
if ac_volts_c:
voltage_ac_c = float(ac_volts_c),
if ac_current_a:
current_ac_a = float(ac_current_a),
if ac_current_b:
current_ac_b = float(ac_current_b),
if ac_current_c:
current_ac_c = float(ac_current_c),
if dc_volts:
voltage_dc = float(dc_volts),
if dc_current:
current_dc = float(dc_current),
if kw_out:
kwout = float(kw_out),
if mwh_total:
mwh = float(mwh_total),
recordTime = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"))
i_data.save()
except Exception, e:
print >> sys.stderr, "Error While Recording Inverter History"
print >> sys.stderr, e
raise Http404

我是 python 的新手,不知道如何正确编写上述代码。当我尝试编译代码时,在 if 语句开始的地方出现错误。我怎样才能修复上面的代码,以便它能够按需要编译和工作?

最佳答案

当您编写 i_data = InverterHistory(...) 时,您正在创建一个类型为 InverterHistory 的对象,而 ... 是您传递给构造函数的参数。在 Python 中构造对象就像调用函数或方法,不能将逻辑放在括号内。因此,您会收到一个错误,因为将 if 语句放在那里是不正确的语法。

您需要做的是将您的逻辑移出括号并将所有变量放入 Python dict 中。然后,您可以将该 dict 作为参数传递给对 InverterHistory 的调用。

params = {
'inverter': i,
'recordTime': datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
}
if ac_volts_a:
params['voltage_ac_a'] = float(ac_volts_a)
if ac_volts_b:
params['voltage_ac_b'] = float(ac_volts_b)

# Do the same with all your attributes
# ...

# Then you can create your object and pass it the dictionary you have created
i_data = InverterHistory(**params)

**params 解压字典。这意味着解释器将从字典中取出所有的key:value,并将它们变成key=value。这样,if 语句为 True 的每个参数都将作为命名参数传递给 InverterHistory

关于python - 如何在 Python 中动态选择和传递命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441639/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com