2017-11-23 29 views
0

1 차원 세그먼트 클래스 작업 중입니다. 모든 세그먼트는 2 점으로 정의됩니다. 왼쪽 경계와 오른쪽 경계.옵션이 아닌 인수 앞에 함수에서 선택적 인수를 정의하려면 어떻게합니까?

왼쪽 경계를 선택 사항으로 지정하고 싶습니다 (기본값은 0). 이를 위해 내 클래스의 init 함수를 으로 정의합니다. 그러나 왼쪽 인수가 먼저 주어지면 세그먼트를 정의하고 싶습니다. 예 : Seg = Segment(1,5). 파이썬은 함수를 __init__(self, left = 0, right)으로 정의하지 않으므로이 문제에 대한 최적의 해결책은 무엇입니까? 제공되는 좌우 경우에만 바로 제공 될 때

+2

'* args'를 사용하여'len (args)'에 기초하여 인수가 의미해야하는 것을 알아 낸다 – khelwood

+0

이것은 파이썬이 왜 이것을 허용하지 않는지에 대한 더 많은 정보를 제공한다 : https://stackoverflow.com/questions/16932825/why- 아니 n-default-arguments-cant-following-default-argument – r2d2oid

답변

0
def my_func(*args): 
     if len(args) == 0: 
       print 'missing mandatory param' 
     elif len(args) == 1: 
       left = 0 
       right = args[0] 
     elif len(args) == 2: 
       left = args[0] 
       right = args[1] 
     else: 
       print 'wrong number of params provided' 

     print 'left is {}'.format(left) 
     print 'right is {}'.format(right) 

, 그것은 기본값은 기본값

my_func(3) 
left is 0 
right is 3 
왼쪽, left

my_func(1,2) 
left is 1 
right is 2 

에 대한 값으로 왼쪽 PARAM 할게요