рдкрд╛рдЗрдкреНрд╕, рдкрд╛рдЗрдереЛрдирд┐рдХ рддрд░реАрдХрд╛

рдХреБрдЫ рдкрд╛рдпрдердирд╡рд╛рджреА рдХреЛрдб рдкрдврд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди - рдирд┐рд░реНрдгрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИрдВ - рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреА рддрд░рд╣
my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)]))) 
рдпрд╛ рдХреНрд╡рд╛рддреНрд░рд┐рдиреНрд╕ рд▓рд╛
 xs = [x for x in range(100)] xs_filtered = filter(lambda x: x % 3 == 1, xs) xs_sum = sum(xs_filtered) result = my_function(xs_sum) 
рдЖрджрд░реНрд╢рд╡рд╛рджреА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ
 result = [x for x in range(100)] \ | where(lambda x: x % 3 == 1)) \ | sum \ | my_function 

рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ?

рдЗрд╕ рддрд░рд╣ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЬреВрд▓рд┐рдпрди рдкрд╛рд▓рд╛рд░реНрдб рдиреЗ рдЕрдкрдиреЗ рдкрд╛рдЗрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдЪрд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
 from pipe import * [1,2,3,4] | where(lambda x: x<=2) #<generator object <genexpr> at 0x88231e4> 

рдЙрдлрд╝, рд╕рд╣рдЬ рдЖрд╡реЗрдЧ рдиреЗ рд╕рд╡рд╛рд░реА рдирд╣реАрдВ рдХреАред рдкрд╛рдЗрдк рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрднреА рддрдХ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдирд╛ рд╣реИред
 [1,2,3,4] | where(lambda x: x<=2) | as_list #[1, 2] 

рдпрд╣ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪреА () рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рдХрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдкрдХрд░рдг рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЕрдкрдиреЗ рд╢реЛрдз рдореЗрдВ рд╕рдВрдЧрдд рдерд╛ рдФрд░ рд╣рдореЗрдВ рдкрд╛рдЗрдк рдлрд╝рдВрдХреНрд╢рди as_list рдХреА рдкреЗрд╢рдХрд╢ рдХреАред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реВрдЪреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдЖрдк рдкрд╛рдпрдерди рдХреЗ рдХрд┐рд╕реА рднреА рдЪрд▓рдиреЗ (рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп) рдЗрдХрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╣реЛ, "рдЬреЛрдбрд╝реЗ" (рдЯреБрдкрд▓реНрд╕) рдпрд╛, рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк, рдПрдХ рд╣реА рдЬрдирд░реЗрдЯрд░:
 def fib(): u"""    """ a, b = 0, 1 while 1: yield a a, b = b, a + b fib() | take_while(lambda x: x<10) | as_list #0 #1 #1 #2 #3 #5 #8 
рдХрдИ рд╕рдмрдХ рдпрд╣рд╛рдВ рд╕реЗ рд╕реАрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
  1. рдкрд╛рдЗрдк рдореЗрдВ рдЖрдк рд╕реВрдЪреА, "рдЬреЛрдбрд╝реЗ", рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХрд┐рд╕реА рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВред
  2. рдЪреЗрди рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реЛрдЧрд╛ред
  3. рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ (рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╛рдЗрдк), рдкрд╛рдЗрдкрд┐рдВрдЧ "рдЖрд▓рд╕реА" рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╣реИ рдХрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реИ рдФрд░ рдПрдХ рдЕрдВрддрд╣реАрди рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдирдВрдж рдЕрдзреВрд░рд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 @Pipe def custom_add(x): return sum(x) [1,2,3,4] | custom_add #10 
рддрд░реНрдХ? рдЖрд╕рд╛рди:
 @Pipe def sum_head(x, number_to_sum=2): acc = 0 return sum(x[:number_to_sum]) [1,2,3,4] | sum_head(3) #6 
рд▓реЗрдЦрдХ рдиреЗ рдХреГрдкрдпрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд╛рдЗрдк рдкреНрд░рджрд╛рди рдХрд┐рдПред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ:рд▓реЗрдХрд┐рди рдпреЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ:рдЗрди рдФрд░ рдЕрдиреНрдп рдкрд╛рдЗрдкреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ, рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдкрд╛рдЗрдк рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ


рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЖрдзрд╛рд░ рдХреЛрдб рд▓реИрдХреЛрдирд┐рдХ рдХреИрд╕реЗ рдерд╛! рдЦреБрдж рдХреЗ рд▓рд┐рдП рдиреНрдпрд╛рдпрд╛рдзреАрд╢:
 class Pipe: def __init__(self, function): self.function = function def __ror__(self, other): return self.function(other) def __call__(self, *args, **kwargs): return Pipe(lambda x: self.function(x, *args, **kwargs)) 
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рд╕рдм рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рд╡рд░реНрдЧред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЪрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд╛рдЗрдк рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдкрд╛рдЗрдк рдХреЛ __call__ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдирдпрд╛ рдкрд╛рдЗрдк рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЦреНрдп рд╕реВрдХреНрд╖реНрдорддрд╛ __ror__ рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рдПрдХ рдЙрд▓рдЯрд╛ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЬреЛ "рдпрд╛" рдСрдкрд░реЗрдЯрд░ (__or__) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдПрдВ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рджрд╛рд╣рд┐рдиреЗ рдСрдкрд░реЗрдЯрд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЧрдгрдирд╛ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдкрд╣рд▓рд╛ рддрддреНрд╡ рджреВрд╕рд░реЗ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рджреВрд╕рд░реЗ рд╕реЗ рддреАрд╕рд░реЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЬреЗрдирд░реЗрдЯрд░ рднреА рджрд░реНрдж рд░рд╣рд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд, рдмрд╣реБрдд рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдгред

рдЕрдВрддрднрд╛рд╖рдг


рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╛рдЗрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдореИрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП; рдпрд╛ - рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ - рдХреЙрд▓рдмреИрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЕрд╕реНрддрд░ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рд╕реНрд╡рдпрдВ рдЕрд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рдирд┐рд╢рд╛рди рд╣реИрдВред

рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВред

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


All Articles