공부 정리/파이썬

    파이썬에서 유사 private를 사용해보자.

    다음과 같은 코드를 보자. class XY: def __init__(self, x=0, y=0): self._x = x self._y = y c = XY(1,3) print(c._x, c._y) # 1 3 이 처럼 작성하면 print 문으로 1과 3이 출력된다. 근데 변수명을 _x 나 x 가아닌 __x로 변경하면 오류가 뜬다. class XY: def __init__(self, x=0, y=0): self.__x = x self.__y = y c = XY(1,3) print(c.__x, c.__y) # 오류가 뜬다. 파이썬은 _ 두개로 시작하는 인스턴스 변수명은 이 클래스의 이름 태그가 붙습니다. 태그를 안쓰면 위 코드처럼 에러가 발생하는 것. 이름 태그가 붙는 규칙은 앞에 _를 하나 붙이고 클래스의 이..

    with 문이란?

    with은 주로 with open(....) 처럼 파일을 열거나 with torch.no_grad() 처럼 학습을 시키지 않을때 선언하고 사용하는 경우가 많다. # 참고 : Pytorch에서 no_grad()와 eval()의 정확한 차이는 무엇일까? (https://coffeedjimmy.github.io/pytorch/2019/11/05/pytorch_nograd_vs_train_eval/ ) 이 with문은 어떻게 동작하는것일까? 다음과 같이 클래스를 구현하여 with을 사용할 수 있다. import time class Timer(): def __init__(self): pass def __enter__(self): # with 시작할때 실행 코드 self.start_time = time.time()..

    *args, **kwargs가 뭘까?

    여러 함수 선언에서 제목과 같은 형식을 본적이 많을것이다. main도 그렇고 도데체 *와 ** 가 무엇일까? 결론부터 말하자면 "어떤 함수 입력이든 받을 수 있는 함수" 이다. 만약 다음과 같은 함수가 있으면 def add(a,b): return x+y add 함수는 인자를 2개밖에 받지 못한다. 그런데 add(3,6,9) 이런식으로 여러개를 받고싶다면? def add(*x): return sum(x) 이렇게 *x 로 인자를 주게 되면 몇개의 인자를 주던 튜플의 형태로 x값에 전달되게 된다. 즉 인자 개수에 제약이 없는 함수가 제작된다. >> *는 받은 인자값들을 튜플에 넣어서 전달 그럼 **는 무엇을 의미할까? 위의 add함수에 add(1,2,name=52) 이렇게 인자의 이름을 명시해서 넣어보면 실행..

    변수 명 동적 할당( loop : for문을 이용하여 변수 생성 , 할당 )

    여러 딥러닝 관련 프로젝트를 진행하며 느낀점은, 다음 사진과 같이 특정 부분만 변경된 채 반복되는 변수 할당이 많다는 것이였다. ( 아래의 코드가 이해되지 않는다면 그냥 넘어가도 좋다. 본 포스팅과 크게 상관없는 코드이다. ) 위 코드를 보면 폴더 명(라벨)에 따라 변수명과 path.join할때의 문자열만 변경될 뿐 모두 동일한 코드가 반복되어 진행되었다.( print문 또한 포함! ) 나는 반복되는 코드에서 for문을 쓰는걸 아주 좋아하는데, 변수 할당도 혹시 for문을 이용하여 할수 있지 않을까? 역시나 동적 언어인 우리의 킹갓 파이썬에서는 동적으로 변수 할당이 지원되고 있었다! ( 정적 언어인 C++같은 경우 동적 변수 할당이 되지 않는다고 한다. ㅠㅠ 관련 정보 : https://stackover..