@Pythonetc рдЕрдХреНрдЯреВрдмрд░ 2018

рдЫрд╡рд┐

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

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



рд╡рд┐рднрд╛рдЬрдХ -


рдкреНрд░рддреНрдпреЗрдХ рд╕рднреНрдп рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реНрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -h рдпрд╛ --help ), рдкреИрд░рд╛рдореАрдЯрд░ ( --log- рд╕реНрддрд░ 2 ) рдпрд╛ рд╕реНрдерд┐рддреАрдп рдорд╛рдкрджрдВрдбреЛрдВ ( cp file1 file2 ) рдХреЗ рд╡рд┐рдХрд▓реНрдк рд▓реЗрдиреЗ рдЪрд╛рд╣рд┐рдПред

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

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

$ echo test > -rf $ cat -rf cat: invalid option -- 'r' Try 'cat --help' for more information. $ cat -- -rf test $ rm -- -rf $ cat -- -rf cat: -rf: No such file or directory 

рджреЛ рдбреИрд╢ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ argparse рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

рдХреНрд░рдордмрджреНрдз рд╕реНрдерд┐рд░рддрд╛


рдкрд╛рдпрдерди рдореЗрдВ рдорд╛рдирдХ рдЫрдБрдЯрд╛рдИ рдордЬрдмреВрдд рд╣реИ, рдЫрдБрдЯрд╛рдИ рд╕рдорд╛рд░реЛрд╣ рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ:

 In : a = [2, -1, 0, 1, -2] In : sorted(a, key=lambda x: x**2) Out: [0, -1, 1, 2, -2] 

рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдп рднреА рдХреНрд░рдордмрджреНрдз рд╣реИрдВред рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдп рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП ( рдЬреИрд╕реЗ , рд░рд┐рд╡рд░реНрд╕ = рдЯреНрд░реВ) [0] , рдФрд░ рдорд┐рдирдЯ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП ( a) [0] рдЬреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрддреНрддрд░ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ:

 In : max([2, -2], key=lambda x: x**2) Out: 2 In : max([-2, 2], key=lambda x: x**2) Out: -2 In : min([2, -2], key=lambda x: x**2) Out: 2 In : min([-2, 2], key=lambda x: x**2) Out: -2 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдореЗрдВ рдХреИрд╢


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

 def append_length(lst=[]): lst.append(len(lst)) return lst print(append_length([1, 2])) # [1, 2, 2] print(append_length()) # [0] print(append_length()) # [0, 1] 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд╕рд╛рдЭрд╛ рдХреИрд╢ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛:

 def fact(x, cache={0: 1}): if x not in cache: cache[x] = x * fact(x - 1) return cache[x] print(fact(5)) 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рддрдереНрдпрд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдорд╛рдиреЛрдВ рдХреЗ рдЕрдВрджрд░ рд░рдЦрддреЗ рд╣реИрдВред рдРрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 >>> fact.__defaults__ ({0: 1, 1: 1, 2: 2, 3: 6, 4: 24, 5: 120},) 

рдПрдлрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЖрдк os.path рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧреА рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдЧрддрд┐:

 >>> import os.path >>> os.path.join('/usr', 'local') '/usr/local' >>> os.path.dirname('/var/log') '/var' 

рд╕рдВрд╕реНрдХрд░рдг 3.4 рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдкрд╛рдерд▓рд┐рдм рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 >>> from pathlib import Path >>> Path('/usr') / Path('local') PosixPath('/usr/local') >>> Path('/usr') / 'local' PosixPath('/usr/local') >>> Path('/var/log').parent PosixPath('/var') >>> Path('/var/log').parent.name 'var' 

рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛


рдкрд╛рдпрдерди рдореЗрдВ, рдЖрдк рди рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди (рд╕рд┐рдВрдЯреИрдХреНрд╕ рдбреАрдИрдПрдлрд╝ рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдПрдХ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ __call__ рдореЗрдердб рдореЗрдВ рдХреЛрдИ рд╡рд╕реНрддреБ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ:

 class Truncater: def __init__(self, length): self._length = length def __call__(self, s): return s[0:self._length] print(Truncater(4)('abcdabcd')) # abcd 

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

 class cached: def __init__(self, func): self._func = func self._cache = {} def __call__(self, arg): if arg not in self._cache: self._cache[arg] = self._func(arg) return self._cache[arg] @cached def sqr(x): return x * x 

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


All Articles