문제
루비의 다음 코드와 동등한 파이썬은 무엇입니까?
def loop
cont=nil
for i in 1..4
puts i
callcc {|continuation| cont=continuation} if i==2
end
return cont
end
> c=loop
1
2
3
4
> c.call
3
4
해결책
당신이 인용 한 기사에는 링크가 포함되어 있습니다 연속은 간단하고 설명되었습니다 파이썬 언어의 연속에 대해 이야기하는 리소스 섹션에서.
다른 팁
살펴보십시오 생산하다 발전기를 만들기위한 진술.
나는 루비를 말하지 않지만 당신이 이것을 찾고있는 것 같습니다.
def loop():
for i in xrange(1,5):
print i
if i == 2:
yield
for i in loop():
print "pass"
편집 : 나는 이것이 기본적으로 실제 연속의 전문화라는 것을 알고 있지만 대부분의 목적으로 충분해야합니다. 사용 yield
연속과 반환 .next()
생성기의 메시지 (호출만으로 반환 loop()
) 리엔터에.
사용 generator_tools
(설치하기 위해서: '$ easy_install generator_tools
'):
from generator_tools import copy_generator
def _callg(generator, generator_copy=None):
for _ in generator: # run to the end
pass
if generator_copy is not None:
return lambda: _callg(copy_generator(generator_copy))
def loop(c):
c.next() # advance to yield's expression
return _callg(c, copy_generator(c))
if __name__ == '__main__':
def loop_gen():
i = 1
while i <= 4:
print i
if i == 2:
yield
i += 1
c = loop(loop_gen())
print("c:", c)
for _ in range(2):
print("c():", c())
산출:
1
2
3
4
('c:', <function <lambda> at 0x00A9AC70>)
3
4
('c():', None)
3
4
('c():', None)
def loop():
def f(i, cont=[None]):
for i in range(i, 5):
print i
if i == 2:
cont[0] = lambda i=i+1: f(i)
return cont[0]
return f(1)
if __name__ == '__main__':
c = loop()
c()
제휴하지 않습니다 StackOverflow