본문 바로가기
대동단결 Python

파이썬 기초

by 즐거운 지니 2020. 5. 6.
반응형

1.1 설치

윈도우 7 기반, 파이썬은 아나콘다 배포판으로 설치, 아나콘다는 반드시 32비트용으로 설치해야 함. 국내 증권사 api 가 32비트 프로그램이기 때문인 것으로 사료됨. 책은 아나콘다 파이썬 3.6 32비트 버전임. 아나콘다 설치시 관리자 권한으로 설치.

1.2 파이썬 인터프리터 바탕화면에 바로가기 만들기.

C:\Anaconda3\Lib\idlelib\idle.bat 를 바탕화면에 바로가기 만듬. windows10에서는 c:\ProgramData\Anaconda3\Lib\idlelib\idle.bat 로 되어 있음.

1.3 변수

변수는 데이터의 주소를 담고 있음. 실제 데이터를 객체라고 함. 변수에 담긴 실제 데이터의 주소를 알고 싶으면 id(변수명).

>>> x = 100
>>> x
100
>>> id(x)
1845813952
>>> y = x
>>> y
100
>>> id(x), id(y)
(1845813952, 1845813952)

1.4 문자열

파이썬은 문자와 문자열을 구분하지 않음. 작은따옴표, 큰따옴표 모두 사용가능. 문자열은 리스트임. 리스트 사용문법과 같음. len(문자열) : 문자 개수 문자변수명[시작위치:끝위치] : 문자열 일부만 자르기, 시작위치, 끝위치 중 하나는 생략가능. 시작위치 생략하면 0으로 간주, 끝위치 생략하면 마지막 위치로 간주.위치를 음수로 지정. 음수로 지정되면 맨마지막위치부터 오는쪽으로 가면서 -1, -2 …

1.5 문자열 나누기

>>> my_jusik = "naver daum"
>>> my_jusik.split(' ')
['naver', 'daum']
>>> my_jusik.split(' ')[0]
'naver'
>>> split_jusik = my_jusik.split(' ')
>>> split_jusik
['naver', 'daum']
>>> split_jusik[0]
'naver'

1.6 문자열 합치기

>>> daum = "Daum"
>>> kakao = "Kakao"
>>> daum + ' ' + kakao
'Daum Kakao'

1.7 데이터 타입 확인하기

>>> type(x)
<class 'int'>
>>> type(id(x))
<class 'int'>
>>> type(4000)
<class 'int'>
>>> type(3.14159)
<class 'float'>
>>> type('안녕하새요')
<class 'str'>

1.8 리스트

>>> myList = [23,345,'sdfasd','fghfh',444]
>>> myList2 = []
>>> myList[3]
'fghfh'
>>> myList[-3]
'sdfasd'
>>> myList[1:3]
[345, 'sdfasd']

리스트 생성할 때 사용한 각괄호 와 인덱스의 곽괄호는 다른 개념임.

1.8.1 리스트의 인덱스 사용문법

각괄호내부의 숫자로 사용. [0], [3], [-2], [1:6], [3:-1] 양수 인덱스: 0 첫원소의 앞, 1 첫원소 뒤 둘째원소 앞, … 음수 인덱스: -1 마지막원소 앞 마지막에서 둘째원소 뒤, …

1.8.2 리스트에 데이터 삽입

리스트변수명.append('삽입될 데이터') : 리스트 마지막에 삽입됨 리스트변수명.insert(인덱스, '삽입될 데이터') : 인덱스 위치에 삽입됨

1.8.3 리스트데이터 삭제

del 리스트변수명[인덱스]

1.8.4 이차원리스트의 인덱싱

리스트변수명[2][4] 처럼 사용.

1.9 튜플

리스트는 각괄호사용, 튜플은 둥글괄호 사용. 리스트는 원소를 변경할 수 있지만, 튜플은 변경할 수 없다. 튜플은 대신 속도가 빠르다. 튜플원소에 접근하는 방법은 [인덱스]를 사용한다. 이를통해 [시작위치:끝위치]를 사용해 튜플원소 일부를 가져올 수 도 있음.

