본문 바로가기
ML&DATA/python for data analysis

파이썬 - (함수, 예외처리, 파일, os)

by sun__ 2020. 7. 18.

**함수

global 예약어로 어떤 변수를 전역변수로 사용 가능.

 

변수의 스코프를 다른 말로 네임스페이스namespace라고 함.

 

**람다

익명함수라고도 함.

 

ex)문자열이 다양한 순서대로 정렬

strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
strings.sort(key = lambda x : len(set(list(x))))
strings
#out: ['aaaa', 'foo', 'abab', 'bar', 'card']

 

ex) 숫자 배열 내림차순 정렬

a = [1,3,2,6,4,5,2]
a.sort(key = lambda x: -x)
a
#out: [6, 5, 4, 3, 2, 2, 1]

 

 

**제너레이터

제너레이터란 순회 가능한 객체. 제너레이터를 생성하려면 함수에서 return 대신 yield 예약어 사용

제너레이터로부터 값을 요청해야 제너레이터의 코드가 실행된다.

def squares(n=10):
    print('Generating squares from 1 to {}'.format(n**2))
    for i in range(1, n+1):
        yield i**2
        
gen = squares()
gen	#out: <generator object squares at 0x0000021901407318>

for x in gen:
    print(x, end=' ')
#out:
#Generating squares from 1 to 100
#1 4 9 16 25 36 49 64 81 100 

 

함수로 제너레이터를 생성하는 것보단 제너레이터 표현식(comprehension) 사용이 더 간단함.

gen = (x**2 for x in range(100))

 

 

**itertools 모듈 (122pg)

데이터 알고리즘을 위한 많은 제너레이터 포함함. 

groupby, product, combinations, permutations

 

 

 

**예외처리

try/except/else/finally. except 다음에 무시할 오류의 종류를 적어도 됨. (여러개 무시할거면 괄호로)

#float(x)에서 typeError, ValueError이외의 예외를 던지면
#except구문을 아니면 try구문을 실행.
def func_float(x):
	try:
    		return float(x)
	except: (TypeError, ValueError):
    		return x

 

f = open(path, 'w')

try:
	write_file(f)
except:	#try에서 예외 던질 시
	print('failed')
else:	#try에서 예외 던지지 않을 시
	print('succeeded')
finally:	#try결과 상관없이 항상 수행
	f.close()

 

 

**파일

위와 같은 파일을 한줄 씩 읽는 코드

path = 'test.txt'
f = open(path)	#default로 읽기전용모드 'r'

lines = [x for x in f]
lines 	#out: ['abc\n', 'def\n']

lines = [x.rstrip() for x in f]
lines	#out: ['abc', 'def']

f.close()

 

with문으로 간단하게 쓸 수 있음. 자동으로 닫아줌

with opne(path) as f:
	lines = [x.strip() for x in f]

 

c++과 유사하게 f.seek(), read(), tell()등으로 파일 일부만 읽을 수 있음.

 

비-아스키 텍스트 데이터가 포함된 데이터를 다뤄야 한다면 파이썬의 유니코드 관련 내용을 숙지해야 한다.