1
有什麼辦法可以計算實數在python中傳遞給函數的參數數量,即使設置了一些默認值?我試圖編寫一個函數,該函數用0(或偏移值)替換文本文件的某個範圍,但它不起作用,因爲python返回包含未傳遞參數的參數數量。計算Python中參數的實數
輸入文件是這樣的:
foo.txt的
0
1
2
3
4
5
6
7
8
9
10
11
這裏是代碼:
import os
import numpy as np
from inspect import signature
def substitute_with(FILE, start, end=10, offset=0):
sig = signature(substitute_with)
params = sig.parameters
print('len(params): %d' % len(params))
filename, file_extension = os.path.splitext(FILE)
file_i = FILE
file_o = filename + '_0' + file_extension
Z = np.loadtxt(file_i)
with open(file_o, "w") as fid:
length_Z = len(Z)
print('length_Z: %d' % length_Z)
if(len(params) < 3): # gives me 4, but actually, I need 2 here!
end=length_Z
X = np.concatenate([np.ones((start)), np.zeros((end-start)), np.ones((length_Z-end))])
Y = np.concatenate([np.zeros((start)), np.ones((end-start)), np.zeros((length_Z-end))])*offset
A=Z.T*X+Y
for i in range(0, length_Z):
fid.write('%d\n' % (A[i]))
#substitute_with('foo.txt',4,8)
#substitute_with('foo.txt',4,8,2)
substitute_with('foo.txt',4)
...這隻有當第三個參數 '端'已通過。沒有第三個參數,從4到結尾(11)應該被替換爲0.但是,實際上,從4到9被替換爲0.
我很不情願地設置了默認值(= 10)最終,否則編譯器給了我以下錯誤:
TypeError: substitute_with() missing 1 required positional argument: 'end'
那麼,如何將你們解決這個問題?請不要告訴我先檢查文件的長度,然後將其提供給函數。它應該在函數內完成。在MATLAB中,'nargin'返回參數的實數,所以這種邏輯很容易工作。如果python無法做到這一點,這將是一個恥辱。
如果你想要做的就是設置'如果沒有參數是爲'end'提供end'等於'length_Z',然後可以」你只是使用'None'的默認值並且如果end是None:end = length_Z'? – Kevin