티스토리 뷰

[Python]

[Python] 기본 문법 정리

춘햄 2021. 4. 16. 10:26

사실 처음 코딩을 배울 때, 접근성이 가장 좋은 파이썬으로 공부를 시작했고, 대학교 졸업 작품 또한 거의 모든 코드를 파이썬으로 작성할 만큼 많이 사용했던 언어였다. 

마인크래프트 플러그인 개발이 너무 재밌어서.... 그만 자바에 빠지고 말았는데.. 너무 오랜 시간 파이썬을 다루지 않은 거 같아 문법부터 다시 정리를 하고, 여러 코딩 테스트 문제들도 풀어보려고 한다. 


  • 인덴트

Indent는 다른 언어에서는 강제되지 않지만 파이썬에서만큼은 강제되는, 파이썬의 대표적인 특징이라고 할 수 있다.

파이썬은 자바와 같이 } 기호로 메서드나 반복문, 조건문의 선언부를 묶지 않는다.

그 대신에 공백 4칸을 기준으로 모든 행을 구분한다.


  • 네이밍 컨벤션

파이썬의 변수명을 정하는 방식, Naming Convention은 자바와 달리 각 단어를 대소문자로 구분 짓지 않고, _기호로 구분하여 표기하는 스네이크 케이스를 따른다. 이는 함수 명도 마찬가지이다. 이는 필수적이지는 않지만, 대부분의 파이썬 개발자가 이를 따르고 있어, 맞춰서 사용하는 것이 좋다.


  • 타입 힌트

파이썬은 대표적인 동적 타이핑 언어이기 때문에 자바나 C++과 같이 변수명 앞에 변수의 타입을 따로 지정할 필요가 없다. 이는 함수를 만들 때도 마찬가지 인데, 분명한 건 이렇게 함수의 리턴 타입에 아무런 힌트가 없다면, 프로젝트의 규모가 커졌을 때 버그를 유발할 가능성이 매우 높다.

그렇기 때문에 파이썬도 다음과 같이 타입 힌트를 사용할 수 있다.

##타입 힌트가 없는 경우

def fn(a):
 ...
 
 
 ##타입 힌트가 있는 경우
 
 def fn(a: int) -> bool: 
 ##함수의 인자는 integer, 리턴은 boolean으로 한다.

파이썬은 유독 다른 언어에 비해 이러한 타입으로 생기는 오류들이 많은데,  코딩 테스트 시에는 이를 전부 걸러내기가 쉽지 않으므로 mypy를 사용하여 코드를 검토할 수 있다.


  • 조건문과 반복문

파이썬의 조건문과 반복문을 사용할 수 있는 기본적인 문법 형식은 다음과 같다.

 

 1. 조건문

## 파이썬의 조건문 ##
number = int(input('숫자를 입력하세요: '))
if number == 1:
	print('일 조아')
elif number == 2:
	print('이 시러')
else:
	print('{}'.format('뭐야 이건'))
    ##format 함수는 {}에 차례차례 format()내부에 인자를 넣어 준다.
    

2. 반복문

  1) For문

print('1. 0부터 9까지의 반복문')
for count in range(10):
    print('{}번째 반복'.format(count))

print('=========================')

print('2. 1부터 9까지의 반복문')
for count in range(1, 10):
    print('{}번째 반복'.format(count))

print('=========================')

print('3. 1부터 9까지 2씩 증가하는 반복문')
for count in range(1, 10, 2):
    print('{}번째 반복'.format(count))

print('=========================')

print('3. 문자열 반복문')
for char in 'a' 'b' 'c' 'd':
    print('{} 문자열 반복'.format(char))
print('=========================')

결과는 다음과 같다.

 2) While문

print('while 0123 루프')
x = 0
while x in (0,1,2,3):
    x = x + 1
    print('while 0123 loop')

print('======================')

print('while infinite loop')
y = 0
while type(y) is int:  ## is 는 id 연산자이다.
    print('무한반복..{} = 10 에 정지'.format(y))
    if y == 10:
        break
    y = y + 1

print('======================')

print('use continue')
x = 0
while True:
    print('첫번째 while문 수행')
    while type(x) is int:
        print('두번째 while문 수행')
        continue


  • 리스트 컴프리헨션

리스트 컴프리헨션이란 기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문이다. 

즉, 리스트에 값을 하나하나 for문으로 넣는 대신 다음과 같이 사용할 수 있다는 것이다.

a = []

for n in range(1, 10, 1):
    if n % 2 == 1:
        a.append(n*2)
        
print(a)

