개인 학습을 위해 만들어진 글입니다.
python 기본 문법을 정리하였다.
최대한 예제 코드 위주로 정리하였으며, 내가 알고 있던 언어들과 달랐던 점들, 정리하고 넘어가고 싶은 부분만 정리했다.
내가 알고 있던 언어들과 달랐던 점들을 위주로 정리했다.
Data Type
파이썬의 데이터 타입은 Integer정수, Float소숫점숫자, Complex Numbers복소수, String문자열, Boolean이 있다.
Math Expression
7/2 == 3.5 # True
7//2 == 3 # False
6/2 == 3 # True, 6/2을 출력하면 3.0이지만 3과 비교하여 True
num+=1 # num = num + 1, 마찬가지로 *=, /=, -=도 지원
3*3 === 27 # True
String Formatting
# string concatenation
print("Hello, " + "World") # Hello, World
# Python3 f-strings formatting example
year = 2020
# Welcome 2020!, GoodBye 2019...
print(f"""Welcome {year}!, GoodBye {year-1}...""")
Significant Whitespace
여기서 whitespace는 indention들여쓰기를 뜻한다. 다른 언어들과 달리 들여쓰기는 단순히 코드의 가독성을 위해 존재하는 것이 아니라 코드의 종속성을 나타내기에 중요한 사항이다.
조건문
# if, elif, else로 조건문 작성
# and, or, not 사용하여 조건 중첩
if year == 2020 and wantPrint:
print("correct current year!")
elif year == 2021 and wantPrint:
print("next year!")
elif not wantPrint:
print("why you don't want print...?")
else:
print("I don't know")
주석
# 이 줄은 주석입니다.
print("Hi there") # inline comment
'''
Multiline comment
hahahahaha
python3
'''
default value parameter
파이썬은 함수의 parameter에 default 값을 정의해 주는 문법이 따로 있다. 이 때, default값이 정이된 parmameter의 경우 함수를 호출할 때 해당값이 넘겨주지 않아도 상관없으며 default값이 자동으로 넘어가게 된다. 그러나 여러 parameter를 받는 함수의 경우, default값이 정의되지 않은 모든 parameter가 순서상 default값이 정의된 parameter보다 앞쪽에 위치해야 한다.
# 잘못된 parameter 순서
def wrong_function(name="unknown", gender, age):
def wrong_function2(gender, name="unknown", age)
# 올바른 parameter 순서, syntax error
def correct_function(gender, age, name="unknown"):
왜 이런 함수 선언이 syntax error인지는 함수 호출할 때를 살펴보면 알 수 있다. 함수 호출시 함수는 인자를 앞에서부터 차례대로 순서대로 넘겨주어야 하기 때문이다. 만약 name을 default 값으로 하고 싶고, 성별과 나이만 입력하고 싶을 경우 wrong_function("male", 30)
와 같이 할 경우, name parameter에 "male"이 넘어가게 된다.
따라서 함수 파라미터 중 default값을 정해줄 수 없고 반드시 값을 받아야 하는 파라미터를 앞쪽에, default값을 정한 파라미터 경우 뒤에 위치해야 한다.
variable length arguments
variable length arguments는 단어 뜻 그대로 '가변 매개변수'로 매개변수의 수를 다르게 해서 사용할 수 있는 매개변수이다. *arg
와 같은 형태로 파라미터를 작성한다. 위치가 뒤에 있는지, 앞에 있는지 순서가 중요하며 함수 호출 방법도 신경써야 한다. 함수 호출 시 argument의 위치 positional argument를 신경써야 한다.
def my_function(num, *strings):
# code
# 올바른 사용
my_function(8, 'hi', 'hello', '안녕')
# SyntaxError, keyword argument를 사용해서 에러 발생.
my_function(num=1, 'a', 'b', 'c')
def my_function(*srings, num):
# code
# 올바른 사용
my_function('abc', 'def', num=999)
# SyntaxError, keyweord argument를 사용해야 함
my_function('가', '나', 10)
variable length keyword arguments
variable length argument와 마찬가지로 함수 호출시 여러 매개변수를 넘길 수 있는데 **kwargs
와 같은 형태로 파라미터를 작성한다. 함수 호출시 반드시 keyword argument 의 형태로 값을 넘겨주어야 한다.
문제 1.
주석으로 문제 해결을 설명하였다.
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
# TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
# 함수와 같이 parameter 순서를 구성하였다면 age는 반드시 keyword argument를 사용해야 함.
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
# 아래와 같이 함수 호출 해야함
func_param_with_var_args("정우성", "01012341234", "seoul", age=20)
문제 2.
주석으로 문제 해결을 설명하였다.
def func_param_with_kwargs(name, age, kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
# TypeError: func_param_with_kwargs() got an unexpected keyword argument 'mobile'
# mobile이라는 keyword argument는 함수에 존재하지 않는다.
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 아래와 같이 함수에 있는 parameter 이름을 사용한다.
func_param_with_kwargs("정우성", "20", kwargs="01012341234", address="seoul")
문제 3.
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
위 함수 mixed_params
에서 parameter 순서를 먼저 맞추어줄 필요가 있다. 위 코드대로 실행을 할 경우 **kwargs
는 항상 마지막 parameter가 되어야 하기 때문에 SyntaxError: invalid syntax
에러 메세지가 뜨게 된다.
아래 이미지는 파이썬에서 argument의 종류와 순서에 대한 그림이다.
이미지 출처: https://getkt.com/blog/python-keyword-only-arguments/
그림과 같이 함수 파라미터의 순서를 올바르게 수정하고 바르게 함수를 호출한 코드와 결과는 아래와 같다.
def mixed_params(age, address, name="아이유", *args, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "seoul", "정우성", "01012341234", "male", mobile="01012341234")
------결과 콘솔창------
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul