рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЖрд▓рд╕реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ

рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреЛ рд▓реЛрдЧ рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рд╕рд┐рд░ рд╕реЗ рдХрд┐рд░рд╛рдП рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрдХрд▓рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрднреА-рдХрднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдЪрд╛рд░ рдЖрд▓рд╕реА рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╣рд░ рдЪреАрдЬ рдЬреЛ рдЪрд▓рддреА рд╣реИ, рдЖрдк рдЙрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред


рдЕрдкрдиреЗ рдкрддреНрд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд╛рд╖реНрдкреАрдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдореБрдлреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ред
рд▓рд┐рдВрдХ: рдЖрд▓рд╕реА рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреЗрдбрд╝реЛрдВ рдХреА рдбрд┐рд╕реНрдХ рдХреИрд╢рд┐рдВрдЧ


рдпрд╣ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдмреЛрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢:


evalcache рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдбреЗрдЯрд╛, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣реИрд╢ рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИред рд╕рдВрдЪрд╛рд▓рди рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдирдИ рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрддреНрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпреЗ рдСрдкрд░реЗрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рдЬреИрд╕реЗ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдирдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЖрд▓рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╛ рддреЛ рдЧрдгрдирд╛ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХреИрд╢ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рдХреА рдЧрдИ рдереАред


рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ, evalcache рдиреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдпрд╛рдВрддреНрд░рд┐рдХреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рд╣реИрдВред


рдЧреИрд░-рдХреИрд╢реНрдб рдирд┐рд╖реНрдкрд╛рджрди рдпрд╛рдВрддреНрд░рд┐рдХреА


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рд╣реИрд╢ рдЗрддрдиреА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред


рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


lazyhash = evalcache.LazyHash() #: #evalcache.Lazy(self, cache=None, fastdo=True) @lazyhash def foo(): ... 

рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЧрдгрдирд╛ рддреБрд░рдВрдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрд▓рд╕реА рдлрд╝рд╛рдЗрд▓ рд╡реИрд╕реЗ рднреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЧрдгрдирд╛ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдкреНрд░рдХрдЯреАрдХрд░рдг рдпрд╛рдВрддреНрд░рд┐рдХреА


рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдкреНрд░рдХрдЯреАрдХрд░рдг рдПрдХ рдЬреНрдЮрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ evalcache рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдорд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдВрдЧрдгрдирд╛ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, evalcache рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрдЯреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдирдП рд╡рд┐рдХрд▓реНрдк onplace рдФрд░ onuse рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВред onplace рдирд┐рд░реНрдорд╛рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрдЯреАрдХрд░рдг рдХреА рдУрд░ рдЕрдЧреНрд░рд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИред


 import evalcache lazy = evalcache.Lazy(cache={}, onuse=True) #lazy = evalcache.Lazy(cache={}, onplace=True) ###   . #lazy = evalcache.Memoize() ###   . #lazy = evalcache.Memoize(onplace=True) ###   . @lazy def fib(n): if n < 2: return n return fib(n - 1) + fib(n - 2) for i in range(0,100): print(fib(i)) 

рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдиреНрдп lenificators рдХреЗ рд╕рдорд╛рди рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЖрд▓рд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:


рдЖрд▓рд╕реА рдлрд╛рдЗрд▓реЗрдВ


Evalcache рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдЗрди рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рдкреАрдврд╝реА рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдЖрд▓рд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 import evalcache import evalcache.lazyfile lazyfile = evalcache.lazyfile.LazyFile(cache = evalcache.DirCache(".evalfile")) @lazyfile(field="path") def foo(data, path): f = open(path, "w") f.write(data) f.close() foo("HelloWorld","data.dat") 

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ...
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╕рднреА рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИред
foo("HelloWorld","data.dat") рдПрдХ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣реИрд╢ рдХреБрдВрдЬреА рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрдЯреАрдХрд░рдг рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЧрдгрдирд╛ рдХреА рддрддреНрдХрд╛рд▓ рд╢реБрд░реБрдЖрдд рд╣реЛрддреА рд╣реИред


рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рддрд░реАрдХрд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
@lazyfile(field="path") lazyfile рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░, рдЗрд╕ рдкрде рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред evalcache рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ ".evalfile" рд╣реИрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реА рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд░реНрдб рд▓рд┐рдВрдХ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╣реИрд╢ рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рдЬрдм рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреИрд╢ рдореЗрдВ рд╣реЛрддреА рд╣реИ, рддреЛ evalcache, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдкрд░ рд╣рд╛рд░реНрдб рд▓рд┐рдВрдХ рдХреЛ рдХреИрд╢ рдореЗрдВ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИред


рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдПрдХ рдЖрд▓рд╕реА рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 import evalcache import evalcache.lazyfile lazy = evalcache.lazy.Lazy(cache = evalcache.DirCache(".evalcache")) lazyfile = evalcache.lazyfile.LazyFile(cache = evalcache.DirCache(".evalfile")) @lazyfile(field="path") def foo(data, path): f = open(path, "w") f.write(data) f.close() @lazy def datagenerator(): return "HelloWorld" foo(datagenerator(),"data.dat") 

рдореВрд╡реАрдкреА рдЯреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдПрдбрд┐рдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ред


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕реЗрдЯ рдЗрддрдирд╛ рд╡рд┐рд╢рд╛рд▓ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЛ рдЦреЛрдЬрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореВрд╡реАрдкреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рджреЛ рдШрдВрдЯреЗ рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдкрд╛рджрдХ рджреЗрддреЗ рд╣реИрдВред рд╕реНрдерд╛рдкрдирд╛ - рдХреГрдкрдпрд╛ред рдзреНрд╡рдирд┐ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдХреГрдкрдпрд╛ред рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ - рдХреГрдкрдпрд╛ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИред рдЬрдм рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рддреА рд╣реИ, рд╕рднреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред


Evalcache рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реАред


 #!/usr/bin/env python3 #coding:utf-8 import sys import types from moviepy.editor import * import evalcache.lazyfile lazyhash = evalcache.LazyHash() lazyfile = evalcache.lazyfile.LazyFile() LazyVideoClip = lazyhash(VideoClip) VideoFileClip = lazyhash(VideoFileClip) AudioFileClip = lazyhash(AudioFileClip) CompositeVideoClip = lazyhash(CompositeVideoClip) concatenate_videoclips = lazyhash(concatenate_videoclips) @lazyfile("path") def lazy_write_videofile(path, clip): clip.write_videofile(path) source = VideoFileClip("source.mp4") music0 = AudioFileClip("music0.mp3") music1 = AudioFileClip("music1.mp3") music = music0 dur = 3 s0 = 1 s1 = 8 s2 = 16 part0 = source.subclip(s0, s0 + dur) part1 = source.subclip(s1, s1 + dur * 2).fl_time(lambda t: t * 2).set_duration(2) part2 = source.subclip(s2, s2 + dur * 4).fl_time(lambda t: t * 5).set_duration(2) clip = concatenate_videoclips([part0, part1, part2]) clip = clip.set_audio(music.set_duration(clip.duration)) lazy_write_videofile("part0.mp4", part0) lazy_write_videofile("part1.mp4", part1) lazy_write_videofile("part2.mp4", part2) lazy_write_videofile("part0_mus.mp4", part0.set_audio(music.set_duration(part0.duration))) lazy_write_videofile("part1_mus.mp4", part1.set_audio(music.set_duration(part1.duration))) lazy_write_videofile("part2_mus.mp4", part2.set_audio(music.set_duration(part2.duration))) if len(sys.argv) > 1 and sys.argv[1] == "compile": clip.lazy_write_videofile("clip.mp4", clip) 

рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИ


рд╣рдо рдЧреИрд░-рдХреИрд╢реНрдб рдирд┐рд╖реНрдкрд╛рджрди рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд╡реАрдкреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдкреЗрдбрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рднреА рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВред


рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓:


 LazyVideoClip = lazyhash(VideoClip) VideoFileClip = lazyhash(VideoFileClip) AudioFileClip = lazyhash(AudioFileClip) CompositeVideoClip = lazyhash(CompositeVideoClip) concatenate_videoclips = lazyhash(concatenate_videoclips) 

рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдлрд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:


 @lazyfile("path") def lazy_write_videofile(path, clip): clip.write_videofile(path) 

рд╡реАрдбрд┐рдпреЛ рдЕрдиреБрдХреНрд░рдо рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреА рдХреНрд▓рд┐рдк рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕рдВрдЧреАрдд рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛:


 lazy_write_videofile("part0.mp4", part0) lazy_write_videofile("part1.mp4", part1) lazy_write_videofile("part2.mp4", part2) lazy_write_videofile("part0_mus.mp4", part0.set_audio(music.set_duration(part0.duration))) lazy_write_videofile("part1_mus.mp4", part1.set_audio(music.set_duration(part1.duration))) lazy_write_videofile("part2_mus.mp4", part2.set_audio(music.set_duration(part2.duration))) 

рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рддрднреА рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдЦрд╛рдПрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреАред


рдЬрдм рдкрд░рд┐рдгрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ 'рд╕рдВрдХрд▓рди' рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ:


 if len(sys.argv) > 1 and sys.argv[1] == "compile": clip.lazy_write_videofile("clip.mp4", clip) 

рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп:


рдпрд╣ рдкрд╛рда рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ, evalcache рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдорджрдж рд╕реЗ, рдЖрдк рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдкреАрдврд╝реА рдХреЛ рдорд╛рдирддрд╛ рд╣реИред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдпрд╛ рдЪрдпрдирд╛рддреНрдордХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рд╕рдВрджрд░реНрдн:


рдЧрд┐рдердм рдкрд░рд┐рдпреЛрдЬрдирд╛
рдкрд┐рдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛

Source: https://habr.com/ru/post/hi430186/


All Articles