on
Python
pyenv, virtualenv, iPython설치 및 설정
pyenv
pyenv는 프로젝트별로 파이썬 버전을 따로 관리할 수 있도록 도와주는 라이브러리이다.
여러 프로젝트를 동시에 진행하다보면, 어떤 프로젝트에서는 2.7을, 어떤 프로젝트에서는 3.4를 사용하는 식으로 다양한 버전의 사용할 수도 있고, 각각에 설치된 라이브러리간 충돌이 일어날 수도 있는데, 이러한 파이썬 버전간의 충돌을 방지하기 위해 사용한다.
virtualenv
virtualenv는 파이썬 개발환경을 프로젝트별로 분리해서 관리할 수 있게 해주는 라이브러리이다.
위의 pyenv와 다른점은, pyenv는 파이썬의 버전을 관리해주는 것이며, virtualenv는 파이썬 패키지 설치 환경을 따로 관리한다.
pyenv-virtualenv
위의 pyenv제작자가, pyenv를 사용할 경우 쉽게 virtualenv를 사용할 수 있도록 만든 라이브러리.
pyenv 설치
-
맥
brew install pyenv
brew install pyenv-virtualenv
-
리눅스
https://github.com/yyuu/pyenv-installer
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
vim설치 (리눅스만)
sudo apt-get install vim
기본 셸 변경
zsh
http://theyearlyprophet.com/love-your-terminal.html
리눅스
sudo apt-get install zsh
curl -L http://install.ohmyz.sh | sh
chsh -s `which zsh`
맥
brew install zsh zsh-completions
curl -L http://install.ohmyz.sh | sh
chsh -s `which zsh`
chsh: /usr/local/bin/zsh: non-standard shell
오류 발생할 경우sudo vim /etc/shells 맨 아래에 `which zsh`했을때의 결과를 추가 후 저장
현재 shell 확인법
echo $SHELL
pyenv 설정
- 설치 후 pyenv관련 설정을 shell설정에 추가
- 맥
vi ~/.zshrc
- 리눅스
vim ~/.zshrc
- 맥
맥
export PYENV_ROOT=/usr/local/var/pyenv if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
리눅스
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
pyenv 기본 루트폴더는 ~/.pyenv
!!pyenv설정을 shell의 설정파일에 기록 후, 터미널을 재시작하거나 source ~/.zshrc
또는 source ~/.zsh_profile
을 실행
-
파이썬 설치 전 필요 패키지 설치
https://github.com/yyuu/pyenv/wiki/Common-build-problems
파이썬 셸 관련 설정 (macOS)
셸에서 방향키 관련 이슈 해결을 위한 유틸리티 설치
관련 유틸리티 설치 (readline, xz)
brew install readline xz
-
pyenv를 사용해서 파이썬 3.4.3버전 설치
pyenv install 3.4.3
pyenv 사용
가상환경 생성
pyenv virtualenv <version> <env_name>
pyenv virtualenv 3.4.3 fc-python
입력
사용할 폴더로 이동
cd projects
mkdir python
cd python
local에 가상환경 지정
pyenv local fc-python
가상환경 지우기
pyenv uninstall <env_name>
-
iPython
기본 파이썬 셸보다 다양한 기능을 사용할 수 있도록 해주는 셸을 제공해줌
iPython 설치
pip install ipython
커맨드라인에서 ipython
실행
-
vi 단축키
shift + g
: 가장 아래로
shift + a
: 현재 줄에서 가장 마지막으로
출처 : https://github.com/Fastcampus-WPS-6th/Python/blob/master/01.%20pyenv%2C%20virtualenv%2C%20iPython%20%EC%84%A4%EC%B9%98%20%EB%B0%8F%20%EC%84%A4%EC%A0%95.md
변수
-
파이썬은 모든것(정수, 문자열, 함수 등)이 객체(Object)로 이루어져 있다. 객체는 데이터의 형태를 결정해주는 타입으로, 파이썬에서는 객체의 타입을 바꿀 수 없다. 프로그래머는 변수를 선언하고 사용하는 형태로 컴퓨터의 메모리에 값을 할당하고, 참조할 수 있다. 파이썬에서는 값을 할당할때 =기호를 사용한다.
-
변수의 타입 확인 ```
type(var1)
<class ‘int’>
* 변수의 이름 제한
소문자 대문자 숫자 언더스코어(_)
이름은 숫자로 시작할 수 없으며, 언더스코어로 시작하는 변수명은 특별한 처리방법을 따르므로 일반적으로 사용하지 않는다.
# 숫자
* 수학연산자
연산자 |설명 |예 |결과
---- | ---- | ----| ----
+| 더하기| 32 + 7 |39
- |빼기 |82 - 2 |80
* |곱하기 |3 * 7 |21
/ |나누기 |7 / 2 |3.5
// |정수나누기 |7 // 2| 3
% |나머지 |7 % 3 |1
** |지수 |2**10 |1024
* 산술 연산자 결합
아래의 결과는 모두 같다.
a = 100 result = a - 3 a = result print(a) 97
a = 100 a = a - 3 print(a) 97
a = 100 a -= 3 print(a) 97 ```
- 진수 2진수(binary): 0b또는 0B로 시작 8진수(octal): 0o또는 0O로 시작 16진수(hex): 0x또는 0X로 시작
>>> 10
10
>>> 0b10
2
>>> 0o10
8
>>> 0x10
16
문자열
- 문자열
파이썬3에서는 문자열에서 기본적으로 유니코드(Unicode)를 사용하며, 불변(immutable)한다.
- 문자열 표현
작은 따옴표 또는 큰 따옴표
>>> '패스트캠퍼스'
'패스트캠퍼스'
>>> "패스트캠퍼스"
'패스트캠퍼스'
세 개의 작은 따옴표 또는 큰 따옴표 여러줄에 걸친 문자열을 나타낼 때 사용
>>> '''소환사 여러분.
...
... 7.1 패치를 소개합니다.
...
... 앞으로 있을 여러 번의 패치에 대해서는 차차...
... 하지만 그렇다고 이번 패치가 하향....
... 정의의 전장에서 승리를 기원합니다.'''
- 이스케이프 문자
특수문자, 또는 특별한 역할을 하는 의미를 나타내는 문자를 뜻한다.
이스케이프 문자 | 설명 |
---|---|
\a | 비프음 발생 |
\t | 탭(tab) |
\n | 줄바꿈 |
\ | (역슬래시) 입력 |
' | 작은따옴표(‘) 입력 |
" | 큰따옴표(“) 입력 |
- 인덱스 연산
문자열에서 문자를 추출하기 위해 대괄호와 오프셋을 지정할 수 있다. 가장 왼쪽은 0이며, 가장 오른쪽은 -1로 시작한다.
>>> lux = '빛으로 강타해요!'
>>> lux[0]
'빛'
>>> lux[-1]
'!'
>>> lux[50]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
- 슬라이스 연산
[:]
처음부터 끝까지
[start:]
start오프셋부터 마지막까지
[:end]
처음부터 end오프셋까지
[start:end]
start오프셋부터 end오프셋까지
[start:end:step]
start오프셋부터 end오프셋까지, step만큼씩 뛰어넘은 부분
- 문자열 나누기
문자열의 내장함수 split을 사용 split함수에 인자로 주어진 구분자를 기준으로 하나의 문자열을 리스트 형태로 반환해준다.
>>> girlsday = "민아,유라,소진,혜리"
>>> girlsday.split(',')
['민아', '유라', '소진', '혜리']
- 문자열 결합
split 함수와 반대의 역할을 한다. 문자열 리스트를 하나의 문자열로 결합해주며, 각 문자열을 결합해줄 구분자 문자열을 지정한 후 join함수를 사용해준다.
>>> girlsday_list = girlsday.split(',')
>>> girlsday_str = ', '.join(girlsday_list)
>>> print(girlsday_str)
민아, 유라, 소진, 혜리
- 포맷 최신 스타일
{}.format(변수)
# 기본형태
>>> '{} {} {}'.format(d, f, s)
'37 3.14 Fastcampus'
# 각 인자의 순서를 지정
>>> '{1} {2} {0}'.format(d, f, s)
'3.14 Fastcampus 37'
# 각 인자에 이름을 지정
>>> '{d} {f} {s}'.format(d=50, f=1.432, s='WPS')
'50 1.432 WPS'
# 딕셔너리로부터 변수 할당
>>> dict = {'d': d, 'f': f, 's': s}
>>> '{0[d]} {0[f]} {0[s]} {1}'.format(dict, 'WPS')
'37 3.14 Fastcampus WPS'
# 타입 지정자 입력
>>> '{:d} {:f} {:s}'.format(d, f, s)
'37 3.140000 Fastcampus'
# 이름과 타입지정자를 모두 사용
>>> '{digit:d} {float:f} {string:s}'.format(digit=700, float=1.4323, string='Welcome')
'700 1.432300 Welcome'
# 필드길이 10, 우측정렬
>>> '{:10d}'.format(d)
' 37'
>>> '{:>10d}'.format(d)
' 37'
# 필드길이 10, 좌측정렬
>>> '{:<10d}'.format(d)
'37 '
# 필드길이 10, 가운데 정렬
>>> '{:^10d}'.format(d)
' 37 '
# 필드길이 10, 가운데 정렬, 빈 공간은 ~로 채움
>>> '{:~^10d}'.format(d)
'~~~~37~~~~'
시퀀스
- 시퀀스 타입
파이썬에 내장된 시퀀스 타입에는 문자열, 리스트, 튜플이 있다. 문자열은 인용부호(작은따옴표, 큰따옴표)를 사용하며, 리스트는 대괄호[], 튜플은 괄호()를 사용하여 나타낸다. 시퀀스 타입의 객체는 인덱스 연산을 통해 내부 항목에 접근 할 수 있다.
- 리스트의 생성
>>> empty_list1 = []
>>> empty_list2 = list()
>>> sample_list = ['a', 'b', 'c', 'd']
>>> sample_list2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
- list 함수를 사용해서 다른 데이터를 리스트로 변환할 수 있다.
>>> list('League of legends')
['L', 'e', 'a', 'g', 'u', 'e', ' ', 'o', 'f', ' ', 'l', 'e', 'g', 'e', 'n', 'd', 's']
- 리스트 항목 추가
>>> sample_list.append('e')
>>> sample_list
['a', 'b', 'c', 'd', 'e']
- 리스트 병합
>>> fruits = ['apple', 'banana', 'melon']
>>> colors = ['red', 'green', 'blue']
>>> fruits.extend(colors)
>>> fruits
['apple', 'banana', 'melon', 'red', 'green', 'blue']
>>> fruits = ['apple', 'banana', 'melon']
>>> colors = ['red', 'green', 'blue']
>>> fruits += colors
>>> fruits
['apple', 'banana', 'melon', 'red', 'green', 'blue']
- 특정 위치 리스트 항목 삭제 (del)
del은 리스트 함수가 아닌, 파이썬 구문이므로 del <리스트>[오프셋] 형식을 사용한다.리스트>
>>> del fruits[0]
값으로 리스트 항목 삭제 (remove)
>>> fruits.remove('mango')
리스트 항목 추출 후 삭제 (pop)
>>> fruits.pop()
>>> fruits.pop(-3)
값으로 리스트 항목 오프셋 찾기 (index)
>>> fruits.index('red')
- 정렬하기
sort는 리스트 자체를 정렬 sorted는 리스트의 정렬 복사본을 반환
-
리스트 복사 (복사해서 새로운 리스트로 만듦) copy함수 list함수 슬라이스 연산[:]
-
튜블
튜플은 리스트와 비슷하나, 정의 후 내부 항목의 삭제나 수정이 불가능하다.
- 튜플 생성방법 3가지
>>> empty_tuple = ()
>>> colors = 'red',
>>> fruits = 'apple', 'banana'
튜플을 정의할 때는 괄호가 없어도 무관하나, 괄호로 묶는것이 좀 더 튜플임을 구분하기 좋다. 또한, 튜플의 요소가 1개일 때는 요소의 뒤에 쉼표(,)를 붙여야 한다.
- 튜플 언패킹
>>> f1, f2 = fruits
딕셔너리
- 딕셔너리
Key-Value형태로 항목을 가지는 자료구조.
- 딕셔너리 생성
>>> empty_dict1 = {}
>>> empty_dict2 = dict()
>>> champion_dict = {
... 'Lux': 'the Lady of Luminosity',
... 'Ahri': 'the Nine-Tailed Fox',
... 'Ezreal': 'the Prodigal Explorer',
... 'Teemo': 'the Swift Scout',
... }
- 결합
>>> item_dict = {
... 'Doran\'s Ring': 400,
... 'Doran\'s Blade': 450,
... 'Doran\'s Shield': 450,
... }
>>> com_dict = {}
>>> com_dict.update(champion_dict)
>>> com_dict.update(item_dict)
>>> com_dict
- 삭제
>>> del com_dict['Doran\'s Blade']
>>> del com_dict['Doran\'s Ring']
>>> del com_dict['Doran\'s Shield']
- 셋
셋은 키만 있는 딕셔너리와 같으며, 중복된 값이 존재할 수 없다.
- 셋 생성
>>> empty_set = set()
>>> champions = {'lux', 'ahri', 'ezreal'}
- 형변환
문자열, 리스트, 튜플, 딕셔너리를 셋으로 변환할 수 있으며, 중복된 값이 사라진다.
>>> set('ezreal')
{'e', 'z', 'a', 'l', 'r'}
딕셔너리는 키만 남는다.
>>> set(champion_dict)
{'Ahri', 'Lux', 'Ezreal', 'Sona', 'Teemo'}
- 집합 연산
연산자 | 설명 |
---|---|
shift+\ | 합집합(Union) |
& | 교집합(Intersection) |
- | 차집합(Difference) |
^ | 대칭차집합(Exclusive) |
<= | 부분집합(Subset) |
< | 진부분집합(Proper subset) |
>= | 상위집합(Superset) |
> | 진상위집합(Proper superset) |
>>> A = {1,2,3,4,5}
>>> B = {4,5,6,7,8,9}
>>> C = {4,5,6}
>>> A|B
>>> A&B
>>> A-B
>>> B-A
>>> A^B
>>> A <= B
>>> C <= B
>>> C < B
>>> B <= B
>>> B < B
3항연산자
파이썬에서는 3항 연산자를 다루는 방법이 2가지 있다. 첫 번째 방법은 if와 else를 이용하는 것, 두 번째 방법은 and와 or를 이용하는 것이다.
- and, or 3항연산자의 기본 사용법은 다음과 같다.
condition and A or B
condition이 True면 A 연산이 return 되고, condition이 False면 B 가 return 된다.
- if else를 이용한 3항연산자의 기본 사용법은 다음과 같다.
A if condition else B
condition이 True면 A 연산이 return 되고, condition이 False면 B 가 return된다.