1월, 2019의 게시물 표시

파이썬 한글 인코딩(UTF8, Unicode, Euc-Kr) 탐구

파이썬 한글 인코딩(UTF8, Unicode, Euc-Kr) 탐구  출처: https://redscreen.tistory.com/163 [RedScreen]

파이참에서 인터프리터 꼬인 경우 처리

이미지
아나콘다를 재설치 후 파이참을 실행하는데 자꾸 실패한다. 실행시 사용되는 파이썬 위치도 뭔가 이상하다. 어떻게 설정했는지 모르겠지만 이전에 인터프리터 설정을 가상환경으로 설정을 해서 문제가 발생했다. Files -> Settings 선택하면 Setting 팝업이 나온다. 메뉴 중  Project: source -> Project Interpreter를 선택한 후 우측 상단 톱니 바퀴를 클릭하면 Project에서 사용할 Interpreter를 추가하여나 삭제, 변경할 수 있다. Add를 누르면 아래처럼 팝업이 보여지고 왼쪽에 4가지 항목이 나온다.  첫 번째 Virtualenv Environment는 시스템 인터프리터 이외 필요한 실행 환경을 만들어 사용할 수 있도록 지정하는 항목이다.  내가 어떻게 했는지 기억나지 않지만 가상 환경을 만들고 사용하도록 해서 하다 해당 위치를 삭제하고 System Interpreter를 사용하도록 변경하였다.  그런데 변경 후에도 System Interpreter가 비어있다고 나오고 Virtualenv Environment로 지정되는 현상이 발생했다.  Virtualenv Environment 폴더가 있으면 Virtualenv Environment을 우선으로 하는 것 같아서 파이참을 닫고 해당 폴더를 삭제하고 다시 System Interpreter으로 설정하였다.  정상적으로 설정되어 그전에 실행하던 파일을 실행하니 실행되지 않는다.  실행되는 Interpreter를 확인하니 Virtualenv Environment에서 사용하던 Interpreter 이다.  Run -> Edit Configurations 를 클릭하면 아래 팝업이 나온다.  Python interpreter 에 기존 Virtualenv Environment의 interpreter가 설정되어 있었다.  전체 interpreter를 변경해도 기존 설정은 변경되

python 함수 관련 정리

함수는 이름이 붙여진 코드 조각이고 다른 것으로부터 분리되어 있다. 함수는 입력 매개변수로 모든 타입을 여러 개 취할 수 있고 반환값으로도 모든 타입을 여러 개 반환할 수 있다. 함수를 사용하기 위해서는 정의하기 와 호출하기   2가지 작업을 수행해야 한다. 함수 정의는 다음과 같고 이후 내용은 들여쓰기를 해야한다. def 함수 이름() : 함수 이름은 변수 이름과 동일한 규칙이다. 이름의 첫 글자는 영문자나 언더스코어이고 이름은 영문자, 숫자, 언더스코어만 사용할 수 있다. 함수로 전달한 값을 인자라고 한다. 인자와 함수를 호출하면 인자의 값은 함수 내에서 해당하는 매개변수에 복사된다. 함수 인자에 대한 내용은 아래에 정리했고 나머지 사항에 대한 정리이다. https://cbjsena.blogspot.com/2019/01/python.html 1. docstring 함수 몸체 시작 부분에 문자열을 포함시켜 함수 정의에 문서를 붙일 수 있다.  def echo (thing): 'echo returns its input argument' print (thing) help (echo) --------------------------------------- Help on function echo in module __main__: echo(thing) echo returns its input argument '''을 이용해 는 여러 줄을 입력할 수도 있다.  서식없는 docstring을 보고 싶다면 print(함수 이름.__doc__) 를 입력하면 된다. 2. 모든 것이 가능한 함수 파이썬의 철학은  모든 것이 객체다 이다. 객체는 숫자, 문자열, 튜플, 리스트, 딕셔너리, 그리고 함수를 포함한다.  함수를 변수에 할당할 수 있고, 다른 함수에서 인자로 사용가능하며, 함수에서 이를 반환할 수 도 있다.  def answer ():

python 함수의 인자

