ice rabbit programming

[Python] Python 기초 - 함수, 반복문 본문

Development/Python

[Python] Python 기초 - 함수, 반복문

판교토끼 2020. 9. 4. 17:43

이전 글에서 한 번 언급했던 것처럼, 업무 스택이 C# 클라이언트 프로그래밍에서 Python 서버 프로그래밍으로 변경되었다. Python을 안 써본 것은 아니지만, PyQT나 OpenCV, Tensorflow처럼 필요에 따라서 쓴 정도기 때문에 기초 문제를 푸는 강의를 수강하면서 개념을 정리했다.

다만 이론 강의를 듣는 형태가 아니라 주어진 문제를 풀면서 개념을 습득하는 형태라 정리를 한다고 했으니 다소 중구난방일 수는 있다...


가장 먼저 Python은 인터프리터 언어로, 코드를 한 줄씩 해석하게 된다.또한 PEP8이라는 정식 코드 가이드가 있는데, 이것의 준수가 꽤 엄격하게 적용되어야 한다. https://www.python.org/dev/peps/pep-0008/ 을 참조하면 좋다.


아마 타 언어와 가장 다르게 눈에 띄는 부분은 세미콜론(;)이 없다는 것과 중괄호가 없다는 점일 것이다. 콜론(:)을 이용해 scope의 시작을 알리고, indent가 문법으로 작용하여 scope를 구분한다. 참고로 indent는 4개의 공백(스페이스)가 정식 규칙인데, 오랜 논쟁이었던 탭 1회를 요즘 대부분의 IDE는 4개의 공백으로 처리하므로 크게 문제는 되지 않는다. 팀원들과 사전 약속이 필요한 부분.

그렇다면 기본적인 함수의 형태를 통해 어떻게 다르게 생겼는지 보자.

def main():
    is_registered = verify_reg_status(True)
    if not is_registered: # !를 not으로 표현
    	print('notregistered')
        return
       age = 10 # type 없이 변수 선언
       print(age)
      
def verify_reg_status(required): # type 없이 인자 받음(python 3.5 이후로 인자에 typing은 가능)
	return required

위에서 언급했듯 :와 indent로 scope를 구분한다. ! 대신에 not을 사용하고, type이 명시되지 않는다는 점은 타 언어와 다르고, 직관적으로 읽기 좋은 부분이다. 비슷하게 type을 명시하지 않는 JS에서는 var age와 같이 쓰는데 python에서는 var 키워드마저도 쓰지 않고 담기는 데이터에 따라 타입이 정해진다.

다만 type이 없어서 생기는 불편한 점은 있기에(타입을 잘못 넘기는 경우 발생, 가독성 저하 등) Python 3.5 이후부터는 typing이 가능하다. 이는 Python 자체에서 타입을 강제하는 부분은 아니지만 강제를 하고 싶다면 linter에서 설정은 가능하다.

def calculate_age(age: Integer):
	return age

와 같은 식으로 age라는 인자가 Integer라는 것을 명시해줄 수 있다. 위에서 살펴본 점 외에는 타 언에에서의 함수 사용과 같다.

함수와 간단하게 if문을 살펴봤으므로(참고로 Python에는 switch-case문이 없다. 비슷한 사용법은 다음 글에서 다루겠다) 이번에는 반복문을 살펴보자.

nums = [1,2,3,4]
for num in nums:
	print(n)

위와 같은 방식으로 사용하는데, C계열 언어에서 익숙한 index 기반의 for loop가 없고 타 언어에서의 foreach(for ~ in ) 구문만이 존재한다. nums에 있는 원소들만큼 돌게되는 것이다. 다만 index 기반으로 사용할 수는 있다.

for index in range(5): # 0~4를 index로 돌게 된다.
	print(index)
    
nums = [1,2,3,4]
for index in range(len(nums)): # nums의 길이만큼을 0부터 index로 돌게 된다.
	print(index)

존재하는 구문은 다르지만 항상 그렇듯 무궁무진하게 사용할 수 있다.

다음 글에서는 문제를 풀면서 얻었던 팁들을 다루도록 하겠다.