在Python中,我想有一個函數在不同的輸入類型上工作。這樣的事情:我如何正確地寫一個列表上的函數?
def my_square(x):
return x ** 2
my_square(2) #return 4
my_square(range(10)) #should return a list [0 ... 81]
npa = numpy.zeros(10)
my_square(npa) # should return a numpy array with the squares of zeros
基本上,編寫函數爲標量和iterables的最佳做法是什麼?這可以用* args或* kwargs來完成嗎?
爲什麼不寫的函數,在標量只有工作,然後如把它映射到迭代器上?你當然可以在函數內處理這兩個問題,但我會盡量避免它。 – jonrsharpe
這是一個壞主意,做你想做的事情,除了在邊緣情況下。爲每種輸入類型編寫版本。 – Carcigenicate
@jonrsharpe Numpy數組的設計使得可以編寫表達式,以確定內部使用的變量是標量還是數組。無論「x = 4」或「x」是一百萬條記錄的「ndarray」,OP的my_square(x)都可以同樣有效。在這種情況下,編寫一個接受標量或迭代函數的函數是許多科學軟件包中常用的數字python習慣用法,並且使用'map'將其應用於可迭代是一種反模式。但是,如果函數是一般的(並且不能利用numpy的向量化),那麼列表comp。或地圖是要走的路。 – jme