python 생 성기 협정 연산 실례
우 리 는 다음 과 같은 생 성 기 를 정의 합 니 다.
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield
print(" [%s] %s 。"%(goods,name))
p = put_on("bigberg")
#
G:\python\install\python.exe G:/python/untitled/study4/test/double.py
Process finished with exit code 0
우리 가 함 수 를 yield 를 통 해 생 성기 로 바 꾸 면 함 수 를 직접 실행 하면 결과 가 돌아 오지 않 습 니 다.이 때 함 수 는 이미 생 성기 이기 때문에,우 리 는 next()를 통 해 값 을 얻 고,yield 를 만 났 을 때 다시 함 수 를 꺼 내야 합 니 다.
print(type(p))
#
<class 'generator'>
next()방법 을 추가 합 니 다:
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield # yield
print(" [%s] %s 。"%(goods,name)) #
p = put_on("bigberg")
p.__next__()
#
Hi bigberg, , !
이때 함수 가 goods=yield 에 중단 되 었 습 니 다.우리 가 next()함 수 를 다시 호출 할 때 함 수 는 중단 후의 내용,즉 상례 의 yield 아래 부분 만 실 행 됩 니 다.next()를 하나 더 추가 합 니 다.
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield
print(" [%s] %s 。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.__next__()
#
Hi bigberg, , !
[None] bigberg 。
우리 가 두 번 째 next()에서 운행 할 수 있 는 것 은 yield 아래 의 일부 내용 이지 만 goods 에 값 을 전달 하지 않 았 기 때문에 화물 은 None 입 니 다.소결:
yield 를 통 해 함 수 를 생 성기 로 변환 하려 면 next()방법 을 사용 해 야 실행 할 수 있 습 니 다.
yield 는 함수 의 인 터 럽 트 상태 만 유지 하고 next()를 다시 호출 하면 yield 뒤의 부분 을 실행 합 니 다.
yield 반환 값 이 없 으 면 None 빈 값 을 되 돌려 줍 니 다.
2.send()전송 값
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield
print(" [%s] %s 。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.send(" ")
#
Hi bigberg, , !
[ ] bigberg 。
소결:__next__()이 yield 만 호출 하면 yield 를 깨 우 는 것 이 라 고 할 수 있 지만 yield 에 게 값 을 전달 하지 않 습 니 다.
send()방법 은 yield 를 호출 합 니 다.
send()함 수 를 사용 하기 전에next__(),먼저 중단 해 야 하기 때문에 두 번 째 호출 시 값 을 전달 할 수 있 습 니 다.
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield
print(" [%s] %s 。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.send(" ")
p.send(" ")
p.send(" ")
p.send(" ")
# send()
Hi bigberg, , !
[ ] bigberg 。
[ ] bigberg 。
[ ] bigberg 。
[ ] bigberg 。
3.단일 스 레 드 병행 효과 실현(협 정)
import time
def put_on(name):
print("Hi {}, , !".format(name))
while True:
goods = yield
print(" [%s] %s 。"%(goods,name))
def transfer(name):
p = put_on('A')
p2 = put_on('B')
p.__next__()
p2.__next__()
print("%s !"%name)
for i in range(5):
time.sleep(1)
print("%s "%name)
p.send(" ")
p2.send(" ")
transfer("bigberg")
#
Hi A, , !
Hi B, , !
bigberg !
bigberg
[ ] A 。
[ ] B 。
bigberg
[ ] A 。
[ ] B 。
bigberg
[ ] A 。
[ ] B 。
bigberg
[ ] A 。
[ ] B 。
bigberg
[ ] A 。
[ ] B 。
이상 의 python 생 성기 협 정 연산 인 스 턴 스 는 바로 소 편 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.