본문 바로가기

카테고리 없음

[파이썬기초] 1 함수와 변수

 TypeError이고, str 타입과 str 타입 간에 - 연산은 지원하지 않음을 알 수 있습니다

1-3. 함수와 변수 (2) 변수 사용하기

f(x)=y에서 f()가 '함수'라면, 입력값과 출력값인 x y는 '변수'에 해당됩니다. 

print()라는 함수에 greeting이라는 변수를 입력값으로 주는 예시를 한번 살펴볼까요?

greeting = '안녕하세요?' 
#- greeting이라는 변수에 '안녕하세요?'라는 문자열을 저장합니다.
print(greeting) 
#- greeting을 출력합니다.
 

사전에서 '변수'를 검색해 보면, 어떤 관계나 범위 안에서 여러 가지 값으로 변할 수 있는 수 라고 정의되어 있습니다. 이처럼 변수는 스스로 값을 갖기보단 다른 값을 가리키는 존재입니다.

위 코드의 첫 번째 줄에서 greeting이라는 변수가 안녕하세요?라는 문자열을 가리키도록 정의했고, 세 번째 줄에서는 print() 함수에 greeting 변수를 입력으로 주어 greeting 변수가 가리키는 값을 화면에 표시하도록 했습니다. 즉, 변수를 정의하기 위해서는 [변수명] = [변숫값]과 같은 형식을 취하면 되며, 이후에는 변수명으로 해당 변숫값을 참조할 수 있습니다.

여기서 또 배울 수 있는 점이 있습니다. 코드가 한 줄 한 줄 순서대로 처리되기 때문에 변수를 정의(define)하기 전에 먼저 사용하려고 하면 오류가 나게 됩니다. 한번 확인해 볼까요?

print(something)

오류 메시지를 읽어보면 something이라는 변수명이 정의되지 않아서(not defined) 발생된 오류임을 확인할 수 있습니다.

또 다른 경우를 살펴봅시다. 방금 위에서 변수란 어떤 값을 가리키는 존재라고 했죠? 같은 변수명을 재사용하게 될 경우 어떤 값을 가리키는지가 변하게 됩니다.

 

greeting = '안녕하세요?'
greeting = '안녕!'
print(greeting)

 

 

1-4. 함수와 변수 (3) 새로운 함수를 정의하기

이미 만들어진 함수를 부르는 것 외에 우리가 직접 함수를 만들 수도 있습니다.

부르면 안녕!이라고 표시하는 함수를 정의해 보겠습니다. 함수는 내부에서 다른 함수를 부르거나 변수를 정의하는 등 다양한 작업을 할 수 있습니다. 따라서 함수를 정의하는 방법이 이전의 변수와는 조금 다릅니다.

참고로, 아래 코드는 실행을 해도 함수를 정의할 뿐 함수 자체를 실행시키지는 않습니다. 즉, [Output]에 아무것도 뜨지 않는 것이 정상이라는 거죠! 🙂

 
 
코드 실행 
 

def는 함수를 정의(define) 할 때 사용하는 일종의 예약어이며, 함수명은 임의로 만들 수 있습니다. 함수명 뒤에 붙은 괄호는 이 함수에 입력으로 전달되는 값을 받는 자리이며, 입력값이 필요 없는 경우에는 위 코드처럼 함수명 뒤에 ()를 붙여주면 됩니다.

def 함수명() 뒤에 :를 붙여주고, 이어서 이 함수가 불릴 때 실행할 작업들을 한 줄씩 나열해 주면 됩니다. 단, 해당 함수에 포함된 작업이라는 것을 나타내기 위해, def 줄부터 함수가 끝날 때까지 띄어쓰기 4칸으로 들여쓰기를 해주어야 합니다.

🤔 잠깐! 매번 스페이스를 4번이나 눌러줘야 할까?

키보드의 Tab 버튼을 한 번만 누르시면 자동으로 인덴트가 주어집니다.

다만, 코드 스타일에 따라 다를 수 있으며 구글 파이썬 스타일 가이드에 나와있듯이 탭과 스페이스를 혼용해서 사용하면 안 됩니다. 

혼용한다면 IndentationError: unindent does not match any outer indentation level 같은 에러가 뜨니 주의해 주세요.

다른 분들과 협업할 때는 특히 주의해야겠죠?

요약하면, 위 say_hi 함수는 다음과 같이 풀이됩니다. 

"입력값을 받지 않는 say_hi 함수는 '안녕!'이라는 문자열을 출력해 주는 함수입니다."

say_hi() 함수를 불러서 '안녕!'이 나오는지 한번 확인해 볼까요

say_hi()
 
코드 실행 
 

여기서 잠깐! 만약 위에서 함수를 정의할 때 들여쓰기를 안 했다면 어떻게 될까요?

 
 
 
 
코드 실행 
 

실행을 해보면 IndentationError가 뜨는 것을 확인하실 수 있을 겁니다.

이는 들여쓰기 된 코드 블럭, 즉 indented block을 기대했는데 왜 빼먹었냐는 불평입니다. def 줄의 다음 줄부터 함수 정의가 끝날 때까지는 들여쓰기를 유지해야 하며, 이 들여쓰기가 유지되는 구간을 블럭(block)이라고 합니다. 즉, 파이썬에서 들여쓰기는 이 줄의 코드가 위 단계의 코드에 속한다는 것을 표시합니다.

안녕! 다음 줄에 반가워.라고 한 줄 더 표시하고 싶다면, 그다음 줄에 print() 함수를 하나 더 추가해 주면 됩니다. 이번에도 함수를 정의하기만 하는 것이니, 화면에 아무것도 출력되지 않아도 걱정 마세요! 👌

 
 

1-5. 함수와 변수 (4) 스코프: 변수의 유효 범위

함수 내에서도 변수를 정의할 수 있습니다. 

하지만 이것은 함수 안에서만 일어난 일이라는 것을 명심해야 합니다. 함수가 끝나면 해당 변수는 사라지고, 함수 밖에서 해당 변수를 들여다볼 수도 없습니다. 이게 무슨 말인지 한번 차근차근 알아봅시다. 😎!

아래 코드를 실행하면 에러가 발생합니다.