일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DVWA 설치
- 전자금융_취약점
- AWS 가용 영역
- 취약점
- 위험분석 관리
- 보안뉴스
- 정보보안기사 전자지불 시스템
- 데이터베이스 보안 정리
- 정보보안
- AWS SA Series
- AWS 리전이란?
- openvpnconnect
- AWS 용어
- DVWA 환경구성
- 정보보안기사
- 게시글 복사 방법
- ms트래픽문제
- windows트래픽
- metasploit_series
- iso http통신
- openvpn error
- javascript끄기
- AWS AZ
- xz-utils
- 정보보안기사 위험분석 정리
- elasticsearch
- 정보보안기사 데이터베이스
- 티스토리 오류 수정
- tlu.dl
- Risk Analysis
- Today
- Total
ARTIFEX ;)
*args, **kwargs 이해 본문
대부분 *args, **kwargs는 함수를 정의할 때 사용된다.
*args와 **kwargs는 가변 갯수의 인자들을 함수에 넣어준다.
# *args == arguments
# **kwargs == Keyword Arguments.
# *args 사용법
이 지시어는 몇 개의 인자를 받아야할 지 몰라 다 수의 인자를 함수로 받고자 할 때 쓰인다.
자 무슨 말이냐면, 아래 코드를 보자.
/*
def testing_code(*numb):
for num in numb:
print("%s %s" % (num[0], num[1:3]), end=' ')
print("\n")
testing_code('1')
testing_code('1','2')
testing_code('1','2','3')
*/
위에 코드를 보면 tuple 형태로 구성되어 있고 여러 개의 인자로 함수를 호출할 경우, 함수 내부에서는 튜플로 값을 받은 것처럼 처리한다.
*args는 키워드되지 않은 가변 갯수의 인자들을 함수에 보낼 때 사용한다.
# **kwargs 사용법
키워드된 가변 갯수의 인자들을 함수에 보낼 때 사용하며,
*args와 마찬가지로 몇개의 인자를 받아야할지 모를 때 사용하는데 Keyword로 된 args값을 인자로 받는다.
Ex -> key : value 이런식으로.
[예제 - **kwargs]
def introduceName(**kwargs):
for key, value in kwargs.items():
print("{0} is {1}".format(key, value))
introduceName(Name='Jason')
>>> Name is Jason 이 출력된다.
key = value 형태로 함수를 호출할 수 있으며, 그것은 그대로 딕셔너리 형태로 {'key':'value'} 와 같이 함수 내부로 전달된다.
*items() : 사전 데이터(key + value 한 쌍)을 Return(dict_items)
# 언제 사용하나?
사용 목적에 따라 다르지만, 일반적으로 함수의 *데코레이터를 만들거나, *몽키 패칭을 할 때도 사용할 수 있다.
*데코레이터 :
메인 구문이 있고, 여기에 부가적인 구문을 추가하고 싶을 때 사용한다.
그리고 이 부가적인 구문을 반복해서 사용하고 싶은 경우도 있다. 이때 부가적인(그리고 반복적인) 작업을 decorator 로 선언해서 자유롭게 사용이 가능하다는 것이다.
*몽키패칭(Monkey Patch) :
프로그램을 확장하거나, 로컬 시스템 소프트웨어를 지원하고 수정하는 방법이다.(그냥 런타임 중 코드를 수정한다는 의미) - 오직 실행중인 프로그램의 인스턴스에 영향을 미친다.
+ 런타임상에서 함수, 메서드, 속성을 바꾸는 것을 말한다.
코드가 없는 서드파티 제품을 사용하는 중 기능을 변경하거나 확장 등을 위해 사용하며, 런타임 실행중 메모리상의 오브젝트에 적용된다.
(C#,Swift의 경우 기능변경은 불가하지만, 확장은 가능하도록 설계했다.)
(중구난방하게 작성된 느낌이 있어서 나중에 다시 정리할 때 다듬어 봐야겠다)
'# Develop or Testing > Hack for Python' 카테고리의 다른 글
#1 개발 환경 구성 (0) | 2020.04.16 |
---|---|
다양한 라이브러리 및 버전관리를 위한 Conda! in Python (0) | 2020.04.15 |