有没有办法计算传递给python函数的真实参数数量,即使设置了一些默认值?我正在尝试编写一个函数,它用0(或偏移值)替换某个范围的文本文件,但它不起作用,因为python返回包含参数的参数数量通过。
输入文件如下:
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)
...仅当第3个参数结束时才有效。通过。没有第三个参数,从4到结尾(11)应该被替换为0.但是,实际上,从4到9被替换为0.
我不情愿地设置一个默认值(= 10)结束,否则编译器会给我以下错误:
TypeError:substitute_with()缺少1个必需的位置参数:&#39; end&#39;
那么,你们怎么解决这个问题呢?请不要告诉我先检查文件的长度,然后将其交给函数。它应该在函数内部完成。在MATLAB中,&#39; nargin&#39;返回实数的参数,因此这种逻辑很容易。如果python不能做到这一点,那将是一种耻辱。
答案 0 :(得分:2)
只需使用None
作为end
的默认值:
def substitute_with(FILE, start, end=None, offset=0):
...
if end is None:
end = length_Z
...