nargout in Python

前端 未结 5 1127
甜味超标
甜味超标 2020-12-06 16:21

Does Python have any equivalent of nargout in MATLAB? I find nargout a very neat approach if we want to keep the number of return parameters flexible. Is there a way I can f

5条回答
  •  悲&欢浪女
    2020-12-06 16:25

    I have a strange idea ...

    def nargout():
       import traceback
       callInfo = traceback.extract_stack()
       callLine = str(callInfo[-3].line)
       split_equal = callLine.split('=')
       split_comma = split_equal[0].split(',')
       return len(split_comma)
    
    def fun():
       this = nargout()
       if this == 1:
           return 3
       else:
           return 3, 4
    
    a = fun()
    a, b = fun()
    

    I really miss Matlab now :D


    Improved by:

    def nargout(*args):
       import traceback
       callInfo = traceback.extract_stack()
       callLine = str(callInfo[-3].line)
       split_equal = callLine.split('=')
       split_comma = split_equal[0].split(',')
       num = len(split_comma)
       return args[0:num] if num > 1 else args[0]
    
    def fun(nparray):
       return nargout(np.mean(nparray), np.std(nparray))
    
    arr = np.array([3, 4, 5])
    mean = fun(arr)
    mean, std = fun(arr)
    

提交回复
热议问题