파이썬에서 dict.pop (a, b)는 무엇을 의미합니까?
class a(object):
data={'a':'aaa','b':'bbb','c':'ccc'}
def pop(self, key, *args):
return self.data.pop(key, *args)#what is this mean.
b=a()
print b.pop('a',{'b':'bbb'})
print b.data
self.data.pop(key, *args)
← ------ 왜 두 번째 논쟁이 있습니까?
pop
dicts 의 메서드 ( self.data
예 {'a':'aaa','b':'bbb','c':'ccc'}
: 여기에서)는 두 개의 인수를 사용 합니다. 문서 참조
두 번째 인수는 default
, 무엇을 pop
첫 번째 인수는 경우 반환 key
, 존재하지 않는다. ( pop
단 하나의 인수로 호출 key
하면 키가 없으면 예외가 발생합니다.)
당신의 예에서, print b.pop('a',{'b':'bbb'})
때문에,이 무관 'a'
하다 의 핵심 b.data
. 하지만 그 줄을 반복하면 ... :
b=a()
print b.pop('a',{'b':'bbb'})
print b.pop('a',{'b':'bbb'})
print b.data
차이가 있음을 알 수 있습니다. 첫 번째 pop
는 'a'
키를 제거 하므로 두 번째 pop
에서는 default
인수가 실제로 반환됩니다 ( 'a'
이제에는 b.data
.
여기에 많은 질문이 있습니다. 나는 적어도 2 개, 아마도 3 개를 본다.
- pop (a, b)는 무엇을합니까? / 두 번째 주장이있는 이유는 무엇입니까?
- 무엇을
*args
위해 사용되고 있습니까?
첫 번째 질문은 Python 표준 라이브러리 참조 에서 간단하게 답변됩니다 .
pop (key [, 기본값])
키가 사전에 있으면 제거하고 해당 값을 반환하고 그렇지 않으면 기본값을 반환합니다. 기본값이 제공되지 않고 키가 사전에 없으면 KeyError가 발생합니다.
두 번째 질문은 Python Language Reference 에서 다룹니다 .
"* identifier"형식이 있으면 초과 위치 매개 변수를 수신하는 튜플로 초기화되며 기본값은 빈 튜플입니다. "** identifier"형식이 있으면 초과 키워드 인수를받는 새 사전으로 초기화되며 기본값은 새 빈 사전입니다.
즉, pop
함수는 적어도 두 개의 인수를 사용합니다. 처음 두 사람은 이름 self
과 key
; 나머지는라는 튜플에 채워집니다 args
.
*args
에 대한 호출에서가 전달 될 때 다음 줄에서 일어나는 일은 self.data.pop
이것의 반대입니다. 튜플 *args
은 전달되는 위치 매개 변수로 확장됩니다. 이것은 Python Language Reference에 설명되어 있습니다 .
구문 * expression이 함수 호출에 나타나면 expression은 시퀀스로 평가되어야합니다. 이 시퀀스의 요소는 추가 위치 인수 인 것처럼 처리됩니다.
요컨대, a.pop()
은 (는) 유연하고 임의의 수의 위치 매개 변수를 허용하여 알 수없는 수의 위치 매개 변수를에 전달할 수 있습니다 self.data.pop()
.
이는 유연성을 제공합니다. data
될 일이 dict
바로 지금을, 그래서 self.data.pop()
하나 또는 두 개의 매개 변수를 사용합니다; 그러나 data
호출을 위해 19 개의 매개 변수를 사용하는 유형 self.data.pop()
으로 변경하면 클래스 a
를 전혀 변경할 필요가 없습니다 . a.pop()
그래도 19 개의 필수 매개 변수를 전달하기 위해 호출 된 코드를 변경해야합니다 .
>>> def func(a, *args, **kwargs):
... print 'a %s, args %s, kwargs %s' % (a, args, kwargs)
...
>>> func('one', 'two', 'three', four='four', five='five')
a one, args ('two', 'three'), kwargs {'four': 'four', 'five': 'five'}
>>> def anotherfunct(beta, *args):
... print 'beta %s, args %s' % (beta, args)
...
>>> def func(a, *args, **kwargs):
... anotherfunct(a, *args)
...
>>> func('one', 'two', 'three', four='four', five='five')
beta one, args ('two', 'three')
>>>
def func(*args):
pass
이 방법으로 함수를 정의하면 함수에 *args
전달 된 인수 배열이됩니다. 이를 통해 얼마나 많은 인수가 전달 될지 미리 알지 않고도 함수가 작동 할 수 있습니다.
You do this with keyword arguments too, using **kwargs
:
def func2(**kwargs):
pass
In your case, you've defined a class which is acting like a dictionary. The dict.pop
method is defined as pop(key[, default])
.
Your method doesn't use the default
parameter. But, by defining your method with *args
and passing *args
to dict.pop()
, you are allowing the caller to use the default
parameter.
In other words, you should be able to use your class's pop
method like dict.pop
:
my_a = a()
value1 = my_a.pop('key1') # throw an exception if key1 isn't in the dict
value2 = my_a.pop('key2', None) # return None if key2 isn't in the dict
참고URL : https://stackoverflow.com/questions/1990802/in-python-what-does-dict-popa-b-mean
'Nice programing' 카테고리의 다른 글
구독시 마지막으로 관찰 가능 (0) | 2020.10.07 |
---|---|
Java 스위치 케이스 : 중괄호가 있거나 없는가? (0) | 2020.10.07 |
jQuery에 전역 값 (전역 변수 일 필요는 없음)을 저장하는 방법은 무엇입니까? (0) | 2020.10.07 |
MySQL 데이터베이스의 제약 목록 (0) | 2020.10.07 |
Bash에서 명령 줄 인수를 변경하는 방법은 무엇입니까? (0) | 2020.10.07 |