所以我想創建一個函式,從'開始'到'結束'生成與'大小'一樣多的連續數字。對于迭代,它將在函式中計算。但是我在設定引數'end'的默認值方面遇到了問題。在我進一步解釋之前,下面是代碼:
# Look at this -------------------------------
# ||
# / # /
def consecutive_generator(size=20, start=0, end=(size start))。
i = 開始
迭代=(結束-開始)/大小
arr = []
temp_size = 0: i = start iteration = (end-start)/size.
while temp_size < size:
arr.append(i)
i = 迭代
temp_size =1
return arr
# with default end, so the 'end' parameter will be 1110, start=1)
print(c1)
# with end set[/span]。
c2= consecutive_generator(10, end=20)
print(c2)
從上面可以看出(關于'end'引數的默認值),我想實作的是'end'引數的默認值是'start' 'size'引數(那么迭代將是1)
。輸出肯定會是一個錯誤。那么我怎樣才能做到這一點呢?
uj5u.com熱心網友回復:
這是一個相當標準的模式:
這是一個相當標準的模式。
def consecutive_generator(size=20, start=0, end=None>)。)
if end is None:
end = size start
uj5u.com熱心網友回復:
根據Python的檔案,
當函式定義被執行時,默認的引數值會從左到右被評估。
所以引數的默認值不能從函式呼叫時傳遞的其他動態值中進行評估。
你應該使用可區分的值,如None作為默認值。然后你可以檢查它并動態地評估適當的默認值。例如,
def consecutive_generator(size=20, start=0, end=None>)。)
if end is None:
end = size start
...
如果你需要None作為呼叫者傳遞的有效值,你可以使用其他物件或其他東西來區分有效值。
default_end = object()
def consecutive_generator(size=20, start=0, end=default_end) 。
if end is default_end:
end = size start
...
uj5u.com熱心網友回復:
默認的方式就像Samwise說的那樣,但是有一個替代的解決方案,可能也會有同樣的效果。
。def consecutive_generator(size=20, start=0, **kwargs)。)
end = kwargs.get('end', size start)
這個方法允許你在end存在的情況下獲得它,或者在end不存在的情況下簡單地設定它的值。
為了呼叫它,這個方法確實需要在函式呼叫中指定引數end,如果你想把它設定為默認值以外的東西。
consecutive_generator(20, 0, end=50)
也許還可以考慮看看range和numpy.linspace的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309261.html
標籤:
下一篇:將資料框架的列值轉換為十進制值
