-
Python 몰랐던 문법 정리언어/Python 2022. 7. 16. 15:03728x90반응형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'언어 > Python' 카테고리의 다른 글
Flask 기본 (0) 2022.11.30 virtualenv로 가상환경 설정하기 (0) 2022.07.16