티스토리 뷰

반응형

코드를 줄이는 방법으로 찾아보았습니다.

한번에 간단히 보내기...

 

 

def line(doc, x1, y1, x2, y2, layer=None):
    global saved_Xpos, saved_Ypos  # 전역 변수로 사용할 것임을 명시
    
    # 선 추가
    start_point = (x1, y1)
    end_point = (x2, y2)
    if layer:
        # 절곡선 22 layer는 ltscale을 조정한다
        if(layer=="22"):
            msp.add_line(start=start_point, end=end_point, dxfattribs={'layer': layer, 'ltscale' : 30})
        else:
            msp.add_line(start=start_point, end=end_point, dxfattribs={'layer': layer})
    else:
        msp.add_line(start=start_point, end=end_point)

    # 다음 선분의 시작점을 업데이트
    saved_Xpos = x2
    saved_Ypos = y2        


위의 파이썬 함수가 있다.
내가 하고 싶은것은 , line(doc, 1,2,"레이져") 
이렇게 호출하면 위의 함수가 실행되게 하고 싶다.
즉 전달자 '1','2'는 x1,y1이 한쌍으로 인식되게 하는게 핵심인 것 같은데, 파이썬은 이렇게 짝으로 변수명을 만들어서 실행하는게 가능할까?
ChatGPT
파이썬에서 함수에 인자를 전달할 때, 특정 인자들을 짝으로 묶어서 처리하는 것은 가능합니다. 하지만, 함수의 정의 방식에 따라 달라지며, 일반적으로 인자 이름을 동적으로 생성하거나 변경하는 것은 지원되지 않습니다.

line 함수에서 x1, y1과 같은 인자를 짝으로 처리하고 싶다면, 몇 가지 방법을 사용할 수 있습니다:

튜플 사용: x1과 y1을 하나의 튜플로 묶어서 전달하고, 함수 내부에서 이를 분리하여 사용합니다. 예를 들어, line(doc, (1, 2), "레이저")와 같이 호출할 수 있습니다.

변수 개수가 가변적인 함수 정의: *args 또는 **kwargs를 사용하여 가변적인 수의 인자를 받는 함수를 정의할 수 있습니다. 이 경우, 함수 내부에서 인자를 적절히 처리해야 합니다.

아래 예시에서는 튜플을 사용하는 방법을 보여줍니다:

python
Copy code
def line(doc, start_point, layer=None):
    global saved_Xpos, saved_Ypos  # 전역 변수 사용

    # start_point를 x1, y1으로 분리
    x1, y1 = start_point

    # 나머지 로직 구현...
    # 예를 들어, end_point를 계산하거나 선을 그리는 로직
    # ...

    # 다음 선분의 시작점을 업데이트
    saved_Xpos = x1
    saved_Ypos = y1

# 함수 호출
line(doc, (1, 2), "레이저")
이 방식을 사용하면 x1과 y1을 짝으로 묶어서 함수에 전달할 수 있으며, 함수 내부에서 이를 분리하여 사용할 수 있습니다. 함수의 인터페이스를 변경하는 것이므로, 기존 코드와의 호환성 문제를 고려해야 합니다.

반응형
댓글