Skip to content

Files

Latest commit

 

History

History
 
 

Python

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Python ์ฝ”๋”ฉ ์Šคํƒ€์ผ

์ฝ”๋“œ ๊ทœ์•ฝ์€ PEP8๊ณผ Google์˜ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ๋”ฐ๋ฅธ๋‹ค. ์œ„ ๊ฐ€์ด๋“œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‚˜ ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ๊ทธ๋ฆฌ๊ณ  ์„œ๋กœ ์ƒ์ถฉ๋˜๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ์•„๋ž˜์— ๊ธฐ์ˆ ํ•œ๋‹ค.

์ถ”๊ฐ€ ๊ทœ์น™

  • ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉ์‹œ ๋งˆ์ง€๋ง‰์— ,(trailing commas)๋ฅผ ๋ถ™์ธ๋‹ค.

    • ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์‹œ diff ๋ณด๊ธฐ์— ํŽธํ•˜๋‹ค.
  • Mixin์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ ๋Š”๋‹ค.

    • ex) Child(Mixin1, Mixin2, Parent)
  • ๊ฐ€๋…์„ฑ ๊ด€๋ จ

    • ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ถ„๊ธฐ๋ฅผ ํ•œ ๋ผ์ธ์ด ๊ฐ™์ด ๋‹ด๋Š” ์‹์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

      # Bad
      content_ids = [content.id for content in contents if content is not None]
      # Alternative
      content_ids = [content.id for content in filter(None, contents)]
      # or
      content_ids = map(lambda content: content.id, filter(None, contents))

๋ณ€๊ฒฝ ๊ทœ์น™

  • 1ํ–‰์— 140์ž๊นŒ์ง€ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ค„๋ฐ”๊ฟˆ, ๊ณต๋ฐฑ
    • ํ•จ์ˆ˜ ์ธ์ž (์•„๋ž˜ ๋‘˜๋‹ค ๋œ๋‹ค)

      foo = long_function_name(
              var_one, var_two,
              var_three, var_four
              )
      print(var_one)
      
      foo = long_function_name(
              var_one, var_two, var_three, var_four
              )
      print(var_one)
      

๊ฐ•์กฐ๊ทœ์น™

  • ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • 2๊ฐœ์˜ command ๋ฅผ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•ด ํ•œ๋ผ์ธ์— ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํด๋ž˜์Šค
    • ํด๋ž˜์Šค์—์„œ private ๋ฉค๋ฒ„๋‚˜ ๋ฉ”์†Œ๋“œ๋Š” ์ด๋ฆ„ ์•ž์— ๋ฐ‘์ค„์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋น„๊ต  - None๊ณผ ๋น„๊ต, Boolean ๋น„๊ต๋Š” is, is not ์„ ์‚ฌ์šฉํ•œ๋‹ค.  - Boolean ๋น„๊ต: if not is_ok:  - ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๋น„๊ตํ•  ๋•Œ๋Š” isinstance()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด
    • string ๋ชจ๋“ˆ๋ณด๋‹ค๋Š” string ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      • ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ชจ๋“ˆ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๊ฐ™์€ API ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.  - ์ ‘๋‘์‚ฌ๋‚˜ ์ ‘๋ฏธ์‚ฌ๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ๋Š” startswith()์™€ endswith()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋ฆ„๊ทœ์น™
    • module_name
    • package_name
    • ClassName
    • method_name
    • ExceptionName
    • function_name
    • GLOBAL_CONSTANT_NAME
    • global_var_name
    • instance_var_name
    • function_parameter_name
    • local_var_name

Pylint

Pylint ์„ค์น˜ pip3 install pylint

Pylint ์„ค์น˜ ์œ„์น˜ ํ™•์ธ which pylint

PyCharm

  • Preferences > Editor

    • Code Style
      • Line separator (for new files): Unix and OS X (\n)
      • Right Margin (columns) : 140
    • Code Style > Python > Other
      • (check) Add line feed at the end of file
      • (check) Use continuation indent for arguments
  • Preferences > External Tools

    • "+" ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ Pylint ์ถ”๊ฐ€
      • Name: Pylint
      • Program: which ๋กœ ์ฐพ์€ ๊ฒฝ๋กœ ์ž…๋ ฅ
      • Parameters: F i l e P a t h
    • Tools > External Tools > Pylint ์ฒดํฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ

Library ๊ฐœ๋ฐœ์‹œ

  • PyPI์— ๋ฐฐํฌํ›„ ridi ๊ณ„์ •์„ ๋“ฑ๋กํ•œ ํŒจํ‚ค์ง€์˜ Owner๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • PyPI์— ๋“ฑ๋กํ•˜๋Š” ํŒจํ‚ค์ง€๋ช…(setup.py์˜ nameํ•„๋“œ)์€ ridi-๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋‹จ์–ด๋กœ ์ด๋ฆ„์ง€์–ด์ง„ ๊ฒฝ์šฐ -(ํ•˜์ดํ”ˆ)์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • ex) ridi-cms-sdk
  • PyPI์˜ ํŒจํ‚ค์ง€๋ช…๊ณผ import์‹œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€๋ช…์€ ๊ฐ€๊ธ‰์  ์ผ์น˜์‹œํ‚ค๋˜, import ์ด๋ฆ„์—๋Š” -๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€ ์ด๋ฆ„์€ ridi๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    # PyPI: ridi-cms-sdk
    # Directory tree: ridi/cms
    from ridi.cms import CmsClient

Application ๊ฐœ๋ฐœ์‹œ

  • ์ตœ์ƒ์œ„ ํด๋” ๋˜๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์œผ๋กœ ridi๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.  - ์‚ฌ๋‚ด Library์˜ ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด ridi์ด๋ฏ€๋กœ import ํŠธ๋žฉ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.