>>> [2, 6, 10, 14, 18] 

 

위 코드를 리스트 컴프리헨션을 사용하여 한 줄로 표현이 가능하다.

a = [n * 2 for n in range(1, 10, 1) if n % 2 ==1]

print(a)

>>> [2, 6, 10, 14, 18] 

 

리스트 컴프리헨션은 코드를 간단하게 작성하는 강력한 방법이지만, 너무 무분별하게 사용 시 코드의 가독성을 해칠 수 있다.


  • Enumerate

Enumerate는 '열거하다'라는 뜻의 함수로, 여러 가지 자료형(list, set, tuple 등)을 인덱스를 포함한 enumerate 객체로 리턴한다. 사용 방법은 다음과 같다.

a = [11,12,13,14,15,16,17]

print(a)

enumerate(a)

print(list(enumerate(a))) ## enumerate객체는 이와 같이 list로 출력해야함

## OR

for i, v in enumerate(a):
    print(i, v)
    

  • 함수

함수는 자바의 메서드와 비슷한 개념으로, 코드 블록을 미리 만들어 놓고 이를 호출하여 사용하는 것이다. 인자로 데이터를 받을 수 있으며, 리턴 값 또한 가진다.

다음과 같이 정의, 호출이 가능하다.

def my_function(fname):
  print(fname + " Refsnes")

my_function("Emil")
my_function("Tobias")
my_function("Linus")

또한 파이썬에는 이 함수와 관련하여 아주 유용한 기능이 몇 가지 존재한다.

 

 1) Arbitrary Arguments

만약에 해당 함수에 몇 개의 인자가 들어가야 할지 불확실한 상황이라면, 인자 앞에 * 기호를 붙여서 아래와 같이 사용할 수 있으며, 이때 인자는 튜플 타입이 된다. (리스트와 튜플, 사전과 같은 자료 구조들은 따로 포스팅할 예정)

def my_function(*kids):
  print("The youngest child is " + kids[2])

my_function("Emil", "Tobias", "Linus")

>> The youngest child is Linus

 2) Default Parameter Value

인자에 미리 Default값을 지정하여 함수에 아무 인자도 넣지 않고 사용할 수도 있다.

def my_function(country = "Norway"):
  print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")

>>

 3) Pass

 pass를 사용하여 그냥 껍데기만 만들 수도 있다.

def myfunction():
  pass

위 코드는 호출해도 아무 연산도 하지 않는다.


  • 클래스

 파이썬 또한 객체 지향 언어이기 때문에 당연히 Class를 가지고 있다.

간단한 예제부터 먼저 보자.

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def myfunc(self):
    print("Hello my name is " + self.name)

p1 = Person("John", 36)
p1.myfunc()

>>> Hello my name is John

 

파이썬의 클래스 또한 당연하게 생성자를 가지고 있다. 

이 생성자는 클래스가 선언되어 인스턴스가 만들어질 때, 무조건 실행되는 하나의 함수로, 

def __init__(self, name, age):
    self.name = name
    self.age = age

이와 같이 __init__ 함수를 사용하여 생성자를 선언해줘야 하며, init 함수의 첫 번째 인자는 selt 인자로, 현재 클래스의 인스턴스에 대한 참조, 및 클래스에 속한 액세스 변수로 사용된다.

반드시 위 예시처럼 self라는 이름을 붙여줄 필요는 없지만, 반드시 init 함수의 첫번째 매개변수여야 한다.

즉, 다음과 같이 사용할 수도 있다.

class Person:
  def __init__(mysillyobject, name, age):
    mysillyobject.name = name
    mysillyobject.age = age

  def myfunc(abc):
    print("Hello my name is " + abc.name)

p1 = Person("John", 36)
p1.myfunc()

결과는 동일하다.

또한 마찬가지로 Pass를 이용하여 클래스 내부를 비워둘 수 있다.

class Person:
  pass

여기까지 파이썬의 기본 문법들을 간단하게 정리해보았는데, 다음 포스팅에서 파이썬에서 아주 유용하게 활용되는 대표적인 자료구조 몇 가지와 문자열을 다루는 몇 가지 예제들을 정리할 예정이다. 

 

'[Python]' 카테고리의 다른 글

[Python] Thread & Timer  (0) 2021.05.04
[Python] 정규표현식(regex)  (0) 2021.05.03
[Python] 예외 처리  (0) 2021.04.17
[Python] 접근 제한자  (0) 2021.04.17
[Python] 파이썬의 기본 자료 구조  (0) 2021.04.16
Comments