잘 사용하는 함수 정리

야금야금 공부·2023년 3월 3일
0

파이썬 정리

목록 보기
2/5

List Comprehension

  • 기존의 리스트를 기반으로 새로운 리스트를 만들어 내는 구문
  • 딕셔너리에도 사용 가능
list(map(lambda x: x+10, [1, 2, 3]))
# 결과 : [11, 12, 13]
[n*2 for n in range(1, 11) if n % 2 == 1]
# 결과 : [2, 6, 10, 14, 18]

# 리스트 컴프리헨션을 사용하지 않을 경우
a = []
for n in range(1, 11):
	if n % 2 == 1:
    	a.append(n*2)

딕셔너리에 사용

a = {}
for key, value in a.items():
	a[key] = value

# 리스트 컴프리헨션 사용할 경우
a = {key, value in a.items()}


제너레이터(Generator)

루프의 반복 동작을 제어할 수 있는 루틴 형태

  1. yield 구분(여기까지 실행 중이던 값을 내보낸다)을 사용해 제너레이터를 리턴

    def get_natural_number():
        n = 0
        while True:
            n += 1
            yield n     # 제너레이터를 리턴
    
    g = get_natural_number()
    for _ in range(1, 10):
        print(next(g))
    # 결과 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  1. 여러 타입의 값을 하나의 함수에서 생성
    def generator():
    	yield 1
        yield 'string'
        yield True
        
     g = generator()
     print(g)          # <generator object generator at 0x10a47c678>
     print(next(g))    # 1
     print(next(g))    # string
     print(next(g))    # True


Range

  • 제너레이터의 방식을 활용하는 대표적 함수
  • for 문에서 사용할 경우, 내부적으로 제너레이터의 next()를 호출하듯 매번 다음 숫자를 생성
    a = [n for n in range(100)]
     b = range(100)

a에는 이미 생성된 값이 담겨있고, b는 생성해야 한다는 조건만 존재한다.
b에서는 값의 생성 조건만 보관하고 있기 때문에 숫자를 똑같이 100개 가지고 있지만, range 클래스를 활용하는 b 변수의 메모리 점유율이 훨씬 더 작다.



enumerate

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

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

enumerate(a)    # <enumberate object a 0x1010f83f0>

list(enumerate(a))
# [(1, 0), (1, 2), (2, 3), (4, 45), (5, 2), (6, 5)] 

  • a = ['a1', 'b2', 'c3'] 리스트의 인덱스와 값을 함께 출력하기
# 1. 값을 가져오기 위해 불필요한 a[i] 조회와 len을 사용하게 됨
for i in range(len(a)):
	print(i, a[i])

# 2. 변수를 별도로 관리하는 형태로 깔끔하지 않음
i = 0
for v in a:
	print(i, v)
    i += 1

# 3. (인덱스, 값)이 깔끔하게 출력됨
for i, v in enumerate(a):
	print(i, v)


나눗셈 연산자

  • divmod(a, b) : (a//b, a%b) 의 결과를 리턴
# 나눗셈
print(5/3)   # 1

# 몫
print(5//3)   # 1

# 나머지
print(5%3)   # 2

# 몫과 나머지 한 번에 출력
print(divmod(5, 3))    # (1, 2) -> (몫, 나머지)


출력 포맷

  1. 포맷 코드 사용 : %d, %s
  2. 포맷 함수 사용 : {}.format

1. 포맷 코드 사용

  • %s : 문자열 ◀ 많이 사용
  • %d : 정수 ◀ 많이 사용
  • %c : 문자 1개
  • %f : 부동 소수
  • %o : 8진수
  • %x : 16진수
  • %% : '%' 자체를 출력
print("수학 점수는 %d점 입니다." % 100)
print("%s의 점수는 %d점 입니다." % ('홍길동', 67))
  • %10s : 값의 왼쪽에 공백을 10칸 추가
  • %-10s : 값의 오른쪽에 공백을 10칸 추가
  • %0.2f : 소수점 2자리까지 표현

2. 포맷 함수 사용

# format 함수
print("수학 점수는 {0}점 입니다.".format(75))
print("{0}의 점수는 {1}점 입니다.".format("홍길동", 89))
# f-string
name = "홍길동"
score = 80
print(f"{name}의 점수는 {score}점 입니다.")


  • sep=""
       print('a', 'b', sep=', ')   # a, b
       print('a', 'b')             # a b
  • end=""
    	print('aa', end=' ')
       print('bb')
       # aa bb
  • '구분자'.join(리스트) 함수 : 문자열을 만들어서 반환
    a = ['a', 'b']
    print(' '.join(a))    # a b


pass

코딩할 때, 전체 골격을 잡아 놓고 내부에서 처리할 내용은 차근히 생각하면서 만들겠다는 의도를 가짐

  • pass는 null 연산 : 아무것도 하지 않는 기능
class MyClass(object):
	def method_a(self):
    	pass
    def method_b(self):
    	print("method b")

c = MyClass()


locals

local 심볼 테이블 딕셔너리를 가져오는 메소드. 업데이트 또한 가능

  • local에 선언된 모든 변수를 조회할 수 있는 강력한 명령 -> 디버깅에 도움이 됨
  • 특히 local scope에 제한해 정보를 조회할 수 있기 때문에 클래스의 특정 메소드 내부나 함수 내부의 로컬 정보를 조회해 잘못 선언한 부분이 있는 지 확인하는 용도
import pprint
pprint.pprint(locals())

0개의 댓글