计算python中实数个参数
是否有任何方法可以计算python中传递给函数的real参数数,即使设置了一些默认值?我试图编写一个函数,用0(或偏移量值)替换文本文件的某个范围,但它不起作用,因为python返回的参数数量包括未传递的参数 输入文件如下所示: foo.txt 代码如下:计算python中实数个参数,python,parameters,arguments,signature,Python,Parameters,Arguments,Signature,是否有任何方法可以计算python中传递给函数的real参数数,即使设置了一些默认值?我试图编写一个函数,用0(或偏移量值)替换文本文件的某个范围,但它不起作用,因为python返回的参数数量包括未传递的参数 输入文件如下所示: foo.txt 代码如下: import os import numpy as np from inspect import signature def substitute_with(FILE, start, end=10, offset=0): sig
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)
导入操作系统
将numpy作为np导入
请检查进口签名
def替换_为(文件,开始,结束=10,偏移=0):
sig=签名(用替换_)
params=sig.parameters
打印('len(params):%d'%len(params))
文件名,文件扩展名=os.path.splitext(文件)
file_i=file
file_o=文件名+''u 0'+文件扩展名
Z=np.loadtxt(文件i)
打开(文件“w”)作为fid:
长度_Z=len(Z)
打印('length\u Z:%d'%length\u Z)
如果(len(params)<3):#给我4,但实际上,我这里需要2!
结束=长度_Z
X=np.连接([np.一((开始)),np.零((结束-开始)),np.一((长度Z-end)))
Y=np.连接([np.零((开始)),np.一((结束-开始)),np.零((长度Z-end)))*offset
A=Z.T*X+Y
对于范围内的i(0,长度_Z):
fid.write(“%d\n%”(A[i]))
#将_替换为('foo.txt',4,8)
#将_替换为('foo.txt',4,8,2)
将_替换为('foo.txt',4)
。。。这仅在传递第三个参数“end”时有效。如果没有第3个参数,则从4到结尾(11)应替换为0。但是,在现实中,从4到9被替换为0
我不情愿地将默认值(=10)设置为end,否则编译器会给出以下错误:
TypeError:用()替换_缺少1个必需的位置参数:“end”
你们怎么解决这个问题?请不要告诉我先检查文件的长度,然后再将其交给函数。它应该在函数内部完成。在MATLAB中,“nargin”返回实数个参数,因此这种逻辑很容易工作。如果python不能做到这一点,那就太可惜了。只需使用
None
作为end
的默认值:
def substitute_with(FILE, start, end=None, offset=0):
...
if end is None:
end = length_Z
...
如果您只想将
end
设置为等于length_Z
如果没有为end
提供参数,那么您就不能使用默认值None
,如果end为None:end=length_Z?
def substitute_with(FILE, start, end=None, offset=0):
...
if end is None:
end = length_Z
...