рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЕрдЬрдЧрд░ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рднрд╛рдЧ 3

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рд╕реНрд▓рд╛рдЗрд╕, рдЕрдирдкреИрдХрд┐рдВрдЧ / рдкреИрдХрд┐рдВрдЧ рдХрд▓реЗрдХреНрд╢рди рдФрд░ рдмреВрд▓рд┐рдпрди рдСрдкрд░реЗрд╢рди рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

a = [0] * 3 s = 'a' * 2 print(a, s) # -> [0, 0, 0], 'aa' 

рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЕрдиреБрднрд╡реА рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рддрдВрддреНрд░ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ

 a = [0] b = a b[0] = 1 print(a, b) # -> [1], [1] 

рдлрд┐рд░ рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

 b = a * 2 b[0] = 2 print(a, b) 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЬрдЧрд░ рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЪрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ, рдЕрд░реНрдерд╛рдд рдмреА рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ

 b = [1] * 2 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реЛрдЧрд╛:

 b = a * 2 b[0] = 2 print(a, b) # -> [1], [2, 1] 

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

 row = [0] * 2 matrix = [row] * 2 print(matrix) # -> [[0, 0], [0, 0]] matrix[0][0] = 1 print(matrix) # -> [[1, 0], [1, 0]] 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╕реБрдиреНрдиред

рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рджрд╛рдИрдВ рдУрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

 a = [0] a += (1,) a += {2} a += "ab" a += {1: 2} print(a) # -> [0, 1, 2, 'a', 'b', 1] ,     #       

рдПрдХ рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрди (рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП): рдЕрдЬрдЧрд░ рдореЗрдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдпрд╛ рдореВрд▓реНрдп рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

 def inc(a): a += 1 return a a = 5 print(inc(a)) print(a) # -> 5 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рди рдорд╛рди рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 def appended(a): a += [1] return a a = [5] print(appended(a)) # -> [5, 1] print(a) # -> [5, 1] 


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

рдЕрдЬрдЧрд░ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдЪрд░ рдирд╛рдо рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рддрдВрддреНрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:
 var = "john" 


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

рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

 a = [1, 2, 3, 4, 5] def rev(l): l.reverse() return l l = a print(a, l) # -> [1, 2, 3, 4, 5], [1, 2, 3, 4, 5] l = rev(l) print(a, l) # -> [5, 4, 3, 2, 1], [5, 4, 3, 2, 1] 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╢реЛрдзрдХ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛:

 def change(): global a a += 1 a = 5 change() print(a) 

рдиреЛрдЯ: рдпрд╣ рдордд рдХрд░реЛ (рдирд╣реАрдВ, рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдореЗрдВ рдирд╣реАрдВ)ред рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреБрдЫ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
 def func(a, b): return a + 1, b + 1 


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреАрд╡рд░реНрдб рд╣реИ:

 def private(value=None): def getter(): return value def setter(v): nonlocal value value = v return getter, setter vget, vset = private(42) print(vget()) # -> 42 vset(0) print(vget()) # -> 0 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 def private(value=None): def getter(): return value def setter(v): nonlocal value value = v return getter, setter class Person: def __init__(self, name): self.getid, self.setid = private(name) adam = Person("adam") print(adam.getid()) print(adam.setid("john")) print(adam.getid()) print(dir(adam)) 

рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдЖрдк рдХреЛ __getattr__ , __setattr__ рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдЖрдк __delattr__ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЬрдЧрд░ рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ: __getattr__ рдФрд░ __getattribute__ ред

рдЙрдирдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдкрд╣рд▓реЗ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА рдереА, рдФрд░ рджреВрд╕рд░рд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╣реИред рдпрджрд┐ рджреЛрдиреЛрдВ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ __getattr__ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЗрд╕реЗ __getattribute__ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ __getattribute__ рдиреЗ рдПрдХ AttributeError рдЙрдард╛рдпрд╛ рд╣реИред

 class Person(): def __getattr__(self, item): print("__getattr__") if item == "name": return "john" raise AttributeError def __getattribute__(self, item): print("__getattribute__") raise AttributeError person = Person() print(person.name) # -> __getattribute__ # -> __getattr__ # -> john 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреИрд╕реЗ рдЕрдЬрдЧрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд░ рдФрд░ scopes рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

  e = 42 try: 1 / 0 except Exception as e: pass print(e) # -> NameError: name 'e' is not defined 

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

  ... print(e) # -> float division by zero 

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


All Articles