>>> a = (1,2,3,'하하하','호호호',4,5)
>>> a[2:4]
(3, '하하하')

1.10 딕셔너리

{키:값, 키:값 …} 딕셔너리는 인덱스를 지원하지 않음. 인덱스가 아니라 키를 사용해야 함.

>>> aa = {1:10, 2:20, '삼':30}
>>> aa[1]
10
>>> aa['삼']
30
>>> aa[1:2]
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    aa[1:2]
TypeError: unhashable type: 'slice'

키값으로 숫자, 문자, 모두 사용가능.

1.10.1 딕셔너리 데이터 추가

딕셔너리변수명[키] = 데이터

1.10.2 딕셔너리 데이터 삭제

del 딕셔너리변수명[키]

1.10.3 딕셔너리 키 찾기, 값 찾기

>>> aa = {1:10, 0.3:30}
>>> aa[0.3]
30
>>> aa.keys()
dict_keys([1, 0.3])
>>> type(aa.keys())
<class 'dict_keys'>
>>> list(aa.keys())
[1, 0.3]
>>> aaKeys = list(aa.keys())
>>> aaKeys
[1, 0.3]
>>> aaValus = list(aa.values())
>>> aaValus
[10, 30]
>>> 0.3 in aa.keys()
True

1.11 파이썬 비교연산자

==, !=, >, <, <=, >=

1.12 if 문 사용문법

   if 조건식 :
        실행문
    elif:
        실행문
    else:
        실행문

1.13 for문 사용문법

for 변수명 in 리스트 :
    실행문

리스트 원소가 하나씩 변수명에 바인딩 되어 실행문을 반복함.

리스트 대신 range()이용 해도 됨

for 변수명 in range(1,10)
    실행문

여기서 range는 1 <= range(1,10) < 10 로 해석. 그러므로 변수명에는 1 부터 9까지 차레대로 바인딩 됨.

리스트 대신 튜플을 사용해도 됨. for 변수명 in 튜플

1.13.1 for문에 딕셔너리 사용문법

for 키변수명,값변수명 in 딕셔너러변수명.ltems(): 또는 for 키변수명 in 딕셔너리변수명.keys(): 또는 for 값변수명 in 딕셔너리변수명.values():

1.14 while 문 사용법

while 조건문 :
    실행문

1.14.1 break 문 과 continue 문

루프 내부에 사용. break는 루프를 빠져 나가고, continue문은 그 다음 실행문을 실행하지 않고 계속 루프를 실행.

1.15 함수만들기

def 함수명(파라미터들):
    함수내 명령문
    return 반환값

1.16 모듈

모듈은 함수들과 데이터들을 모듈명.py 라는 파일로 만들어 놓은것. 이를 파이썬에서 임포트 하여 재사용 할 수 있음. import 모듈명

임포트 된 모듈의 함수를 사용하고 싶으면 모듈명.함수명()

임포트 된 모듈의 변수를 사용하고 싶으면 모듈명.변수명

모듈을 제작하는 과정에서 모듈을 테스트 하기 위해 모듈 마지막에 다음과 같은 코드를 삽입한다.

...
if __name__ == "__main__"
    print(내부함수명(필요한파라미터))
    print(__name__)

이렇게 함으로써 모듈을 직접 실행 할 때는 위의 if문이 동작하여 함수가 제대로 작동하는지 볼 수 있고, import 할 때는 위의 if 문이 동작되지 않는다. 그 이유는 name 이라는 파이썬 내부변수가 이 모듈을 직접 실행한 경우 “main”으로 바인딩 되고 import 되었을 때는 파일명으로 바인딩 되기 때문이다.

1.17 Time 모듈