Introducing Python 책을 보면서 필요한 내용을 정리한 글이다. 파이썬은 다른 언어에 비해 함수의 인자를 유연하게 처리한다. 1. 위치 인자 가장 익숙한 형태이다. 함수 선언에서 지정된 위치에 함수 사용 시 인자를 넣어준다. 각 위치에 맞는 인자를 넣어야만 한다. 그렇지 않다면 의도하지 않은 결과가 나온다. def menu (wine , entree , dessert): return { 'wine' : wine , 'entree' : entree , 'dessert' : dessert} print (menu( 'chardonnay' , 'chicken' , 'cake' )) print (menu( 'cake' , 'chardonnay' , 'chicken' )) {'wine': 'chardonnay', 'entree': 'chicken', 'dessert': 'cake'} {'wine': 'cake', 'entree': 'chardonnay', 'dessert': 'chicken'} 2. 키워드 인자 위치 인자의 혼동을 피하기 위해 매개변수에 상응하는 이름을 인자에 지정할 수 있다. 호출 시 인자를 정의 순서와 다르게 호출 가능하다. 위치 인자와 키워드 인자 함께 호출한다면 위치 인자가 먼저 와야 한다. 호출 시 대응하는 인자를 제공하지 않는다면 기본값을 사용한다. 기본값이 없는데 대응하는 인자가 없다면 에러가 발생한다. def menu (wine = 'red' , entree = 'beef' , dessert = 'tea' ): return {

python Comprehension

1. List comprehension 숫자 시퀀스를 만드는 가장 기본적인 방법은 range() 함수와 for 문을 사용하면 된다. for i in range ( 1 , 6 ): numbers.append(i) 또는 리스트에 직접 range()를 넣을 수도 있다.  numbers = list ( range ( 1 , 6 )) 파이썬에서는 리스트 컴프리헨션을 사용해서 만드는 것을 추천하는 것 같다. [표현식 for 항목 in 순회 가능한 객체] numbers = [i for i in range ( 1 , 6 )] 리스트 컴프리헨션은 조건 표현식을 포함할 수도 있다.  [표현식 for 항목 in 순회 가능한 객체 if 조건] 1~10 중 짝수만 저장하는 리스트는 다음과 같이 만들 수 있다. even = [i for i in range ( 1 , 11 ) if i % 2 == 0 ] 또한 리스트 컴프리헨션에 루프를 중첩할 수 도 있다. numbers = [(i , j) for i in range ( 1 , 5 ) if i % 2 == 1 for j in range ( 1 , 5 ) if j % 2 == 0 ] (1, 2) (1, 4) (3, 2) (3, 4) 그리고 중첩된 루프에서도 역시 조건절이 사용 가능하다. numbers = [(i , j) for i in range ( 1 , 11 ) if i % 2 == 1 for j in range ( 1 , 11 ) if j == i + 1 ] (1, 2) (3, 4) (5, 6) (7, 8) (9, 10) 2. Dictionary comprehension 리스트와 마찬가지로 딕셔너리 또한 컴프리헨션이 있다. {키 표현식 :  값 표현식 for 표현식 in 순회 가능한 객체} 물론 if와 중첩 루프도 가능하다.

Python List 관련 시간 테스트

리스트에 항목을 추가하거나 삭제할 때 시간 비교 테스트 소스와 결과이다. 먼저 리스트에 항목을 추가할 때 append 함수 사용과 value를 직접 입력할 때의 비교이다. def make_list_append (): result = [] for value in range (rng): result.append(value) return result def make_list_value (): result = [value for value in range (rng)] return result print ( 'make app:' , timeit(make_list_append , number = 100 ) , 'sec' ) print ( 'make val:' , timeit(make_list_value , number = 100 ) , 'sec' ) make app: 0.18112610427645098 sec make val: 0.06325183058769349 sec value를 직접 입력하는게 2개 이상 빠르다. 다음은 삭제 시 del 함수와 remove 함수 비교 이다. 참고로 del은 리스트 함수가 아니고 파이썬 구문이다. 객체로부터 이름을 분리하고 객체의 메모리를 비워준다. def make_list_del (): result = make_list_value() for value in range ( len (result)): del result[- 1 ] return def make_list_remove (): result = make_list_value() for value in range ( len (result)): result.remove(value) return print ( 'make del:' , timeit(make_lis