파이써닉하다
읽기도 편하고 가독성이 높은 코드
파이써닉하기 위해 코딩 규칙을 정해 놓은것을 코딩 컨벤션이라고 함.
- 한 줄의 한 구문을 준수
if x == 1: print('O')
- kwargs는 정말 필요한 경우에만 쓰자 가독성을 저해시킬 수 있음
- 클래스에서 private속성을 가진 변수는 이름 앞에 _(언더스코어)를 사용하여 표현
- 사용하지 않을 변수는 __(언더스코어 2개)로 표현하자. 1개만 사용하는 것은 지양
for __ in range(100):
print('테스트')
- 동일한 내용물을 가진 리스트를 생성할때는 *를 활용
list_repeatitive = ['hi'] * 4
print(list_repeatitive)
- 다차원 리스트를 생성할 경우 리스트 내포를 적극 활용
lists = [["hi"] for __ in range(5)]
print(lists)
- 값이 True, 거나 None이거나 0인 경우 따로 값을 비교시킬 필요가 없음
- if문에서 dict.has_key()를 쓰지 말고 in으로 키의 존재 여부를 파악
- lambda + filter, lambda + map을 활용할 수 있으면 적극 활용
- 파일을 읽는 경우 with open을 사용
개행
- 길고 이어지는 경우에는 ()를 사용하도록 하기, 닫는 괄호는 개행하기 전에 닫기
from some.deep.module.inside.a.module import (
a_nice_function, another_nice_function, yet_another_nice_function)
my_very_big_string = (
"For a long time I used to go to bed early. Sometimes, "
"when I had put out my candle, my eyes would close so quickly "
"that I had not even time to say “I’m going to sleep.”")
- 개행할때 사칙연산 기호가 있다면 개행 후 기호를 표시
(one
+ two)
import
- import 할때는 연속적으로 하지 않고 별도로 하는게 합리적
import os
import re
- from을 사용하여 import 할때는 연속적으로 해도 좋음
from pyspark.sql.types import StructType, StringType
들여쓰기
인덴트(Indent): 공백으로 4칸 들여쓰기
- 인덴트가 권장사항인 다른 언어들에 비해 파이썬에게 인덴트는 지켜야만 하는 대표적인 특징
- tab 과 공백을 섞어 쓰지않고, 공백 4개를 사용하는 것을 권장
공백
Blank Lines: 함수 및 클래스 정의 위에는 빈 2줄
- 두개의 빈 줄로 함수 및 클래스 정의를 구분한다. 또한 클래스 내의 메소드 정의에는 1줄씩 빈 줄을 넣어 씀
- 불필요한 공백은 지양하라. ,, :, ;가 나온 후에만 공백을 두는게 트랜드, 한개의 원소를 가진 튜플인 경우 마지막에 ,찍고 띄어쓰기 금지 연산 기호의 경우 앞 뒤로 공백을 줌
spam(ham[1], {eggs: 2})
bread = (3,)
total_age = person1.age + person2.age
괄호, 중괄호, 대괄호 내부에 연결되는 부분
좋음: spam(ham[1], {eggs: 2})
나쁨: spam( ham[ 1 ], { eggs: 2 } )
콤마, 세미콜론, 콜론의 이전 위치
좋음: if x == 4: print x, y; x, y = y, x
나쁨: if x == 4 : print x , y ; x , y = y , x
함수 호출시 인수 목록이 시작되는 괄호의 바로 이전 위치
좋음: spam(1)
나쁨: spam (1)
인덱싱 혹은 슬라이싱이 시작되는 괄호의 바로 이전 위치
좋음: dict['key'] = list[index]
나쁨: dict ['key'] = list [index]
할당(혹은 기타 다른) 연산자 주변에 한 개를 초과하는 공백 문자가 있는 경우
좋음
x = 1
y = 2
long_variable = 3
나쁨
x = 1
y = 2
long_variable = 3
항상 이진 연산자의 주위에는 한 개의 공백을 넣는다: 할당 (=), 증감 할당 (+=, -= 등.), 비교 (==, <, >, !=, <>, <=, >=, in, not in, is, is not), 부울 연산 (and, or, not)
좋음
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
나쁨
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
키워드 인수 혹은 기본 매개변수 값을 나타내는 경우에는 = 기호 주위에 공백을 넣지 않음
좋음
def complex(real, imag=0.0):
return magic(r=real, i=imag)
나쁨
def complex(real, imag = 0.0):
return magic(r = real, i = imag)
복합 구문(Compound statements, 여러 구문이 한 줄에 있는 것)은 일반 적으로 권장되지 않음
좋음
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
한 행의 최대 길이
- 한 행에는 최대 79글자까지만 넣도록 함
주석문
- 인라인 주석문은 코드와 동일한 행에 기술되는 주석문
- 인라인 주석 문은 코드에서 최소한 두 개 이상의 공백으로 분리되어 있어야 함
- 주석문은 # 문자와 한 개의 공백으로 시작해야 함
아래와 같은 뻔한 내용의 인라인 주석문은 불필요
x = x + 1 # x의 증가
아래와 같이 특정한 의미를 할 때 의미가 있는 주석문.
x = x + 1 # 경계값에 대한 보상
명명규칙
- b (한 개의 소문자)
- B (한 개의 대문자)
- lowercase
- lower_case_with_underscores
- UPPERCASE
- UPPER_CASE_WITH_UNDERSCORES
- CapitalizedWords (CapWords 혹은 CamelCase – CamelCase라는 이 름은 글자가 툭 튀어나온 모양 때문에 붙은 이름이다 [3]_). 간혹 StudlyCaps이라고도 불린다.
- mixedCase (CapWords와 다른 점은 첫 글자가 소문자라는 것이다)
- Capitalized_Words_With_Underscores (이건 별로다!)
- ‘l’ (소문자 L), ‘O’ (대문자 O), ‘I’ (대문자 I) 한 글자를 변수 이름으로 사용하지 않음
함수, 변수, Attribute는 소문자로 단어 간은 밑줄(_)을 사용하여 연결
def func_name():
pass
tot_no = []
클래스는 단어 첫 문자마다 대문자를 써서 연결하는 CapWords 포맷으로 명명
class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
모듈명은 짧게 소문자로 사용하며 밑줄을 쓸 수 있다. 패키지명 역시 짧게 소문자를 사용하지만 밑줄은 사용하지 않음
모듈 상수는 모두 대문자를 사용하고 단어마다 밑줄로 연결하는 ALL_CAPS 포맷으로 명명
MAX_COUNT = 100
클래스의 public attribute는 밑줄로 시작하지 말아야 함
class Student:
schoolName = 'XYZ School' # class attribute
def __init__(self, name, age):
self.name=name # instance attribute
self.age=age # instance attribute
클래스의 protected instance attribute는 하나의 밑줄로 시작
class Modifiers:
def __init__(self,name):
self._protected_member = name # Protected Attribute
클래스의 private instance attribute는 2개의 밑줄로 시작
class Modifiers:
def __init__(self, name):
self.__private_member = name # Private Attribute
인스턴스 메서드는 (객체 자신을 가리키기 위해) self 를 사용
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
self.name = 'Decorator_Example'
def example_function(self):
""" This method is an instance method! """
print('I\'m an instance method!')
print('My name is ' + self.name)
클래스 메서드는 (클래스 자신을 가리키기 위해) cls 를 사용
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
@classmethod
def example_function(cls):
""" This method is a class method! """
print('I\'m a class method!')
cls.some_other_function()
@staticmethod
def some_other_function():
print('Hello!')
참조:
https://blex.me/@baealex/pythonic%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://luavis.me/python/python-convention
출처:
'Language > Python' 카테고리의 다른 글
[Python] PyPy3 vs Python3 (0) | 2023.01.14 |
---|---|
[Dacon] 해외 부동산 월세 예측 AI 경진대회 - 앙상블 (3) | 2023.01.05 |
[FastAPI] PyCharm Community - setting (0) | 2022.12.26 |
[Python] Input() vs sys.stdin.readline() 입력 함수 차이 (feat. python version) (0) | 2022.12.15 |
[Python] 패키지(package)와 모듈(module) 알아보기 (0) | 2022.08.31 |