在我的代碼中撰寫快速代碼注釋和故障排除問題時,我經常給自己寫注釋,這些注釋要在到達我的代碼的某些部分時列印出來。這些筆記經常計算一些變數,我列印這些變數是為了檢查事情是否是 WAI。我發現寫這些的最快和最直觀的方法是元組混合字串和變數(通常指整數/浮點數)。例如:
>>> val1=4
>>> val2=6
>>> print('The first value shows',val1,'but the second value gives',val2)
The first value shows 4 but the second value gives 6
有時我有非常大的值,或者有很多小數的值。我想讓這些更具可讀性。例如:
>>> val1=4.351324*10**8
>>> val2=6.2151234623431435235
>>> print('The first value shows',val1,'but the second value gives',val2)
The first value shows 435132400.0 but the second value gives 6.2151234623431435
但我更愿意做的是格式化這些數字,以便陳述句變得更具可讀性。我希望它回傳如下內容:
The first value shows 435,132,400 but the second value gives 6.215
我在其中插入了逗號并將第一個值設為整數(如果它是整數),第二個值四舍五入到小數點后 3 位。當然,這可以使用字串格式來完成,但我發現這很乏味——尤其是對于我只是用來解決問題(而不是用于生產目的)的陳述句。為了獲得理想的結果,我必須做類似的事情:
>>> print('The first value shows {0:,} but the second value gives {1:5.3f}'.format(int(val1),val2))
但這有幾個缺點:
- 這可讀性較差。按時間順序閱讀“'第一個值顯示',val1,...”非常簡單。使用 .format 方法需要我在最后包含我的變數元組,并花更多時間思考哪些值將在哪里。當我寫這些行時,我通常是在嘗試排除故障,而不是對創建額外的潛在錯誤點感興趣。
- 正如我之前提到的,這很乏味。繁瑣的任務是代碼的用途,所以我希望能夠在某個地方設定數字格式,然后呼叫它。如果回傳的數字是意外的(當我搜索錯誤時這絕對是可能的),這一點尤其重要。例如,我可能期望一個數字是一個整數,但它是一個浮點數。如果我將其格式化為整數,我會錯過這個問題并且找不到我的錯誤。
理想情況下,我有一種可以應用于列印元組中每個數字的格式,這是某種 if/then 陳述句。例如:對于數字n,如果n是整數,請使用格式f1,如果n是浮點數,請使用格式f2,如果n>X使用科學計數法 ( f3),如果n很小且非零,但使用 時出現零f2,請使用科學計數法。這可以為給定列印函式中的所有數字呼叫,或者可以在整個檔案中應用。
如果有一個 if/then 序列來處理任何數字情況是不可能的,我也愿意將其中一個應用于元組中的所有值(例如:使用逗號分隔符),而不必單獨格式化每個數字。
就目前而言,我寧愿快速而不是格式良好(所以我不格式化這些筆記),但我喜歡兩者兼而有之。那可能嗎?
uj5u.com熱心網友回復:
from typing import Any
def standarize(value: Any) -> str:
if type(value) == int:
return str(value)
elif type(value) == float:
return f'{value:.2f}'
else:
return str(value)
print(f'Value int: {standarize(1)}')
print(f'Value float: {standarize(113.91715)}')
print(f'Value str: {standarize("any string")}')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/410762.html
標籤:
上一篇:從字串中洗掉元素
