Python grammar

매일 공부(ML)·2021년 12월 31일
0

Python

목록 보기
17/38

파이썬 문법

인덴트

공백 4칸 들여쓰기 원칙으로 파라미터가 시작되는 부분을 보기 좋게 하거나 여러 줄 나눠쓸 경우에도 사용한다.


네이밍 컨벤션

각 단어를 밑줄( _ ) 로 구분하여 표기하는 스네이크 케이스 따른다. 소문자로 문자를 작성한다.

#파라미터 시작 부분
def long_function_name( 
    var_one, var_two, var_ three, 
    var_fo ur ) : 
print(var_one ) 

 #여러 줄 나눠쓰기
foo=long_function_name( 
    var_one, var_two, 
    var_ three, var_ four)
    # 리스트 컴프리헨션

l i.st (map(lambda x: x + 10, (1, 2, 3] )) #[11,12,13]
        
[ n * 2 for n in range( 1, 10 + 1 ) i.f n %  2 == 1 ] #[2,6,10,14,18]
        
    
 a = {key: value for key, value in original.items( )}   

타입 힌트

타입을 지정할 수 있는 타입 힌트가 있다

#타입힌트
# 파라미터 a가 정확히 정수형이라는 것을 알 수 있다
# 리턴 값으로 True or False를 리턴할 것이다
def fn( a : i.nt ) -> bool : 


리스트 컴프리헨션

리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문으로 map,filter와 같은 함수형 기능을 지원하고 람다 표현식도 지원한다.게다가 딕셔너리 등도 가능하도록 추가했다.

# 리스트 컴프리헨션

l i.st (map(lambda x: x + 10, (1, 2, 3] )) #[11,12,13]
        
[ n * 2 for n in range( 1, 10 + 1 ) i.f n %  2 == 1 ] #[2,6,10,14,18]
        
    
 a = {key: value for key, value in original.items( )}   

제너레이터

루프의 반복 동작을 제어할 수 있는 루틴형태이다. yield는 제너레이터가 실행 중이던 값을 내보낸다는 것으로 중간값을 리턴한 후에

다음 함수는 종료되지 않고 계속해서 맨 끝에 도달할 때까지 실행하므로 구문을 사용하면 제너레이터를 리턴할 수 있다.

여러 타입의 값의 하나의 함수에서 생성이 가능하다

# yield 와 제너레이터

def get _natural_number( ): 
    n = O 
    whi.le True: 
        n += 1 
        yield n 
        
    
get _nat ural_number( ) 
<generat or obj ect get _nat ural_number at 0x10d3139d0>

g = get _natural_number( ) 
for _ in range( 0 , 100 ) : 
    print( next( g ) ) # 1~100까지 출력
# 여러 타입의 값을 하나의 함수로 생성

def generator( ): 
    yield 1 
    
    yield 'string' 

    yield True 
g = generator( ) 
g 
<generat or obj ect generat or at 0x10a47c678> 
next(g) 
1 
next(g) 
'string' 
next(g) 
True     

range

제너레이터의 방식을 활용하는 대표함수로 for문에서 잘 쓰입니다. for문에서 사용할 경우 내부적으로 다음 숫자를 생성해낸다. 메모리 점유율에서 확실한 이점을 가질 수 있다.

list(range(5)) # [0, 1, 2, 3, 4] 

range(5) # range(0, 5) 

type(range(5)) # <class 'ran ge'> 

for i in range(0, 5):
    
    print(i,end=' ')  # 0 1 2 3 4 

enumerate

열거하다라는 뜻의 함수로 여러 가지 자료형(list,set,tuple등)을 인덱스로 포함한 enumerate객체로 리턴한다.

a = [1,2,3,2,45,2,5] 
a  # [1, 2, 3, 2, 45, 2, 5]

enumerat e(a) # <enumerat e obj ect at 0x1010f 83f 0> 

list(enumerat e(a)) 

#리스트로 결과를 받을 수 있고 인덱스를 자동으로 부여해준다.

[(0, 1), (1, 2), (2, 3), (3, 2), (4, 45), (5, 2), (6, 5)]
# a = ['a1', 'b2', 'c3']일 때 리스트의 인덱스와 값 출력

# 하나의 방식이 될 순 있으나 a[i 조회 작업과 신체 길이 조회하여 루프 처리하는 형태이지만 깔끔하진 않음]
for i in range(len(a)): 
    print( i, a[i]) 

    
# 값은 깔끔하나 인덱스를 위한 변수 설정을 해야 하기에 아쉽

i = 0 
for v in a: 
    print(i, v) 
    i += 1 
    
# 인덱스와 값 모두 깔끔하게 처리

for i, v in enumerate(a) : 

    print(i, v) 

// 나눗셈 연산자

몫을 구하는 연산자입니다.

# II 나눗셈 연산자는 int ( a / b )와 동일하다 
5 // 3 
1 


print

디버깅할 때 가장 자주 쓰는 명령어로 출력결과를 보여주고 항상 줄바꿈을 하여 긴 루프의 값을 반복적으로 출력하는데 이때, end 파라미터를 공백으로 처리하여 줄바꿈방지

#join()함수 이용하여 리스트 출력 시 묶기

a = ['A', 'B'] 
print(' '.join(a)) 

A B

Pass

pass는 IndentationError를 막는 역할을 하지만 실제 연산에서는 널 연산으로 아무것도 하지 않는다.

class MyClass (object): 
    def method_a(self): 
# 여기에 pass 추가 
        pass 

    def method_b(self): 
        print("Method B") 
c = MyClass( ) 

locals

딕셔너리를 가져오는 메소드로 업데이트 또한 가능하다. 로컬에 선언된 모둔 변수를 조회할 정도로 강한 명령어여서 디버깅 시 도움이되고 로컬 영역에 제한하여

정보 조회가 가능하기 대문에 클래스의 특정 메소드 내부에서나 함수 내부의 로컬 정보를 조회해서 잘못 선언 부분 없는지 확인하는 용도로 활용 가능하다.

이로 인해 변수명을 일일이 찾아낼 필요없이 로컬 스코프에 정의된 모든 변수를 출력하기 때문에 좋다.

import pprint 
pprint.pprint( locals( ) ) 

{'nums' : 12, 7, 11, 15], 
'pprint' : <module 'pprint' from '/usr/ lib/ python3.8/ pprint.py'>, 
'self' : < __ main__.Solution object at Ox7f0994769d90>, 
' target ' : 9} 

변수명과 주석

변수명과 주석을 적절하게 달면 가독성이 높아진다.

def numMatchingSubseq(self, S:str, words: List[str]) -> int:
    
    matched_count = 0
    
    for word in words:
        
        pos = 0
        
        for i in range(len(word)):
            
            # Find matching position for each character.
            
            found_pos = S[pos:].find(word[i])
            if found_pos < 0:
                
                matched_count -=1
                break
                
            else: # If found, take step position forward.
                
                pos += found_pos +=1
                
        matched_count +=1
        
    return matched_count
profile
성장을 도울 아카이빙 블로그

0개의 댓글