파이썬 프로그래밍 언어의 덜 알려졌지만 유용한 기능은 무엇입니까?
- 파이썬 코어에 대한 답변을 제한하십시오.
- 답변 당 하나의 기능.
- 문서에 대한 링크가 아니라 기능에 대한 예와 간단한 설명을 제공하십시오.
- 제목을 첫 번째 줄로 사용하여 기능에 레이블을 지정하십시오.
답변에 대한 빠른 링크 :
- 인수 풀기
- 바지 멜빵
- 체인 비교 연산자
- 데코레이터
- 기본 인수의 단점 / 변경 가능한 기본 인수의 위험
- 설명자
- 사전 디폴트
.get
값 - 독 스트링 테스트
- 줄임표 슬라이싱 구문
- 열거
- 기타
- iter () 인수로서의 함수
- 생성기 표현식
import this
- 적절한 가치 교환
- 스테핑 목록
__missing__
아이템- 여러 줄 정규식
- 명명 된 문자열 형식
- 중첩 된 목록 / 생성기 이해
- 런타임시 새로운 유형
.pth
파일들- ROT13 인코딩
- 정규식 디버깅
- 발전기로 보내기
- 대화 형 인터프리터에서 탭 완성
- 삼항식
try/except/else
- 포장 풀기 +
print()
기능 with
성명서
답변
체이닝 비교 연산자 :
>>> x = 5
>>> 1 < x < 10
True
>>> 10 < x < 20
False
>>> x < 10 < x*10 < 100
True
>>> 10 > x <= 9
True
>>> 5 == x > 4
True
경우 당신이 그것을하고있어 생각 1 < x
으로 나오고있는 True
다음과 비교되지 True < 10
도이다, True
무슨 정말 아니다 그 다음 더, 정말로 번역하는 것 (. 마지막 예제 참조) 1 < x and x < 10
, 그리고 x < 10 and 10 < x * 10 and x*10 < 100
, 미만 입력하고 각각 용어는 한 번만 평가됩니다.
답변
파이썬 정규식 구문 분석 트리를 가져 와서 정규식을 디버깅하십시오.
정규 표현식은 파이썬의 훌륭한 기능이지만, 디버깅은 어려울 수 있으며 정규 표현식을 잘못 사용하는 것은 너무 쉽습니다.
다행히도 파이썬은 문서화되지 않은 실험적인 숨겨진 플래그 re.DEBUG
(실제로 128)를 로 전달하여 정규식 구문 분석 트리를 인쇄 할 수 있습니다 re.compile
.
>>> re.compile("^\[font(?:=(?P<size>[-+][0-9]{1,2}))?\](.*?)[/font]",
re.DEBUG)
at at_beginning
literal 91
literal 102
literal 111
literal 110
literal 116
max_repeat 0 1
subpattern None
literal 61
subpattern 1
in
literal 45
literal 43
max_repeat 1 2
in
range (48, 57)
literal 93
subpattern 2
min_repeat 0 65535
any None
in
literal 47
literal 102
literal 111
literal 110
literal 116
구문을 이해하면 오류를 발견 할 수 있습니다. 거기서 우리는 내가 탈출하는 것을 잊었다는 것을 알 수 있습니다 []
.[/font]
.
물론 주석이 달린 정규 표현식과 같이 원하는 플래그와 결합 할 수 있습니다.
>>> re.compile("""
^ # start of a line
\[font # the font tag
(?:=(?P<size> # optional [font=+size]
[-+][0-9]{1,2} # size specification
))?
\] # end of tag
(.*?) # text between the tags
\[/font\] # end of the tag
""", re.DEBUG|re.VERBOSE|re.DOTALL)
답변
낱낱이 세다
iterable을 열거 형으로 감싸면 인덱스와 함께 항목이 생성됩니다.
예를 들면 다음과 같습니다.
>>> a = ['a', 'b', 'c', 'd', 'e']
>>> for index, item in enumerate(a): print index, item
...
0 a
1 b
2 c
3 d
4 e
>>>
참고 문헌 :
답변
생성기 객체 생성
당신이 쓰는 경우
x=(n for n in foo if bar(n))
생성기를 꺼내 x에 할당 할 수 있습니다. 이제는 할 수 있음을 의미합니다
for n in x:
이것의 장점은 중간 저장소가 필요하지 않다는 것입니다.
x = [n for n in foo if bar(n)]
경우에 따라 속도가 크게 향상 될 수 있습니다.
생성기 끝에 많은 if 문을 추가하여 기본적으로 중첩 된 for 루프를 복제 할 수 있습니다.
>>> n = ((a,b) for a in range(0,2) for b in range(4,6))
>>> for i in n:
... print i
(0, 4)
(0, 5)
(1, 4)
(1, 5)
답변
iter ()는 호출 가능한 인수를 취할 수 있습니다
예를 들어 :
def seek_next_line(f):
for c in iter(lambda: f.read(1),'\n'):
pass
이 iter(callable, until_value)
함수 는 반환 callable
될 때까지 반복적으로 호출 하고 결과를 산출합니다 until_value
.
답변
변경 가능한 기본 인수에주의하십시오
>>> def foo(x=[]):
... x.append(1)
... print x
...
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
대신 “제공되지 않음”을 나타내는 센티넬 값을 사용하고 기본값으로 변경하려는 변수로 대체해야합니다.
>>> def foo(x=None):
... if x is None:
... x = []
... x.append(1)
... print x
>>> foo()
[1]
>>> foo()
[1]
답변
생성기 함수로 값 보내기 . 예를 들어이 기능이있는 경우 :
def mygen():
"""Yield 5 until something else is passed back via send()"""
a = 5
while True:
f = (yield a) #yield a and possibly get f in return
if f is not None:
a = f #store the new value
당신은 할 수 있습니다 :
>>> g = mygen()
>>> g.next()
5
>>> g.next()
5
>>> g.send(7) #we send this back to the generator
7
>>> g.next() #now it will yield 7 until we send something else
7