Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

파이썬 언어 기초

4,998 views

Published on

파이썬 언어 기초

Published in: Technology

파이썬 언어 기초

  1. 1. 파이썬 언어 기초 최범균
  2. 2. 파이썬 • 인터프리터, 스크립트 • 동적 타입 언어 • 함수, 클래스, 모듈, 패키지 • 간결하고 쉬운 문법 • 다양한 라이브러리 많음 • 통계, 기계학습, 웹 개발, 배포 도구 등 다양한 영역에서 사용 • 현재 버전 3.5 • 여전히 2.7도 많이 사용 [http://www.tiobe.com/tiobe_index]
  3. 3. 스크립트 언어 # hello.py print("헬로우") 스크립트 실행 $ python hello.py 헬로우 코드 작성, 바로 실행
  4. 4. 몇 가지 기본 구성 요소 import httplib, urllib # 패키지/모듈 임포트 import time # 주석 key = 'XXXXXXXX' # 글로별 변수 def sendCommand(): # 함수 # 블록은 들여쓰기로 처리 # params, headers 등 로컬 변수 params = urllib.urlencode({'api_key':key, 'command_string': 'OFF'}) headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} conn = httplib.HTTPSConnection("api.thingspeak.com") try: # 블록은 들여쓰기로 conn.request("POST", "/talkbacks/7678/commands", params, headers) response = conn.getresponse() print response.status, response.reason data = response.read() print("command id =", data) conn.close() except: print "connection failed"
  5. 5. 주요 타입 데이터 타입 • 숫자 • int : 10, 20 • float : 10.1, 0.8 • 부울(bool) : True, False • 문자열(str) : '가', "가나다" 주요 연산 • 수치 연산: • 10 + 20, 10 – 5, 2 * 3 • 24 / 5 : 4.8 (실수 반환) • 240 // 50 : 4 • 240 % 50 : 40 • 2 ** 3 : 2의 3승 • 비교 연산: • < <= > >= == != • is : 같은 객체인지 • is not : 같은 객체가 아닌지
  6. 6. 주요 타입: 리스트(list) • 여러 값을 순차적으로 저장할 수 있는 자료형: 배열 • 생성 : pk = [4, 6, 1, 9] • 추가/사입 • 추가 : pk.append(10)  [4, 6, 1, 9, 10] • 삽입 : pk.insert(1, 3)  [4, 3, 6, 1, 9] • 인덱스 기반 접근 • 양수 인덱스(0부터 시작): pk[0]  4, pk[2] = 3  pk = [4, ,6, 3, 9] • 음수 인덱스뒤에서 -1부터 시작): pk[-2]  1 • 제거 • remove(val): pk.remove(6)  [4, 1, 9] • pop(idx): popped = pk.pop(2)  popped = 1, pk = [4, 6, 9]
  7. 7. 주요 타입: 사전(dict) • (키, 값) 쌍을 갖는 해시 • 생성 : map = {'r': 'red', 'g': 'green', 'b': 'blue'} • 추가/변경 • map['r'] = 'RED'  {'r': 'RED', 'g': 'green', 'b': 'blue'} • 접근 • 개별 요소: map['g']  'red' • 키: map.keys()  dict_keys(['r', 'b', 'g']) • 값: map.values()  dict_values(['red', 'blue', 'green']) • 키 존재 여부: 'g' in map  True, 'x' not in map  True • 개별 쌍 제거 • del map['g']
  8. 8. 주요 타입: 튜플(tuple) • Immutable 리스트 • 생성 : cardExp = (12, 2019) • cardNo = 1234, 5678, 2468, 0987 • oneItem = 433, • 접근 • 인덱스: cardExp[0]  12, cardExp[1]  2019 • 튜플 언패킹 • mon, year = cardExp  mon = 12, year = 2019 • 변환 • tuple  list: cardNoList = list(cardNo) • list -> tuple: cNo = tuple(cardNoList)
  9. 9. 제어문 if age > 10 and age < 20: print('무서운10대') elif age <= 10: print('아직은 말 들음') else: print('성인') while 조건: 코드 # 조건이 True이면 실행 for i in range(5): # range(5) : 0~4 print(i) for v in [1,2,3,4,5]: print(v) break, continue, pass문 존재
  10. 10. 함수 def hello(name): print('Hello,', name) def hello2(name): print('Hello,', name) return # 반환 값 없음 def sum(a, b): return a + b # 값 반환 hello('이름') s = sum(1, 2) # s는 3 h = hello # 함수는 first-class h('이름') # 키워드 인자, 기본 값 def createCar(doors = 2, type = 'sports'): … createCar() # doors = 2, type = 'sports' createCar(4, 'suv) # doors = 4, type = 'suv' createCar(type = 'sedan', doors = 4) createCar(type = 'suv') # doors = 2 # 람다식 reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
  11. 11. 클래스 class Raspberry: def __init__(self, ver): # 생성자(초기화) self.version = ver # 멤버 변수 def turnOn(self): # 멤버 함수 # __로 시작하는 멤버 변수 : 일종의 private self.__powerState = True def temperature(self): temp = … return temp def gpio_on(self, num): GPIO.output(num, True) rp = Raspberry(3) # 생성 rp.turnOn() # 멤버 함수 사용 rp.version # 멤버 변수 사용 rp.gpio_on(18)
  12. 12. 상속 class Developer: def __init__(self, name): self.name = name def coding(self): print(self.name, 'is coding!!') class PythonDeveloper(Developer): def coding(self): super().coding() print(self.name, 'is python coding!!') class JavaDeveloper(Developer): def __init__(self, name): super().__init__(name + ' in java') >>> jd = JavaDeveloper('bk') >>> jd.coding() bk in java is coding!! >>> >>> pd = PythonDeveloper('Gudio') >>> pd.coding() Gudio is coding!! Gudio is python coding!! >>>
  13. 13. 모듈=파일, 패키지=모듈 모음=폴더 # switch.py # py 파일이 곧 모듈 import os statusFilePath = "/home/pi/switchStatus.txt" def isSwitchOff(): if not os.path.exists(statusFilePath): return False f = open(statusFilePath, 'r') line = f.readline() f.close() if line == "ON": return False else: return True def setSwitchStatus(newStatus): f = open(statusFilePath, 'w') f.write(newStatus) f.close() … importswitch #switch 모듈임포트 defrunCommand(): params =urllib.urlencode({'api_key':key }) headers ={"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} conn=httplib.HTTPSConnection("api.thingspeak.com") try: … iflen(data)>0: switch.setSwitchStatus(data) #모듈명.구성요소:함수,변수,클래스등접근가능 conn.close() #switch.statusFilePath처럼 모듈의글로벌변수접근 except: print "connection failed" if__name__ =="__main__": runCommand() import * 파이썬 3.3 전에는 폴더에 __init__.py 파일이 있어야 패키지로 인식 * 3.3부터는 이 파일이 없어도 패키지로 인식함
  14. 14. 패키지=모듈 모음=폴더 * 파이썬 3.3 전에는 폴더에 __init__.py 파일이 있어야 패키지로 인식 * 3.3부터는 이 파일이 없어도 패키지로 인식함 패키지 구조 예: my/ __init__.py pack/ __init__.py infomod.py pack1/ __init__.py memlist.py
  15. 15. 모듈/패키지 사용, import/from • 패키지/모듈 검색 기준 : sys.path • import, from import로 사용 대상 지정 • import 모듈/패키지명 (as 별칭) • from 패키지/모듈 import 모듈/구성요소 (as 별칭) import my.pack.infomod my.pack.infomod.info() # my/pack/infomod.py def info(): … import my.pack.infomod as infom infom.info() from my.pack import infomod infomod.info() from my.pack.infomod import info info()
  16. 16. 스크립트 실행 진입 지점 # run.py import switch # 임포트 시점에 실행 def runCommand(): print("runCommand") ... print("before") if __name__ == "__main__": runCommand() print("after") # switch.py print("switch") python run.py switch before runCommand after
  17. 17. 개발 도구 PyCharm/IntelliJIDLE Visual Studio Code
  18. 18. 기타 • pip : 패키지 관리 도구 • Django : 웹 프레임워크 • numpy, pandas, matplotlib : 데이터 분석 모듈 • scikit, tensorflow, theano : 머신러닝 • jupyter notebook : 웹 브라우저 기반 파이썬 실행 환경 • 코드, 데이터 분석, 시각화 등 공유 가능
  19. 19. 참고자료 https://docs.python.org/3/

×