언어/Python

Python 몰랐던 문법 정리

cottoncover 2022. 7. 16. 15:03
728x90
반응형
SMALL

매개변수 *args, **kwargs

함수에서 몇 개의 인자가 들어올지 모르는 상황이나, 매개변수 선언을 한 개만 하고 싶을 경우 사용한다.

*args - 선언된 매개변수에 인자들이 튜플 형식으로 들어간다.

예시)

def function(*args):
    print(args)

function('hi',4,'python')
#('hi', 4, 'python')

**kwargs - kwargs - 선언된 매개변수에 인자들이 딕셔너리 형식으로 들어간다.

예시)

def function(**kwargs):
    print(kwargs)

function(name='cotton',age=26,hi='hello')
#{'age': 26, 'hi': 'hello', 'name': 'cotton'}

주의)

def argsFunction(name,*args,hi):
    print(name,end=" ")
    print(args,end=" ")
    print(hi,end=" ")

def kwargsFunction(name,**kwargs,hi):
    print(name,end=" ")
    print(kwargs,end=" ")
    print(hi,end=" ")

*args, **kwargs 모두 중간에 들어갈 경우 에러가 나게 된다. 이유는 args,kwargs 이후에 선언된 매개변수에는 어떠한 값도 할당되지 않기 때문이다.

그러므로 *args와 **kwargs는 매개변수의 마지막에 선언해줘야 한다.

 

 

typing 모듈 (v3.6)

파이썬에서 다른 c언어나 java와 같이 변수의 타입을 지정해주는 방법도 있다. 파이썬의 typing모듈에서 여러 타입들을 import해서 변수의 타입을 지정해줄 수 있다.
from typing import List,Dict,Tuple,NewType

numList: List[int] = [1, 2, 3]
menu: Dict[str, int] = {"beer": 4000, "soju": 4000, "wine",10000}
userInfo: Tuple[int, str, str] = (20, "Cotton", "hello")

Student=NewType('StudentID',int)
x=Student(1234)

Callable

파이썬에서는 함수를 일반 값처럼 변수에 저장하거나 함수의 인자로 넘기거나 함수의 반환값으로 사용할 수 있다. Callable을 이러한 함수에 대한 타입 어노테이션을 추가할 때 사용한다.

예시)

from typing import Callable

def add(a,b):
    return a+b

def function(add:Callable[[int,int], int], a:int,b:int) -> None:
    print(add(a,b))

function(add,1,2)
#3

 

위와 같은 경우 add함수는 int형의 인자를 2개 받고 int형 반환인자를 하나 갖는 함수임을 알 수 있다.

타입 추상화

함수의 매개변수에 대한 타입 어노테이션을 추가해줄 경우, 타입을 추상적으로 명시해줄 수 있게 해준다. 리스트와 같은 경우 list, tuple 등 여러 리스트가 인자로 들어올 수 있기 때문에 `Iterable`을 통해 추상적으로 명시해줄 수 있다.
from typing import Iterable, List

def toStrings(nums: Iterable[int]) -> List[str]:
    return [x+10 for x in nums]

print(toString([1,2,3])
#[11,12,13]
print(toString((1,2,3))
#[11,12,13]
print(toString({1,2,3})
#[11,12,13]

주의)

하지만, 파이썬은 타입 지정을 해주더라도 저절로 정적 유형 검사를 해주지 않습니다. 타입 지정에 대한 별도의 검사를 위해서는 mypy와 같은 타입체커를 도입해야 한다.

반응형
LIST