목차

너무 오래 전이라 책을 다시 보면서 정리

문법요소

import

import 모듈
from 모듈 import 어트리뷰트
from 모듈 import *
import 모듈 as 별칭

자료형

문자(열)

'abcde' # ok
'abcde" # error

<note>아래 부분은 v2.x 에 해당되는 내용. v3는 기본 유니코드라서 u를 붙일 필요가 없어졌다.</note>

튜플

gameDir = ('skyrim', 'NinjaOfTheMark')

gameDir[0]을 치면, 'skyrim'이 출력된다.

리스트

gameDir = ['skyrim', 'NinjaOfTheMark']
 
gameDir[0] # 0번째 항목 리턴
gameDir.count() # 개수
gameDir.pop() # 데이터를 얻은 다음 삭제

함수

함수 선언 방법

def <함수이름>( 인자1, 인자2, ... ):
  <구문>
  return <리턴값>

스코핑룰

전역변수를 사용하고 싶다면,

>>> g = 1
>>> def test_scope(a):
		global g			# g는 전역변수를 가리킨다
		g = 2
		return g+a

키워드인자

파라미터의(인자) 이름으로 값을 지정해서 사용하는 방법. 파라미터 순서를 지키지 않아도 된다.

>>> def connURI(server, port): return "abc"
>>> connURI(port="8080", server="test.com")

가변

인자 이름 앞에 '*'를 붙이면 가변으로 (튜플로서) 인식된다.

>>> def test(*args): print(type(args))

정의되지 않은 인자 처리 : 인자이름 앞에 '**' 타입 미정의 가변 인자를 사용할 수 있다. 마지막에 와야 한다.

람다

lamda 인자 : <구문>

이터레이터

자료형 데이터에 순환하는 이터레이트를 쓸 수 있다

s = 'abc'
it = iter(s)	# 이터레이터를 얻는다
next(it)	# 다음 요소로 이동
it.__next__()	# 다음 요소로 이동

비교문

  num >= 70 && num < 80 --> 70 <= num < 80 형식으로 사용할 수 있다.
  if 70 <= num < 80: ...
and, &
or, |
& 와 | 는 if 문 전체를 비교하고 종료
and 와 or를 사용하면 조건에 맞으면 비교를 끝내고 다음문장으로 이동
for
range()함수로 실행 횟수 방식으로 실행 가능
for i in range(10): print(i) # 0 .. 9 까지 11번 반복해서 i를 출력

클래스

연산자중복정의

연산자 중복 정의를 위한 미리 정의된 함수가 있다. '-' 면 sub 라든지.

클래스 상속

class Parent:
	pass
class Child(Parent):
	pass

메서드 재정의

부모 메서드와 자식쪽의 메서드의 이름만 같으면 재정의(오버라이딩)된다.

super()로 부모 클래스 메소드 호출

예외처리

	try:
		<구문>
	except <예외종류>:
	else:
		예외가 없는 경우
	finally:
		예외 상관 없이 try 블록 실행 후
	
	raise <예외> : 예외 발생 시킨다.

assert

	assert <조건식>, <관련데이터>

입출력

출력

	print(<문자열>)
	import sys
	sys.stdout.write('test')

포맷팅

"스트링 {0}".format(<파라미터>...)

{0} 대신 사전식 방법 사용 가능

>>> print("{item} is color".format(item="apple"))
>>> dic = {"item":"apple", "color":"red"}
    print("{0[item]} is {0[color]}".format(dic))

지역변수를 사전 형식으로 사용 가능. locals() 사용

>>> item = "apple"
>>> color = "red"
>>> print("{0[item]} is {0[color]}".format(locals()))

사전자료형을 쓰는 경우, 앞에 **를 붙이면 값으로 판단하고 사용된다. 이러면 파라미터에 0을 붙이지 않아도 된다.

변수의 인덱스를 사용할 수 있다

numz = [5,4,3,2,1]
print("{numz}".format(**vars()))
print("{numz[0]}".format(**vars()))

입력

a = input('press key')

pickle

객체류의 데이터를 파일로 저장

ctypes

C나 dll 에서 함수 불러서 사용하기

decimal

정확한 정수와 부동소수점 표현을 위한 클래스

random

random.random(), random.randomrange(N)
random.sample(N,N) : 노 중복

함수들

= type(어떤 변수) : 타입체크
= id(어떤 변수) : 주소확인
= globals() : 내장함수 확인
= __builtins__ : 내장함수의 리스트. dir(__builtins__)
= help(xx) : 도움말을 불러온다
= filter(METHOD, DATA) : 조건에 맞게 필터링된 이터레이터 객체 리턴
= zip() : 두개의 리스트를 묶어 튜플로 만든다
= zip(*인자) : 튜플인자에 *를 붙여 사용하면 리스트로 다시 분리
= map() : 시퀀스형 객체를 순회하면서 모든 값에 대해 뭔가 처리가 필요할때 (값 갱신)
= join() : 문자열 내장함수, 자료형 객체의 모든 값을 합하는데.. 빠르다는데.. 어디다가??

os 관련 주요 모듈

= os.getcwd() : 현재 디렉토리 경로 얻기
= os.chdir( path ) : 디렉토리, 현재 위치를 변경
= os.access( path, mode ) : path에 대해서 mode에 해당하는 작업이 가능한지 확인
= : F_OK 파일 존재 여부
= : R_OK, W_OK : 읽기 쓰기가 가능한지 확인
= : X_OK : 실행 가능한가 확인 
= os.sys tem( command ) : command 를 실행하며 성공한 경우 0을 리턴.

그외

파일 복사,이동

import shutil
shutil.copy( 원본파일, 대상 디렉토리 )
shutil.move( 원본파일, 대상 디렉토리 )

추가모듈