@Pythonetc рджрд┐рд╕рдВрдмрд░ 2018



рдпрд╣ рдореЗрд░реА @pythonetc рдлреАрдб рд╕реЗ рдкрд╛рдпрдерди рдЯрд┐рдкреНрд╕ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рд╛рддрд╡рд╛рдБ рдЪрдпрди рд╣реИред

рдкрд┐рдЫрд▓реЗ рдЪрдпрди:


рдПрдХрд╛рдзрд┐рдХ рд╕рдВрджрд░реНрдн


рдХрднреА-рдХрднреА рдХрдИ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдореЗрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

with open('f') as f: with open('g') as g: with open('h') as h: pass 

рдкрд╛рдпрдерди 2.7 рдФрд░ 3.1 рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рдПрдХ рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 o = open with o('f') as f, o('g') as g, o('h') as h: pass 

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк contextlib.nested рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 with nested(o('f'), o('g'), o('h')) as (f, g, h): pass 

рдпрджрд┐ рдЖрдк рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЙрдкрдХрд░рдг рдЪреБрдирдирд╛ рдмреЗрд╣рддрд░ рд╣реИред contextlib.ExitStack рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрджрд░реНрдн рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдирд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ:

 with ExitStack() as stack: f = stack.enter_context(o('f')) g = stack.enter_context(o('g')) other = [ stack.enter_context(o(filename)) for filename in filenames ] 

рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ


рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ gc.get_objects() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 In : class A: ...: def __init__(self, x): ...: self._x = x ...: ...: def __repr__(self): ...: class_name = type(self).__name__ ...: x = self._x ...: return f'{class_name}({x!r})' ...: In : A(1) Out: A(1) In : A(2) Out: A(2) In : A(3) Out: A(3) In : [x for x in gc.get_objects() if isinstance(x, A)] Out: [A(1), A(2), A(3)] 

рдкреНрд░рддреАрдХ, рдЖрдВрдХрдбрд╝реЗ


 In : int('рнзрзмр╝г') Out: 163 

0 1 2 3 4 5 6 7 8 9 рдХреЗрд╡рд▓ рдРрд╕реЗ рдЕрдХреНрд╖рд░ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдВрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдпреВрдирд┐рдХреЛрдб рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рд╕реМ рд╡рд░реНрдгреЛрдВ рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИред рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдБ

рдпрд╣ int , unicode.isdecimal рдФрд░ рднреА re.match рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ:

 In : int('рпп') Out: 9 In : '┘в'.isdecimal() Out: True In : bool(re.match('\d', 'р▒л')) Out: True 

UTC рдордзреНрдпрд░рд╛рддреНрд░рд┐


 >>> bool(datetime(2018, 1, 1).time()) False >>> bool(datetime(2018, 1, 1, 13, 12, 11).time()) True 

рдкрд╛рдпрдерди 3.5 рд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛рдЯрд╛рдЗрдордЯрд╛рдЗрдо datetime.time() рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЭреВрдард╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ рдпрджрд┐ рд╡реЗ рдЖрдзреА рд░рд╛рдд рдХреЛ рдпреВрдЯреАрд╕реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рдереЗред рдЗрд╕рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдХреАрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, if not рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ create_time рдирд╣реАрдВ
None , рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдзреА рд░рд╛рдд рд╣реИред

 def create(created_time=None) -> None: if not created_time: created_time = datetime.now().time() 

рдЖрдк рдЗрд╕ рдмрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ None рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: if created_time is None ред

рдПрдлрдПрд╕ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рдо


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

рдХрд┐рд╕реА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ loop.run_in_executor рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ aiofiles рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 async with aiofiles.open('filename', mode='r') as f: contents = await f.read() 

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


All Articles