ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 문법
    @ 17. 1 ~ 18/파이썬 2018. 3. 9. 00:58

    파이썬 헷갈리는 문법

    ** 제곱

    변수는 그냥 변수명하고 바로 = 대입해서 사용하면됨.

    / 나누기 연산

    // 나머지 버림

      : 파이썬 2x는 /가 나누기 -- 소숫점 버림처럼 동작한다.


    문자열

     - 변수에 작은 따옴표 '와 큰따옴표 "를 넣어서 선언하고 사용한다.

     - 문자열 내부에서 "와 '를 사용하고 싶을때에는 역슬래시(\)를 사용한다.  

       : escape_s1 = "This is \"double quote\"" 

        \" 이렇게 \다음 "가 나오게 하는것. 그래서 위에 끝날때 \""가 되는 것

     - raw문자열 표현법

       : 역슬래시 자체를 문자열에 자주 포함해야 할 때가 있다. 경로표현 등..이런 경우 문자열 앞에 r을 붙여서 raw문자열로 만들어줄 수 있다.

         raw_s1 = r'C:\ddd\"'


    멀티라인 문자열 표현법

      - 작은따옴표나 큰따옴표 3개로 감싸면 해당 문자열은 멀티라인 문자열이 된다 """ or ''' 그 문자열 안에서 입력한 줄바꿈을 그대로 사용한다.


    리스트

      - 리스트에 담을 수 있는 아이템 타입에 제한이 없다. 심지어 그 리스트 그 자신도 담을 수 있다.

        [ ]안에 넣고 ,로 구분한다

      - 또는 l5 = list("dfedfd") 이렇게 넣어도된다.

        l6 = list(l1 + l2 + l3)

        자료형에 구분이 없기 때문에 자료들의 목록을 다 더한 리스트가 l6가 된다.

      - 리스트 인덱스는 또 음수로 사용할 수 있다.

        0번 인덱스 이전(즉 끝은) -1로 접근이 가능하다

      - 리스트 연산 가능

      - 삭제는 del 리스트변수[인덱스]

      - List Comperhension : []괄호 안에 for루프를 사용하여 반복적으로 표현식을 실행해서 리스트의 요소들을 정의하는 것..

        [표현식 for 요소 in 컬랙션 [if 조건식]] 의 문법으로 컬렉션으로부터 요소를 하나씩 가져와 표현식을 실행하여 그 결과를 리스트에 담는 방식이다.

        이때 뒤에 if조건식은 옵션으로 for루프에서 이 조건식에 맞는 요소만 표현식을 실행하게 된다.



    딕셔너리  :키 값 쌍을 다룰 수 있는 데이터 타입

      - 키 값은 어떠한 것이라도 될 수 있다. 단 대응관계가 되는 해시블 한 타입이어야 한다? (List는 안된다.)

      - 역시나 고유값이어야 함

      - 딕셔너리는 중괄호를 사용해야한다  { } 키값 구분자는 : 각각의 구분은 , 로 한다

      - 리스트 처럼 만드는 방법이 하나더 있음. dict() 

         근데 dict를 사용하게 된다면 키값은 문자열만 사용해야한다.

        튜플이 키와 값('a', 10)으로만 구성된 리스트라면 dict(튜플리스트)로 dict를 생성할 수 있다.

      - 삭제는 del dict변수명[키값]

      - c#처럼 내부 키값확인하기 위해선 in사용하면됨. if 키값 in dict변수명: 이런식으로..

      - dict변수명.get도 있는데 dict변수면[키값]과 비슷한데 리턴값이 다름. 키값이 없을때 get은 None 리턴하나 dic변수명[키값]은 KeyError를 리턴한다

        get이 더 좋은듯..

      - dict변수명.update도 있는데 이건 dict안에 여러 데이터를 한번에 갱신하는데 유용함. dict.update({'a':10, 'b':20'}) 이런식으로 두개의 item을 한번에..


    집합(set)

      - 수학의 집합 개념임. 형태는 딕셔너리에 키 값만 있는 것과 비슷하다. 키는 그 안에서 유일해야한다.

      - 키에 순서가 없다. 그래서 키를 set1 = { 1,2,3} 이렇게 넣어도 출력은 2,1,3 이렇게 나올 수 있다.

      - 수학 개념이라 교집합(&), 합집합( | ), 차집합 가능( - )

         결과물이 그거에 따른 것이 나옴.

      - set에 중복된 값을 넣어봤자 그 값을 한번만 갖고 있게 되기때문에 중복으로 들어가지 않는다.

        list나 튜플을 set의 생성자에 넣는다면 중복이 제거된 set을 얻게된다.


    튜플

      - 튜플은 리스트와 비슷하지만 변경할 수 없는 데이터 타입이다. 요소의 추가, 삭제, 변경을 할 수 없다. 그래서 절대로 변경되지 않는 데이터만 사용

      - 리스트와 비슷하지만 괄호 (( )) 로 열고 닫아서 선언한다는 점이 다르다.

      - 콤마로 구별되는 객체의 나열..괄호를 이용해서 튜플임을 좀 더 명확하게 하는 것이다.

      - 튜플을 비교하는 특정한 규칙이 있다. 먼저 인덱스 0으로 아이템을 비교하고 그 다음으로 인덱스 1, 다음은 인덱스2와 같이 진행한다.

    def sort_priority(values, group):
    def helper(x):
    if x in group:
    return (0, x)
    return (1, x)
    values.sort(key=helper)

    numbers = [8,3,1,2,5,4,7,6]
    group = {2,3,5,7}
    sort_priority(numbers, group)
    print(numbers)

    결과값

    [2, 3, 5, 7, 1, 4, 6, 8]

    helper함수에서 반환값이 튜플이 되고 그 반환값을 토대로 sort를 해버리니까..

    요소에 접근은 리스트와 똑같이 사용할 수 있다. : or ::도 사용가능함.

      - 빈튜플은 (), 요소가 한개인 튜플은 (123, ) 이렇게 표현함. 뒤에 반드시 ,가 붙어야한다.



    함수

      - 입력 파라미터 객체에 대해 레퍼런스를 생성하여 레퍼런스 값을 복사하여 전달한다.

      - c#과 동일하게 디폴트 매개변수, 이름지정 매개변수가 적용된다. 동일하다

      - 가변길이 매개변수도 있는데 *와 **의 차이점이 있다.

        * : 파라미터를 몇개 받을지 모른다. ** : 파라미터 명을 같이 보낼 수 있다. 딕셔너리 형태

        두가지의 형태를 같이 매개변수로 사용해도 결국 쓰이는건 각각 다르다. **는 키값같이. *는 자료하나..

    def print_param4(a,b,c):
    print(a,b,c)

    p = ['d','e','f']
    print_param4(*p)

    p2 = {'d':1, 'e':2, 'f':3}
    print_param4(**p2)

    위에 보면 응용으로 매개변수에 들어간 *p는 키값매칭 없이 들어간 순서대로 a,b,c의 매개변수가 d,e,f에 자동으로 출력되고.

    **p는 출력되지 않는다 이유는 해당 매개변수와 매칭되지 않기 때문인데 p2 = {'a':1, 'b':2, 'c':3} 이렇게 하면 된다. 그럼 출력은 abc의 값 1,2,3이 나온다

    물론 수정된 p2의 순서는 달라도 상관없다. 어차피 키값 매칭만 되면되기 때문에..


      - 리턴도 같으나 간혹 return 값1, 값2 ... 이런게 있느데 튜플로 변환해서 리턴하는것. 결국 하나만 리턴하는 형태다.

      

    클래스

    아래 2가지의 데코레이터의 차이점은?

      - @staticmethod

        : 우리가 생각하는 static 함수라고 생각하면 편하다. 근데 원래대로라면 인스턴스를 통해서 호출할 수 없는데 파이썬은 가능하다..

    근데 @staticmethod는 상속때 오버라이딩?? 이 안된다. 자식클래스에서 재정의한값들이 그냥 안나온다? 이렇다.

      - @classmethod

        : 자식클래스에서 재정의한 값이 나온다~

      - private 속성은 __ 밑줄 2개를 이름앞에 붙이면 함수든 변수든 적용된다.


    클래스 상속

      - 2.7에서는 베이스 클래스라도 표기를 해야한다 .class class이름(object)

        자식클래스에서는 class 클래스이름(상속받을 부모클래스)

        그리고 반드시 부모클래스의 내용을 사용하려면 초기화를 해야한다. super().__init__함수 호출



    모듈과 패키지

    모듈불러오기 : import 모듈이름

    특정 함수나 클래스만 불러오기 : from 모듈이름 import 특정함수 및 클래스


    모듈의 위치 검색 순서

      - 현재 디렉토리, 환경변수 PYTHONPATH에 지정된 경로, Python이 설치괸 경로 및 그 밑의 라이브러리 경로

        이 모든 경로들이 취합되어 sys.path에 리스트 형태로 저장된다. 만약 찾지 못하면 그떄 에러가 발생된다.

        sys.path를 사용하기위해선 import sys해야한다. 심지어 sys.path는 임의로 수정가능하다. 

        기존 sys.path에 새 경로를 추가하면 추가된 경로도 이후 모듈 검색에 포함된다.


    sys.path : 현재 검색경로 표시

    sys.path.append("추가경로")


    패키지 불러오기

    import 패키지이름.패키지/모듈이름.함수/클래스 이름

    from을 붙이면 사용할때 붙이는 이름을 줄일 수 있다.


    import models.account.bill

    models.account.bill.charge()


    from models.account import bill

    bill.charge()


    from models.account.bill import charge

    charge()






    '@ 17. 1 ~ 18 > 파이썬' 카테고리의 다른 글

    try/except/else/finally  (1) 2018.03.18
    파이썬 컴프리 헨션의 고려사항  (0) 2018.03.15
    문자열 서식  (0) 2018.03.14
    파이썬 리스트 관련  (0) 2018.03.14
    PEP8 스타일 가이드를 따르자  (0) 2018.03.12
Designed by Tistory.