Development/Python

Pythonic Code

Kirok Kim 2021. 12. 1. 18:25

Pythonic Code

1. PEP8

  • ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ์ผ์ข…์˜ ๊ทœ์น™์ด๋‹ค. ํ˜„์žฌ๋Š” ๋งŽ์€ ํŒŒ์ด์ฌ ์œ ์ €๋“ค์ด ์ด PEP8์„ ๋”ฐ๋ฅธ๋‹ค
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 4์นธ Tab or Space๋ฅผ ์“ฐ์ง€๋งŒ ์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค. ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ž๋™์ ์œผ๋กœ ๋งž์ถฐ์ง„๋‹ค.
  • ๐Ÿšจ Tab ๊ณผ Space๋ฅผ ํ˜ผ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜!
  • ์ฝ”๋“œ ํ•œ ์ค„์˜ ๊ธธ์ด๋Š” 79์ž ์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ์— ๋ฐฑ์Šฌ๋Ÿฌ์‹œ()๋ฅผ ์ด์šฉํ•ด ์ค„๋ฐ”๊ฟˆ์„ ํ•œ๋‹ค.
  • with open('/Users/kkkk/open/the/file/that/I/want') as file_1, \ open('/Users/kkkk/hh/haha/file/written', 'w') as file_2: file_2.write(file_1.read())
  • ํŠน๋ณ„ํžˆ ์—ฐ์‚ฐ์ž๋“ค๋กœ ์ธํ•ด ๊ธธ๊ฒŒ ๋Š˜์–ด์ง€๋Š” ๊ฒฝ์šฐ, ์—ฐ์‚ฐ์ž ์ด์ „์— ์ค„๋ฐ”๊ฟˆ์„ ํ•ด์ค€๋‹ค.
  • Data = (product_num + product_name + company + product_price)
  • ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ๋นˆ ์ค„ ๋‘๊ฐœ๋กœ ๊ตฌ๋ถ„.
  • class A(): pass # Space # Space def B(): print() # Space # Space
  • ํด๋ž˜์Šค์—์„œ ํ•จ์ˆ˜๋Š” ๋นˆ ์ค„ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„.
  • class a(): def b(): pass def c(): pass
  • ์ด๋ฆ„ ๊ทœ์น™
    1. ๋ณ€์ˆ˜๋ช… ์•ž์— _(๋ฐ‘์ค„)์ด ๋ถ™์œผ๋ฉด ํ•จ์ˆ˜ ๋“ฑ์˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ผ์ปซ๋Š”๋‹ค.
    2. _list = []
    3. ๋ณ€์ˆ˜๋ช… ๋’ค์— _(๋ฐ‘์ค„)์ด ๋ถ™์œผ๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ์™€์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    4. import_ = "not_import"
    5. ๋ชจ๋“ˆ(Module)๋ช…์€ ์งง์€ ์†Œ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐ‘์ค„๋กœ ๋‚˜๋ˆˆ๋‹ค.
    6. first_module.py
    7. ํด๋ž˜์Šค๋ช…์€ ํŒŒ์Šค์นผ ์ผ€์ด์Šค(Pascal Case) ์ปจ๋ฒค์…˜*์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
    8. class MyClass(): pass
    9. ํ•จ์ˆ˜๋ช…์€ ์†Œ๋ฌธ์ž๋กœ ๊ตฌ์„ฑํ•˜๋˜ ํ•„์š”ํ•˜๋ฉด ๋ฐ‘์ค„๋กœ ๋‚˜๋ˆˆ๋‹ค.
    10. def my_function(): pass
    • ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜* (Naming Convention)
      • snake_case
        • ๋ชจ๋“  ๊ณต๋ฐฑ์„ “_“๋กœ ๋ฐ”๊พธ๊ณ  ๋ชจ๋“  ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž.
        • ํŒŒ์ด์ฌ์—์„œ๋Š” ํ•จ์ˆ˜, ๋ณ€์ˆ˜ ๋“ฑ์„ ๋ช…๋ช…ํ•  ๋•Œ ์‚ฌ์šฉ
        • ex) this_is_snake_case
      • PascalCase
        • ๋ชจ๋“  ๋‹จ์–ด๊ฐ€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค
        • UpperCamelCase, CapWords๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
        • ํŒŒ์ด์ฌ์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ช…๋ช…ํ•  ๋•Œ ์‚ฌ์šฉ.
        • ex) ThisIsPascalCase
      • camelCase
        • ์ฒ˜์Œ์€ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ดํ›„ ๋ชจ๋“  ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž.
        • ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. (java ๋“ฑ์—์„œ ์‚ฌ์šฉ)
        • ex) thisCamelCase
    • ํ†ต์ผ์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ณต์œ ํ•˜๋Š” ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • List Comprehension
    • ๊ธฐ์กด List๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๋‹ค๋ฅธ List๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฒ•
    • ํฌ๊ด„์ ์ธ List, ํฌํ•จ๋˜๋Š” ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋จ
    • ํŒŒ์ด์ฌ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜
    • ์ผ๋ฐ˜์ ์œผ๋กœ for + append ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ๐Ÿ’ก ๋ฆฌ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ, ์งง๊ฒŒ ํ•œ ์ค„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํŒŒ์ด์ฌ์˜ ๋ฌธ๋ฒ•[ ( ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ๊ฐ’ ) for ( ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜ ์ด๋ฆ„ ) in ( ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ )]
  • ex) [ j for i in list]
  • Enumerate & Zip
    • Enumerate
    • List์˜ element๋ฅผ ์ถ”์ถœํ•  ๋•Œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ์ถ”์ถœ
    • Zip
    • ๋‘ ๊ฐœ์˜ list์˜ ๊ฐ’์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ถ”์ถœ
  • Lambda
    • ํ•จ์ˆ˜ ์ด๋ฆ„ ์—†์ด, ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ต๋ช…ํ•จ์ˆ˜
  • Map
    • Sequence ์ž๋ฃŒํ˜• ๊ฐ element์— ๋™์ผํ•œ function์„ ์ ์šฉํ•จ
    • ์‹คํ–‰์‹œ์ ์— ๊ฐ’์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 
๋ฐ˜์‘ํ˜•