Save 37% off PRO during our Black Friday Sale! »

Python Study 2- Basic Syntax

Python Study 2- Basic Syntax

B97968bf727069ae776a34f3a201d85d?s=128

AhnSeongHyun

May 18, 2015
Tweet

Transcript

  1. 안성현(@SH84AHN) 기본 문법 자료형, 변수, 함수, 제어문, 람다 1

  2. 오늘 다룰 것들. 2 함수 변수 예외처리 반복문 자료형 람다

    yield 분기문 클로져
  3. 자료형 - None 3 널(null) - 아무것도 없음을 나타냄. >

    none = None > type(none) > <type 'NoneType'> > a1 ! 에러 - 다른 언어와 다르게 선언한다고 null 혹은 0 으로 초기화 되지 않음. - 어떤 값이라도 할당(assign)이 되어야 한다.
  4. 자료형 - bool 4 참 : True, 거짓 : False,

    대소문자에 주의!!
  5. 자료형 - 숫자형 5 정수 >>> a = 123 >>>

    a = -178 >>> a = 0 >>> a = 1.2 >>> a = -3.45 >>> a = 4.24E10 >>> a = 4.24e-10 >>> a = 0o177 >>> a = 0x8ff >>> b = 0xABC >>> a = 1+2j >>> b = 3-4J 실수 8진수 16진수 복소수 지수표현법 사용 0o 또는 0O (숫자 0 + 알파벳 o 또는 대문자 O)으로 시작 0X로 시작
  6. 자료형 - 숫자형 연산 6 다른 언어와 거의 다 비슷

     특이한 것들. - i++ 의 증감연산자는 되지 않는다. - 끝수 버리는 나머지 : // 예) 10/3.0 = 3.3333 10//3.0 = 3.0 - 승에 대한 표현 : a**n 예) 2**3 = 8, 10**3 = 1000 a = 10 print divmod(10, 3.0)  기타 함수들 - abs - pow - divmod : 몫과 나머지를 반환 > (3, 1)
  7. 자료형 - 문자열 7 "Hello World" 'Python is fun' """Life

    is too short, You need python""" '''Life is too short, You need python''' 문자열을 만드는 4가지 방법 "ash84's World" 'ash84"s World' 'ash84\"s World' """Life is too short, You need python""" '''Life is too short, You need python''' 따옴표, 쌍따옴표 포함 긴 문자열
  8. 시퀀스(문자열, 리스트, 튜플) 공통 연산 8 연산 설명 a +

    b 연결, 이어붙이기 a * n n 개의 복사본 만들기 a[i] 인덱스 a[i:j] 분할 e in a, e not in a 멤버 포함여부 검사 for e in a 반복문 all(a) a 의 모든 항목이 True 이면 True any(a) a 의 항목중 하나라고 True 이면, True len(a) a의 길이 반환 min(a) a 중에서 가장 작은 항목 반환 max(a) a 중에서 가장 큰 항목 반환
  9. 문자열 연산 예제 9

  10. 문자열 함수 10 문자 개수 세기 count 위치 알려주기 find,

    index - index 는 없으면 예외발생, find는 -1 반환,
  11. 문자열 함수 11 문자열 삽입 join - 리스트내 항목 연결시

    많이 사용. 대소문자 변환 lower, upper, swapcase
  12. 문자열 함수 12 공백지우기 lstrip, rstrip, strip 바꾸기 replace 나누기

    split
  13. 문자열 포맷팅 13 코드 설명 %s 문자열 (String) %c 문자

    한개(character) %d 정수 (Integer) %f 부동소수 (floating-point) %o 8진수 %x 16진수 %% Literal % (문자 '%s' 자체) - print 문에서의 사용 문자열 포맷 코드
  14. 문자열 포맷팅 14 두개를 같이 쓰는 경우 괄호로 묶는다. %

    표시, 공백, 소수점 자리 제한
  15. 자료형 - list 15 - C# 의 ArrayList 와 유사

    - [] 으로 표시 - nested 형태로 가능 > a = [] , a = list() > b = [1, 2, 3] > c = ['Life', 'is', 'too', 'short'] > d = [1, 2, 'Life', 'is'] > e = [1, 2, ['Life', 'is']]
  16. 자료형 - list 16 접근 수정, 삭제, 비우기

  17. 자료형 - list 17 추가 append 순서 바꾸기 reverse 정렬

    sort, reverse 옵션 사용, (sort([cmp[, key[, reverse]]]))
  18. 자료형 - list 18 갯수세기 count 리스트 확장 extend 가져오기

    & 삭제하기 pop
  19. 자료형 - list 19 삽입하기 insert 제거하기 remove 위치 반환

    index
  20. 리스트 내포 20 리스트내 특정 조건이나 연산으로 새 리스트를 만들기

    위한 연산자 [표현식 for 항목1 in 반복가능객체1: if 조건1 for 항목1 in 반복가능객체1: if 조건1 for 항목n in 반복가능객체n: if 조건n]
  21. 리스트 내포 - 조건을 붙이는 경우 21 예) 동물이름리스트에서 3글자로된

    동물만 따로 빼라.
  22. 리스트 내포 - 여러 개의 반복문 사용 22 => [6,

    36, 216, 1296, 7, 49, 343, 2401, 8, 64, 512, 4096, 9, 81, 729, 6561]
  23. 자료형 - tuple 23 - () 으로 표시 - 리스트와

    유사 - 값을 변경할수 없다. - 리스트보다 적게 쓰인다. > t1 = () t1 = tuple() > t2 = (1,) > t3 = (1,2,3) > t4 = 1,2,3 > t5 = ('a', 'b', ('ab', 'cd'))
  24. 자료형 - tuple 24 기본 연산 함수에서 주로 사용 -

    return 에서 하나 이상 반환하는 경우, 가변인자
  25. 자료형 - tuple 25 지우거나 변경하려고 하면 에러 발생

  26. 자료형 - dict 26 - {} 으로 표시 - 순서열이

    아닌, key : value 형태로 데이터 저장 {Key1:Value1, Key2:Value2, Key3:Value3 ...} > d = {} > d = dict() > d = { “name” : “ash84”, “age” : 11}
  27. 자료형 - dict 27 기본 추가 및 삭제, 비우기

  28. 자료형 - dict 28 리스트 형식은 key로 쓸수 없다. 변경가능하기

    때문에 tuple 는 변할수 없기 때문에 key 로 쓸수 있다.
  29. 자료형 - dict 29 key 리스트 만들기, keys value 리스트

    만들기, values key, value 쌍으로 얻기, items key로 value 가져오기, get 해당 key가 있는지 조사, in
  30. 변수 30 변수는 메모리공간을 가리키는것. 2 3 a 가 변수이고,

    2 라는 메모리 공간을 가르키는 레퍼런스이다. 변수를 만들때는 ‘=‘ 할당을 해야한다. 선언만으로는 불가. a b
  31. 변수 31  레퍼런스 카운트? - 몇 개의 변수가 메모리

    공간를 가리키는지? - 가비지 컬렉션이 동작하는 단위, - 해당 메모리공간을 가리키는 레퍼런스 카운트가 0이면 메모리 회수 - 2 이 있는 메모리공간(객체)을 가리키는 레퍼런스 카운트는 2개이다. - 3 이 있는 메모리공간(객체)을 가리키는 레퍼런스 카운트는 1개이다. 2 a b c 3
  32. 변수 32  만드는 방법  삭제하는 방법, del

  33. 변수 33  만드는 방법  삭제하는 방법, del

  34. 변수 34  만드는 방법  삭제하는 방법, del

  35. 변수 35  참조와 복사 - 할당의 기본은 참조로 동작

    2 a b 1 참조로 연결되어 있기 때문에 변경가능한 데이터가 변경되면 다 영향을 받는다. [10, 2, 3] a b
  36. 변수 36  리스트 복사본 생성 방식 방법 1, [:]

    을 이용한 복사본 생성 방법 2, copy 모듈을 이용한 복사본 생성
  37. 변수 37  전역변수, global 키워드로 사용시 지정해야 한다. 

    단순히 같은 변수명이라고, 전역변수로 인식하지 않는다.
  38. 함수 38 기본 구조 def 함수명(입력 인수): <수행할 문장1> <수행할

    문장2> ... 예)
  39. 함수 39 * 가변인자, tuple 로 받는다. * 하나이상 return,

    tuple 로 반환 한다.
  40. 함수 40 * 함수의 인자선언에서 초기값 지정가능.

  41. 함수 - yield 41  결과를 넘겨주는 역할? 그럼 return이랑

    다른 점은?
  42. 함수 - yield 42 생성기(generator)를 만든다. next()를 호출때마다 함수 실행

    next() 호출시, yield 문 까지 실행하고 멈춘다. 다시 호출하면 한번도 돌고, yield 문에서 멈춘다. None을 반환, 혹은 StopIteration 예 외 발생시 종료
  43. 함수 - yield 43 종료되면 StopIteration 예외를 발생 예외처리로 종료처리

  44. 함수 - yield 44 close() 함수를 이용해서 중간에 종료 시킬수

    있다.
  45. 람다(lambda) 45 이름도 요상한것, 익명함수, 축약형 함수 lambda 인자 :

    표현식 이름이 없는 함수로 만들수 있다. 리스트 정렬시, key 를 lambda 로 만든 익명함수를 전달할수 있다.
  46. 람다(lambda) 46 예) 함수명 리스트를받아서 각 함수명이 “” 으로 묶이고,

    쉼표로 연결된 문자열을 만들어라
  47. 내장함수 47 abs 절대값 돌려주는 함수 chr 아스키값을 문자로 변환/ord

    문자를 아스키로 변환 dir 해당 객체가 가지고 있는 변수/함수 보여주기
  48. 내장함수 48 enumerate - 시퀀스자료형(리스트, 터플, 문자열)을 입력으로 받아 enumerate객체를

    리턴 - (순서, 값)의 형태를 가진다.
  49. 내장함수 49 hex 16진수, oct 8진수 변환 int/str 숫자형 혹은

    문자열 형으로 변환 id 레퍼런스 보여주기
  50. 내장함수 50 map(함수, 반복가능한 자료형) 함수를 각각의 요소에 대입하고 리스트로

    출력 input 사용자 입력 받는 함수 eval 실행가능한 문자열을 받아서 실행하고 결과를 보여준다.
  51. 내장함수 51 open 파일읽기, 지정한 읽기 방법에 따라서 입력을 받아서

    파일객체 리턴 mode 설명 w 쓰기 모드로 파일 열기 r 읽기 모드로 파일 열기 a 추가 모드로 파일 열기 b 바이너리 모드로 파일 열기 별 다른 라이브러리 없이, 바로 사용가능.
  52. 내장함수 52 sorted 시퀀스 자료형을 정렬하는 역할, .sort 는 호출한것

    자체를 정렬하고 반영한다. 반환하지 않는다. zip 동일한 개수의 자료형을 묶어주는 역할
  53. 함수안의 함수 53 1급 함수(First Class Function) - 함수를 다른

    함수에 인수로 전달 - 반환값으로 전달 - 변수나 자료구조에 저장 할수 있는 함수
  54. 함수 클로저 54 - 함수가 참조할수 있는 비지연변수나 일반변수를 저장한

    참조환경이 함수와 함께 제공, 뭔애기? - 쉽게 말하면, 반환시점의 함수객체가 내부의 지역변수, 비지역변수의 값을 유지한다. abc1 abc1 abc23 dan1 dan11 dan23
  55. 함수 클로저 55 a, b, c = ‘a’, ‘b’, ‘c’

    cache[‘abc1’] a, b, c = ‘a’, ‘b’, ‘c’ cache[‘abc1’] f1 f2 - 각각의 함수객체가 독립적인 이름공간을 갖는다. - 각각의 공간은 함수객체(f1, f2)가 삭제될 때 까지 유지. - 함수인데, 마치 클래스의 별도의 인스턴스를 만들어서 동작하는것처럼 사용. - 내부 함수의 환경을 기록. - 기존 함수에 추가기능을 넣어서 함수를 포장하려고 할때, 유용하다.
  56. 함수 클로저 56 a, b, c = ‘a’, ‘b’, ‘c’

    cache[‘abc1’] a, b, c = ‘a’, ‘b’, ‘c’ cache[‘abc1’] f1 f2 (<cell at 0x01DB4ED0: str object at 0x01D84DE8>, <cell at 0x01DBF5F0: str object at 0x01D84E00>, <cell at 0x02501650: str object at 0x01E0E068>, <cell at 0x02501670: dict object at 0x01DB2AE0>) (<cell at 0x02501690: str object at 0x01D84458>, <cell at 0x025016B0: str object at 0x01D84DE8>, <cell at 0x025016D0: str object at 0x01D844D0>, <cell at 0x025016F0: dict object at 0x025055D0>)
  57. for 57 기본 스타일 for i in range(0, 10): print

    i for(int i=0; i<10; i++) { … } @C# @Python
  58. for 58 list, tuple, 문자열 foreach (int element in arrayList)

    { … } for e in elements: pass for c in "string": print c @C# @Python
  59. while 59 while 조건문: 명령문 # -*- coding:utf-8 -*- treeHit

    = 0 while treeHit < 10: treeHit = treeHit +1 print("나무를 %d번 찍었습니다." % treeHit) if treeHit == 10: print(“나무가 넘어갑니다.”)
  60. 무한루프 60 while 1: 명령문 while 1: print "ash84" if

    is_stop: break
  61. continue 61 그 자리에서 반복문으로 돌아가라 는 의미 a =

    0 while a < 10: a = a+1 if a % 2 == 0: continue if a % 5 == 0: break print(a) > 1 3 2의 배수인 경우, 다음 문을 진행하지 않고 되돌아감.
  62. if 62 기본 스타일 if a==1: ... elif a==2: ...

    else : ...
  63. True vs. False 63 자료형 참 거짓 숫자 3 0

    문자열 "abc" "" list [1,2,3] [] tuple (1,2,3) () dict {"a":"b"} {} 거짓을 기억하자!
  64. True vs. False 64 tag = get_tags() if len(tag) >

    0: print "go tag" else: print "no tag" tag = get_tags() if tag: print "go tag" else: print "no tag" name = get_name() if len(str) > 0: print “name” else: print “input name” name = get_name() if str: print “name” else: print “input name” 좀더 간결하게 쓸 수 있다. 근데 더 큰 문제가 있다면?
  65. True vs. False 65 tag = get_tags() if len(tag) >

    0: print "go tag" else: print "no tag" name = get_name() if len(str) > 0: print “name” else: print “input name” None 이 넘어온다면? Traceback (most recent call last): File "C:\workspace\test.py", line 3, in <module> if len(name) >0: TypeError: object of type 'NoneType' has no len()
  66. True vs. False 66 문제 없음. None 인경우도 false 이기

    때문에, 모두 커버 tag = get_tags() if tag: print "go tag" else: print "no tag" name = get_name() if str: print “name” else: print “input name” None 이 넘어온다면?
  67. 비교연산자... 는 다른 언어와 동일. 67 >, <, <=, >=,

    == , !=
  68. and, or 68 &&, || 는 없습니다. 대신 and/or를 사용하시면

    됩니다. name = 'a' if len(name) > 0 && name =='a': print name name = 'a' if len(name) > 0 and name =='a': print name
  69. not 69 ~가 아니면 의 의미 name = 'a' if

    not name=='b': print name not 이 앞에 온다는 것에 주의
  70. in 70 그 안에 있냐? 라는 의미 person = {'name':'ash84',

    'age':21} if 'name' in person: print person['name' person = ['name', 'age'] if 'name' in person: print person 그 안에 없냐? not in person = "ash84" if 'ash' in person: print person dict 안에서 key가 있는지 확인 list 안에 해당 값이 있는지 확인 문자열 안에 해당 값이 포함되어 있는지 확인
  71. switch-case 문은 없습니다. 71

  72. 예외처리 72 기본 스타일 try { … } catch(Exception e)

    {… } finally { … } @C# try: ... except Exception, e: ... finally: ... @Python 비슷함. catch => except 에러 발생시키기 throw => raise def fly(self): raise NotImplementedError
  73. 예외처리 73 여러 개 걸리게 하기 try: ... except ZeroDivisionError:

    … except BufferError: …. except OverflowError: …. ... finally: ... try: ... except ZeroDivisionError, OverflowError : ... finally: ...
  74. 예외처리 74 여러가지 예외 케이스들을 미리 정의(https://docs.python.org/2/library/exceptions.html)

  75. 정리 75 변수는 할당(=)을 해야 생성된다. 전역변수는 global list, dict

    만 기억하자. tuple은 변하지 않는것들. 클로저는 관련된 것들을 묶는다 라고 생각하자. lambda 와 리스트 내포는 코드를 줄여준다. if 문에서 False 의 경우를 기억하고 활용하자. 예외처리는 try-except-finally 쓰고 시작하자.