파이썬 기본 문법과 함수 argument

open_h·2020년 11월 19일
0
post-thumbnail

개인 학습을 위해 만들어진 글입니다.

python 기본 문법을 정리하였다.

최대한 예제 코드 위주로 정리하였으며, 내가 알고 있던 언어들과 달랐던 점들, 정리하고 넘어가고 싶은 부분만 정리했다.

Python Basic 1

​ 내가 알고 있던 언어들과 달랐던 점들을 위주로 정리했다.

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들여쓰기를 뜻한다. 다른 언어들과 달리 들여쓰기는 단순히 코드의 가독성을 위해 존재하는 것이 아니라 코드의 종속성을 나타내기에 중요한 사항이다.

Python Basic 2

조건문

# 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
'''

Python Function Parameter

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를 신경써야 한다.

  1. 일반 매개변수 앞에, 가변 매개변수(* string)가 뒤에 온 경우
def my_function(num, *strings):
  # code
  
# 올바른 사용
my_function(8, 'hi', 'hello', '안녕')

# SyntaxError, keyword argument를 사용해서 에러 발생.
my_function(num=1, 'a', 'b', 'c')
  1. 가변 매개변수가 앞에, 일반 매개변수가 뒤에 온 경우
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 의 형태로 값을 넘겨주어야 한다.

Function Parameter Problems


문제 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
profile
The only thing that interferes with my learning is my education.

0개의 댓글