[Python]파이썬 자세히 공부하기 4️⃣

포동동·2023년 3월 6일
1

25. continue란 무엇인가?

파이썬에서 continue는 점프문으로, 블록의 나머지 명령어들을 모두 실행하지 않은 채 루프의 다음 반복을 실행하기 위해 컨트롤을 이동시킨다. while문for문 모두에서 사용가능하다.

자주 헷갈리는 개념으로, passbreak가 있다.

  • pass : 실행할 코드가 없는 것으로 다음 행동을 계속해서 진행한다.
  • continue : 바로 다음 순번의 loop를 수행한다.
  • break : 반복문을 멈추고 loop 밖으로 나가도록한다.

26. id() 함수는 무엇인가?

id()는 내장함수이며, 단일 매개 변수를 허용하며, 정수로 된 객체의 고유값(id)을 반환한다. C에서 얘기하는 메모리 주소와 같다. 동작 방식은 아래와 같다.

Python can utilize an object’s id to cache the values of its variables. This approach for accessing cached items via id() improves Python performance. As a result, many variables may refer to the same object and have the same id() value if their values are the same.

파이썬은 객체의 id값을 캐싱한다. 여기에 같은 변수명에 새로운 값을 저장하면 그 메모리 주소를 또 캐싱한다. 덮어씌우는 것이 아니라 둘 다 기억하고 있다는 것이다. 이러한 캐싱 방법을 사용하기 때문에 속도가 조금 더 빨라진다.

아래의 예시를 보면, count라는 변수에 1을 할당했다가 2를 할당하면 id값이 변화한다. 하지만 다시 1을 할당하면 아까 1을 할당했을 때와 같은 id값을 가지는 것을 알 수 있다. 이러한 과정에서 캐싱이 이루어진다.


27. *args*kwargs란 무엇인가?

*args는 함수의 매개변수(parameter)에 전달받을 인자(arguments)의 개수가 탄력적일 때 사용한다. 이와 비슷하게 **kwargs도 사용될 수 있는데 형태가 조금 다르다. *args는 값을 튜플 형태로 전달하고, *kwargs는 키값을 매칭시켜서 딕셔너리 형태로 전달한다. 둘은 사용용도에 따라 조금 달라지지만 비슷한 주의사항이 있어 적어둔다.

  • args, kwargs라는 단어를 쓸 필요 없이 다른 단어로 대체 가능하다. e.g.) *a, **kw
  • 이 둘은 함수를 선언할 때 매개변수 중 맨 마지막에 써야한다. 즉, def function1(name, *args)는 돼도, def function1(*args, name)은 안 된다. 파이썬은 어디까지가 *args 인지 모르기 때문에 에러를 발생시킨다.
  • 또한, *args -> **kwargs 순서로 작성해야 한다.
# 예시
def fn(*argList):  
    for argx in argList:  
        print (argx) 
    
fn('I', 'am', 'Learning', 'Python')
>>> I
>>> am
>>> Learning
>>> Python

def fn(**kwargs):  
    for emp, age in kwargs.items(): 
        print ("%s's age is %s." %(emp, age)) 
>>> John's age is 25.
>>> Kalley's age is 22.
>>> Tom's age is 32.

28. 파이썬에 main 메서드가 있는가?

우선, main 함수는 대부분의 프로그래밍 언어에서 먼저 호출되는 시작점이다. 파이썬은 인터프리터 언어이기 때문에 컴파일 과정없이 코드를 한 줄 한 줄 순차적으로 실행하는데, 명령어로 파이썬 코드가 담긴 파일을 실행하면 main함수가 실행된다.

실제로, 나는 프로젝트 시작할 때 처음 받은 소스 코드가 if __name__ == "__main__" : 으로 실행되는지 몰라서 이게 모다냐... 했던 기억이 난다. 간단하게 내가 정리를 해보자면 아래와 같다.

모든 파이썬 스크립트는
1. 직접 명령어로 실행시키거나
2. 라이브러리로서 import 된다.
만약 import 해서 함수를 쓰고 싶을 때 그 스크립트 안의 모든 라인이 실행되면 귀찮은 일이 발생하기 때문에 스크립트 안에서 함수만 정의하고 호출되기 전까지 실행되지 않게 하면 편할 것이다. 그리고 만약 명령어로 직접 실행시킬 때만 호출하고 싶은 함수를 다 묶어서 main함수에 넣어놓으면 독립적으로 편하게 사용할 수 있을 것이다. 그래서 __main__ 메서드에 해당 파일의 이름을 넣어놓고 if __name__ == "__main__" : 이라는 조건문을 통해 호출하고 싶은 함수만 호출할 수 있는 것이다.

즉, import 했을 때 그 모듈안에 있는 모든 코드들이 그대로 실행되는 것을 막기 위해 if __name__=="__main__": 으로 메인 함수 선언을 해주어야 한다고 이해하면 될 것 같다.

참고
참고2


29. __name__은 무엇인가?

__name__은 고유 변수로, 파이썬의 모듈의 이름을 담고 있다. 예를 들어, bgly.py라는 파일의 __name__bgly이다. 참고


30. end의 목적은 무엇인가?

파이썬의 print() 함수는 항상 마지막에 새 줄을 출력한다. print() 함수는 end로 알려진 선택적 매개 변수를 사용하는데 기본값은 \n이다. 이 매개 변수를 사용하여 인쇄 문의 끝 문자를 우리가 선택한 값으로 변경할 수 있다.


31. 언제 break를 써야하는가?

파이썬은 루프에서 나가기 위한 중단문을 제공한다. 코드에 브레이크가 걸릴 때마다 프로그램의 제어는 즉시 루프의 본체에서 빠져나간다. 중첩 루프의 중단 문으로 인해 컨트롤이 내부 반복 블록에서 종료된다. 이중 루프를 빠져나오기 위해선 추가적으로 조건을 걸어 빠져나와야 한다.

break_point = 3

# 1. 변수를 이용해 이중 루프 빠져나오기
breaker = False
for i in range(5) :
	for j in range(5) :
    	print(i, j)
        if i == break_point and j == break_point :
        breaker = True
        break
    if breaker == True :
    	break

# 2. 예외처리를 이용해 이중 루프 빠져나오기
try :
	for i in range(5) :
      for j in range(5) :
          print(i, j)
          if i == break_point and j == break_point :
          	raise NotImplementedError
except :
	print("End")

1번 방법과 2번 방법 아웃풋

profile
완료주의

0개의 댓글