python картасының объект әдісі

Мен әр түрлі әдісті шақыра отырып, көптеген нысандар арқылы айналдырып аламын:

for cell in cells:
    cell.update_type(next_cells[cell.index])

Картамен эквивалентті жасау әдісі бар ма?

4
Цикл өте жақсы. map() немесе тізімді түсіндіруді қолданбаңыз, олар сізге функция қоңырауларының қайтарылған мәндерінің тізіміне қызығушылық туғызатын жағдайларға арналған.
қосылды автор Sven Marnach, көзі
Бұл маңызды айырмашылық. len (cells) == 1000000000 болсын. Егер сіз бұл циклды map() немесе тізімді түсінуімен ауыстырсаңыз, миллиардтаған жазбалармен тізімін құрып, оны басқарып, содан кейін оны кейінірек тастаңыз.
қосылды автор Kirk Strauser, көзі

1 жауаптар

update_type қайтарады None , сондықтан сіз оны пайдалана аласыз:

any(cell.update_type(next_cells[cell.index]) for cell in cells)

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

Мұнда map дегенді қолдануға болмайды, себебі оны Python функциясында/lambda өрнегінде пайдаланудан аулақ болудың ешқандай жолы жоқ, сондықтан сіз қалыпты жағдайдан жылдамдық артықшылығын алмайсыз цикл.

Сіз тізімнің түсінігін пайдаланбауыңыз керек, себебі сіз update_type қайтаратын мәндерінің тізімін қажетсіз түрде жинайсыз, тіпті оларды елемейсіз - қолданыңыз орнына .

9
қосылды
@agf: Егер next_cells - бұл Python тізімі болса, онда тізіміне анық шақыру .__ getitem __ жылдамдықты жоғарылатудың орнына оларды баяулатады. Маған сенбейтін болсаң, өзіңе уақыт бер. :)
қосылды автор Sven Marnach, көзі
@Jochen: Төмендеуді қайта қарастырыңыз. Бұл жауап пайдалы болып табылады және ОС өз сұрағының бүкіл мақсаты микро оңтайландыру екендігін анық айтады (бұл жауаптың бірінші түсініктемесін қараңыз).
қосылды автор Sven Marnach, көзі
-1 себебі сіз оңтайландыруға еш негізсіз микро оңтайландыруды жасайсыз. Нәтижесінде мінсіз тамаша цикл кем оқылатын және нәзік нәрсеге айналды. Бұл жауапта жалғыз жақсы кеңес - циклды ұстау.
қосылды автор Jochen Ritzel, көзі
@SvenMarnach Қызықты. Бұл оңтайландырылатын нәрсе үшін мағынасы бар, бірақ мен бұған дейін ешқашан ойлаған емеспін. Бұл бөлімді жою (ол кейінірек қосылды, бәрібір).
қосылды автор agf, көзі
@Ferguzz кез келген қалыпты ілмектен жылдамырақ болуы мүмкін. Сондай-ақ барлық айнымалы іздеудің жергілікті екенін тексеріңіз.
қосылды автор agf, көзі
@JochenRitzel «, бірақ қалыпты циклда проблема болмаса, жай ғана ұстаныңыз, ол ең оқылатын және сіз мерзімінен бұрын оңтайландыруға болмайды.» лауазымда тікелей нұсқаулық болып табылады. Мен баламалы әдіс бере отырып, неғұрлым анық болуы мүмкін едім?
қосылды автор agf, көзі
рахмет. бұл мағынасы бар. цикл миллиондаған жасушалар сияқты жұмыс істеп жатыр, сондықтан біраз нәрселерді жылдамдатқысы келді! оқасы жоқ!
қосылды автор Ferguzz, көзі
кез келген() жылдамдықты азайтады. cell.index орнына for i, ұяшықтағы ұяшықтағы (ұяшықтар) пайдалану арқылы кез келген() қолданған кезде бірнеше мс-ді өшіреді, бірақ қалыпты жағдайда циклда қолданылған кез-келген әсерге ие болады.
қосылды автор Ferguzz, көзі