사용자 도구

사이트 도구


language:python:basic

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
language:python:basic [2016/12/06 15:44] kieunslanguage:python:basic [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +너무 오래 전이라 책을 다시 보면서 정리
 +
 +====== 문법요소 ======
 +
 +  * pass : 아무것도 하지 않는다
 +  * 함수 시작 부분에 " 나 """ 로 설명을 적어두면 __doc__ 속성에 저장되어 도움말로 사용된다.
 +
 +===== import =====
 +
 +<code python>
 +import 모듈
 +from 모듈 import 어트리뷰트
 +from 모듈 import *
 +import 모듈 as 별칭
 +</code>
 +
 +===== 자료형 =====
 +
 +  * 참조는 기본
 +  * 주소확인 : id(어떤 변수)
 +  * 리스트, 세트, 튜플, 사전
 +  * 리스트 완전 복사 : copy.deepcopy(XX)
 +  * <nowiki>'**'</nowiki> 연산자 : pow()
 +
 +==== 문자(열) ====
 +
 +  * (')나 (") 중 아무거나 사용.
 +  * 시작과 끝이 같은 기호로 끝나야 한다.
 +
 +<code python>
 +'abcde' # ok
 +'abcde" # error
 +</code>
 +
 +<note>아래 부분은 v2.x 에 해당되는 내용. v3는 기본 유니코드라서 u를 붙일 필요가 없어졌다.</note>
 +
 +
 +  * 한글과 같은 문자를 표현하려면 유니코드를 사용
 +  * 상수형 문자열이라면 u'...' 기호 u를 붙여서 선언 가능하고<code python>
 +str1 = u'한글또는 외국어'
 +</code>
 +  * 변환 해야 한다면,<code python>
 +'가'.encode('utf-8') # 바로 인코딩해서 넘기는 방법
 +</code>
 +
 +  * '+' 로 문자열 결합
 +  * rjust(NUM) : 오른쪽 정렬
 +  * ljust / center
 +  * zfill() : 0으로 채우기
 +
 +==== 튜플 ====
 +
 +  * 읽는 용도의 데이터 설정
 +  * 괄호 안에 항목을 넣는다.
 +
 +<code python>
 +gameDir = ('skyrim', 'NinjaOfTheMark')
 +</code>
 +
 +gameDir[0]을 치면, 'skyrim'이 출력된다.
 +
 +==== 리스트 ====
 +
 +  * ([,]) 기호 내부에 항목을 선언한다.
 +  * 배열 요소를 탐색하는 여러 방법이 있는데, 나중에 정리하자.
 +
 +<code python>
 +gameDir = ['skyrim', 'NinjaOfTheMark']
 +
 +gameDir[0] # 0번째 항목 리턴
 +gameDir.count() # 개수
 +gameDir.pop() # 데이터를 얻은 다음 삭제
 +</code>
 +
 +===== 함수 =====
 +
 +함수 선언 방법
 +
 +<code python>
 +def <함수이름>( 인자1, 인자2, ... ):
 +  <구문>
 +  return <리턴값>
 +</code>
 +
 +===== 스코핑룰 =====
 +
 +전역변수를 사용하고 싶다면,
 +
 +<code python> 
 +>>> g = 1
 +>>> def test_scope(a):
 + global g # g는 전역변수를 가리킨다
 + g = 2
 + return g+a
 +</code>
 +      
 +===== 키워드인자 =====
 +
 +파라미터의(인자) 이름으로 값을 지정해서 사용하는 방법. 파라미터 순서를 지키지 않아도 된다.
 +
 +<code python>
 +>>> def connURI(server, port): return "abc"
 +>>> connURI(port="8080", server="test.com")
 +</code>
 +
 +===== 가변 =====
 +
 +인자 이름 앞에 <nowiki>'*'</nowiki>를 붙이면 가변으로 (튜플로서) 인식된다. 
 +
 +<code python>
 +>>> def test(*args): print(type(args))
 +</code>
 +
 +정의되지 않은 인자 처리 : 인자이름 앞에 <nowiki>'**'</nowiki> 타입 미정의 가변 인자를 사용할 수 있다. 마지막에 와야 한다.
 +
 +===== 람다 =====
 +
 +  lamda 인자 : <구문>
 +
 +===== 이터레이터 =====
 +
 +자료형 데이터에 순환하는 이터레이트를 쓸 수 있다
 +
 +<code python>
 +s = 'abc'
 +it = iter(s) # 이터레이터를 얻는다
 +next(it) # 다음 요소로 이동
 +it.__next__() # 다음 요소로 이동
 +</code>
 +
 +  * **yield** : 함수를 끝내지 않고 호출한 곳에서 리턴 값을 전달한다. 함수는 계속 실행. 오오
 +
 +===== 비교문 =====
 +
 +<code>
 +  num >= 70 && num < 80 --> 70 <= num < 80 형식으로 사용할 수 있다.
 +  if 70 <= num < 80: ...
 +</code>
 +
 +^ and, <nowiki>&</nowiki> \\ <nowiki>or, |</nowiki> ^
 +| <nowiki>&</nowiki> 와 <nowiki>|</nowiki> 는 if 문 전체를 비교하고 종료 \\ and 와 or를 사용하면 조건에 맞으면 비교를 끝내고 다음문장으로 이동 |
 +
 +^ for ^
 +| range()함수로 실행 횟수 방식으로 실행 가능 \\ for i in range(10): print(i) # 0 .. 9 까지 11번 반복해서 i를 출력 |
 +
 +===== 클래스 =====
 +
 +  * 클래스 함수의 첫 인자는 self (클래스 자신)
 +  * 클래스 변수 선언시 값 인력 가능, 이건 클래스 변수가 된다. 인스턴스에서 값을 입력하면 다른 변수가 생긴다.
 +  * 클래스에 대해서도 동적으로 멤버 변수 추가 가능. 추가 후 모든 인스턴스에서 사용 가능.
 +  * 인스턴스객체에 동적으로 멤버변수 추가/삭제 가능
 +  * 인스턴스에서 클래스에 접근하기 __class__ 키워드인자
 +  * isinstance(INST, CLASS) : 상속 관계 확인
 +  * 생성자 __init__(self, value), 소멸자 __del__(self)
 +  * 인스턴스 삭제 : del . 레퍼런스가 0이되면 __del__()호출된다.
 +  * 정적메소드와 클래스 메소드 두종류. 클래스 메소드는 self를 받을 첫번째 인자가 필요하다.
 +  * 함수 선언 후, staticmethod(), classmethod()로 재선언하여 정적/클래스 함수를 정의한다.
 +
 +==== 연산자중복정의 ====
 +
 +연산자 중복 정의를 위한 미리 정의된 함수가 있다. '-' 면 __sub__ 라든지.
 +
 +==== 클래스 상속 ====
 +
 +<code>
 +class Parent:
 + pass
 +class Child(Parent):
 + pass
 +</code>
 +
 +==== 메서드 재정의 ====
 +
 +부모 메서드와 자식쪽의 메서드의 이름만 같으면 재정의(오버라이딩)된다.
 + 
 +super()로 부모 클래스 메소드 호출
 +
 +===== 예외처리 =====
 +
 +<code>
 + try:
 + <구문>
 + except <예외종류>:
 + else:
 + 예외가 없는 경우
 + finally:
 + 예외 상관 없이 try 블록 실행 후
 +
 + raise <예외> : 예외 발생 시킨다.
 +</code>
 +
 +===== assert =====
 +
 +<code>
 + assert <조건식>, <관련데이터>
 +</code>
 +
 +===== 입출력 =====
 +
 +==== 출력 ====
 +
 +<code python>
 + print(<문자열>)
 +</code>
 +
 +<code python>
 + import sys
 + sys.stdout.write('test')
 +</code>
 +
 +  * rjust(NUM) : 오른쪽 정렬
 +  * ljust / center
 +  * zfill() : 0으로 채우기
 +
 +==== 포맷팅 ====
 +
 +  "스트링 {0}".format(<파라미터>...)
 +
 +**{0}** 대신 사전식 방법 사용 가능
 +
 +<code python>
 +>>> print("{item} is color".format(item="apple"))
 +>>> dic = {"item":"apple", "color":"red"}
 +    print("{0[item]} is {0[color]}".format(dic))
 +</code>
 +
 +지역변수를 사전 형식으로 사용 가능. locals() 사용
 +<code python>
 +>>> item = "apple"
 +>>> color = "red"
 +>>> print("{0[item]} is {0[color]}".format(locals()))
 +</code>
 +
 +사전자료형을 쓰는 경우, 앞에 <nowiki>**</nowiki>를 붙이면 값으로 판단하고 사용된다. 이러면 파라미터에 0을 붙이지 않아도 된다.
 +
 +변수의 인덱스를 사용할 수 있다
 +<code python>
 +numz = [5,4,3,2,1]
 +print("{numz}".format(**vars()))
 +print("{numz[0]}".format(**vars()))
 +</code>
 +
 +
 +==== 입력 ====
 +
 +<code python>
 +a = input('press key')
 +</code>
 +
 +===== pickle =====
 +객체류의 데이터를 파일로 저장
 +
 +===== ctypes =====
 +
 +C나 dll 에서 함수 불러서 사용하기
 +
 +===== decimal =====
 +
 +정확한 정수와 부동소수점 표현을 위한 클래스
 +
 +
 +=====random=====
 +<code python>
 +random.random(), random.randomrange(N)
 +random.sample(N,N) : 노 중복
 +</code>
 +
 +
 +
 +
 +
 +
 +====== 함수들 ======
 +
 +  = 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을 리턴.
 +
 +
 +===== 그외 =====
 +
 +파일 복사,이동
 +
 +<code python>
 +import shutil
 +shutil.copy( 원본파일, 대상 디렉토리 )
 +shutil.move( 원본파일, 대상 디렉토리 )
 +</code>
 +
 +====== 추가모듈 ======
 +
 +  * 스펠체크 : flake8