Генераторға қарсы сорутинді жалғастыру

Сапа мен жалғастыру және генератор арасындағы айырмашылық қандай?

124
04 апр. 04 мамырда Мехди Асгари тағайындалды 2009-04-04 00:19 '09 at 0:19 2009-04-04 00:19
@ 3 жауаптар

Мен бұл генератордан бастаймын, себебі бұл қарапайым оқиға. @Zvolkov атап өткендей, бұл функцияларды / объектілерді қайтарусыз қайта шақыруға болады, бірақ callee мәнді қайтарады (қайтарады) және оларды орындауды тоқтатады. Олар қайтадан шақырылған кезде, олар өлім жазасын тоқтатып, қайтадан жұмысын орындайтын жерден басталады.

Генератор негізінен қысқартылған (асимметриялық) корутин болып табылады. Сопротин мен генератордың арасындағы айырмашылық, бұл сопротеин бастапқы қоңыраудан кейін дәлел алады, ал генератор мүмкін емес.

Бұл кейбіреулерге корутниктерді қай жерде пайдалануға болатынын мысалға келтіретін біраз қиын, бірақ міне, менің ең жақсы әрекетім. Бұл мысал ретінде (құрастырылған) Python кодын алыңыз.

 def foo(x, y, cc): cc(max(x, y)) biggest = callcc(foo, [23, 42]) print biggest 

Бұл жағдайда callcc() өз кезегінде foo() функциясын ағымдағы жалғастырумен ( cc ) шақырады, яғни callcc() шақырылған бағдарламадағы нүктеге сілтеме. foo() қазіргі кездегі жалғастыруды шақырғанда, ол қазіргі кезде жалғасқан кездегі мәнге оралу үшін callcc() сәйкес келеді және ол кезде ол ағымдағы callcc() жерге қайта оралады. қоңырау шалуда callcc() .

Мұның бәрі біздің Python гипотетикалық нұсқасы '42' басып шығарады.

Бұл көмектеседі деп үміттенемін және менің түсіндірулерім біршама жетілдірілгеніне сенімдімін!

104
04 апр. Жауап: Keith Gaughan Apr 04 2009-04-04 01:05 '09 at 1:05 2009-04-04 01:05

Сорутин - бұл өз кезегінде өз жұмысын жасайтын бірнеше процедуралардың бірі, содан кейін топтағы басқа сопроводительдерді бақылауды тоқтату.

Жалғастыру - осы іс рәсімі орындалғанда орындалатын («жалғастыру») кез келген процедураға ауысатын «функцияның көрсеткіші».

border=0

Генератор (.NET) - бұл мәнді түкіре алатын, әдісті орындауды «кідірту» және кейінгі мән сұралған кезде сол нүктеден шығуға болатын тіл құрылысы.

29
04 апр. жауап zvolkov 04 apr беріледі. 2009-04-04 00:29 '09 в 0:29 2009-04-04 00:29

Python жаңа нұсқасында генераторларға генераторларға генераторлар жібере аласыз, бұл python генераторларын тиімді бағдарламаландырады.

Python генераторы мен басқа жасанды генератордың негізгі айырмашылығы питонда сіздің yield value тек абонентке қайтаруға болады. Жасыл түсте, target.switch(value) белгілі бір мақсатты бағдарламаға баруға және target орындау жалғасатын мәнге ие болады.

8
31 авг. Жауап Юйчан Ван 31 тамызда берілді . 2011-08-31 05:51 '11 at 5:51 2011-08-31 05:51

тегтер туралы сұрақтар немесе Сұрақ қою