1 回答

TA貢獻1818條經驗 獲得超3個贊
我認為你不太明白錯誤是什么。你能把錯誤信息貼出來嗎?
我懷疑你試圖分配a0,hvt,at,lambd = signify(a0,hvt,at,lambd)是真正的罪魁禍首,如果從函數返回的“rst”沒有 4 個元素怎么辦?左側的語法強制右側的列表準確地解包為 4 個元素,并ValueError: too many values to unpack (expected 4)在不匹配時引發 a 。
嘗試result = signify(a0,hvt,at,lambd)檢查輸出。
更新:
如果您只想修改 4 項中的一部分,而允許其余項按原樣通過,則只需要 else 部分。以下是您如何看待整個過程。
def signify(*args):
rst = []
print(args)
for arg in args:
if arg >= 100.0 or arg <= 0.01:
arg = '{:.2e}'.format(arg) #returns a string
rst.append(arg)
else:
rst.append(arg) #take note that this else statement is the same as the last statement of if block
#also note that args going through else block are not "strings" unlike the if block, which gives a string during ".format()"
return rst
我們可以改進這一點。
def signify(*args):
rst = []
print(args)
for arg in args:
if arg >= 100.0 or arg <= 0.01:
arg = '{:.2e}'.format(arg)
rst.append(arg) #note that you may want to typecast to string to maintain uniformity.
#rst.append(str(arg))
return rst
但是,這本質上與在所有參數上應用函數相同。我們可以創建一個函數來強調這種“處理 1 個術語”的方法。
def signify_single(single_arg):
if single_arg >= 100 or single_arg <= 0.01:
return '{:.2e}'.format(single_arg)
return single_arg #or str(single_arg)
a,b,c,d = (signify_single(x) for x in (101,202,303,40))
但這讓我們意識到這只是一個 if-else 語句。他們不一定是丑陋的。(PS。最后一行是列表理解。)
a,b,c,d = ('{:.2e}'.format(x)
if (x >= 100 or x <= 0.01)
else x #or str (x)
for x in (101,202,303,40))
這個條件可以稍微調整一下,讓我們更清楚地理解。請注意,如果您愿意,也可以將它們寫在一行中。
a,b,c,d = (x if (0.01 < x < 100) else '{:.2e}'.format(x) for x in (101,202,303,40))
您可以使用任何看起來最干凈的樣式,或者探索并找到更好的東西。只需像這樣將其應用于您的案例。
a0,hvt,at,lambd = (x if (0.01 < x < 100) else '{:.2e}'.format(x) for x in (a0,hvt,at,lambd))
添加回答
舉報