>>> import time
>>> current_time = time.ctime()
>>> print (current_time)
Thu May 30 22:02:02 2019
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
>>> time
<module 'time' (built-in)>
>>> import random
>>> random
<module 'random' from 'C:\\ProgramData\\Anaconda3\\lib\\random.py'>

dir(모듈명) 은 모듈에 적재된 데이터 및 함수들을 확인 할 수 있다.

import 후 모듈명을 적으면 모듈의 위치를 확인할 수 있다.

1.18 os모듈

디랙토리 에 관한 함수들 있다. 현재 디랙토리 구하기 os.getcwd() 디랙토리내 파일명 구하기 os.listdir(패스) 특정디랙토리내 실행파일 찾기

for x in os.listdir('c:\Anaconda3')
    if x.endswith('exe')
        print(x)

1.19 임포트하는 방법

import 모듈명
모듈명.변수명
import 모듈명 as 별명
별명.변수명
from 모듈명 import 함수명

함수명을 바로 사용할 수 있다. 다만 기존의 동일한 이름의 함수명을 중복되어 사라짐.

form 모듈명 import *

모듈내 모든 함수 및 데이터를 바로 사용할 수 있음. 다만 기존의 동일한 이름의 것들은 모두 중복되어 사라짐.

1.20 클래스

self : 클래스가 인스탄스화 될 때 그 인스탄스명 으로 바인딩 된다. __init__:생성자(매쏘드) __del__: 소멸자

1.20.1 정의

class 클래스명(상속받을_부모_클래스명):
    클래스변수명 = 0
    def __init__(self, 입력받는인스탄스변수명, ...):
        self.입력받는인스탄스변수명 = 입력받는인스탄스변수명
        self.다른인스탄스변수명 = "호호데이터"
        함수변수명 = "임의데이터"

    def 매쏘드명(self):
        print (self.인스탄스변수명)

   def __del__(self):

상속받을_부모_클래스명 은 생략가능. 상속 받는다면 부모 클래스에 존재하는 메소드를 그대로 사용할 수 있다. 클래스변수명은 인스탄스에서 호출할 수 있으며 모든 인스탄스가 공유한다. C에서 정적 변수랑 비슷 인스탄스변수는 매소드 안에서만 정의될 수 있음. 보통 생성자 안에서 정의함. 그러면 다른 매소드에서도 사용 가능. (단, self. 없이 그냥 변수명으로 정의되면 그 함수에서만 사용되고 소멸되는 로컬 변수임) 인스탄스변수는 인스탄스명.인스탄스변수명 처럼 호출되며, 인스탄스 마다 다른 값을 가진다. 메소드가 self 인자를 가지고 있으면 인스탄스로만 호출이 가능하고, 메소드가 self 인자가 없으면 클래스로만 호출이 가능 클래스명은 대문자로 시작이 관례

인스탄스란ff = 클래스명() 처럼 클래스가 호출될 때 ff 를 인스탄스라 함. 메소드가 클래스로 호출된다는 것은 클래스명.메소드()형식으로 호출하는 것을 말함. 메소드가 인스탄스로 호출된다는 것은 인스탄스명.메소드() 형식으로 호출하는 것을 말함.

1.21 class 에서 변수 사용 정리

클래스 내부에서 정의
클래스변수가 되고 인스탄스 되지 않고 클래스로 직접 호출 가능할 뿐만 아니라 인스탄스에서도 호출가능. java에서 정적변수처럼 동작
매소드 내부에서 self.변수명 처럼 정의
인스탄스 변수가 되고 인스탄스의 다른 메소드에서 호출 가능.
매소드 내부에서 self. 없이 변수명으로 정의
해당 메소드 내부에서만 호출가능.
반응형

'대동단결 Python' 카테고리의 다른 글

Python 에서 R 스크립트 실행  (0) 2020.06.24
ANSI 화면제어  (0) 2020.06.06
pandas 기초  (0) 2020.05.06
자동라인매매알고리즘  (0) 2020.05.05
판서 바탕화면 만들기  (0) 2020.05.04

댓글