计算Python中参数的实数
问题描述:
有什么办法可以计算实数在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无法做到这一点,这将是一个耻辱。
答
只需使用None
作为默认end
:
def substitute_with(FILE, start, end=None, offset=0):
...
if end is None:
end = length_Z
...
如果你想要做的就是设置'如果没有参数是为'end'提供end'等于'length_Z',然后可以”你只是使用'None'的默认值并且如果end是None:end = length_Z'? – Kevin