'Programming > Django' 카테고리의 다른 글

Django Image Upload API TDD 삽질 여행기  (0) 2016.07.24
Django ImageField Upload를 AWS S3해보자  (0) 2016.07.15
honcho start using port  (0) 2016.07.07
Django Study Summary  (0) 2016.07.02
Django development Setting  (0) 2016.05.24
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

'git' 카테고리의 다른 글

git Merge에 대해서 알아보자.  (0) 2016.07.31
git stash 정의 및 사용법  (1) 2016.06.24
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

AWS SSL(letsencrypt) 세팅

AWS 2016. 7. 5. 22:46

'AWS' 카테고리의 다른 글

IAM is not authorized to cloudFormation:CreateStack  (0) 2016.11.21
AWS unbuntu 초기세팅  (0) 2016.07.05
AWS CodeDeploy Seoul Region Tutorials  (0) 2016.06.29
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

AWS unbuntu 초기세팅

AWS 2016. 7. 5. 22:42

'AWS' 카테고리의 다른 글

IAM is not authorized to cloudFormation:CreateStack  (0) 2016.11.21
AWS SSL(letsencrypt) 세팅  (0) 2016.07.05
AWS CodeDeploy Seoul Region Tutorials  (0) 2016.06.29
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

'AWS' 카테고리의 다른 글

IAM is not authorized to cloudFormation:CreateStack  (0) 2016.11.21
AWS SSL(letsencrypt) 세팅  (0) 2016.07.05
AWS unbuntu 초기세팅  (0) 2016.07.05
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

git stash 정의 및 사용법

git 2016. 6. 24. 00:47

'git' 카테고리의 다른 글

git Merge에 대해서 알아보자.  (0) 2016.07.31
Github organanization Repository Slack Intergration  (0) 2016.07.05
블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,

iTerm 개발환경 세팅

Mac 2016. 5. 22. 07:57

개발환경 세팅

iterm.png

Mac을 쓰는 개발자라면 좀 더 개발자(?)답게 보이기 위해서 콘솔창을 위와 같이 만드는것은 한번 해볼만 하다.
Git을 사용하기 전까지는 몰랐는데 Git을 사용하고 나니 정말 편하다 왜 모든 개발자들이 위와같이 세팅을 하는지 알거 같다.

Mac에서의 설치과정만 소개할 예정이다.

세팅 순서는 아래와 같이 진행하겠다.

  1. zsh 설치
  2. oh-my-zsh 설치
  3. agnoster & solarized theme 적용

zsh 설치

지금 부터 설명하는 세팅들은 iTerm이 설치되어있다는 전제하에 진행한다.

iTerm을 깔지 않았다면 iTerm에서 다운을 받기를 바란다.

일단 zsh가 깔려있는지 확인 하기 위해 아래와 같이 명령어을 입력해본다.

 zsh --version

위와 같이 입력했는데 zsh 버전이 안나온다면 아래와 같이 진행하면 된다.

 brew update 
 brew install zsh

기본쉘을 zsh쉘로 바꾸기 위해서는 아래와 같이 하면 된다.

  chsh -s $(which zsh)     #기본셀을 zsh로 바꾼다

설치가 완료되면 터미널 종료 후 재시작을 해서 기본이 zsh인지 확인한다.

이 zsh 장점은 강력한 tab-completion 이다. 설치해보고 몇번 써보면 바로 실감할것이다

oh-my-zsh 설치

oh-my-zsh를 참고한다.

이 과정은 git이 설치되어 있다는 전제하에 진행된다.

아래와 같이 command-line을 쳐준다.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

agnoster & solarized theme 적용

solarized사이트에 있는 theme를 적용할것이다.

적당한 경로를 잡은 후에 아래 명령으로 clone을 한다.

cd dev-setting  # 임의로 정한 경로
git clone git://github.com/altercation/solarized.git

clone한 폴더에 있는 파일을 iterm theme로 import 할 것이다.

iTerm -> Preferences -> profiles로 이동 한 후 import를 누른다.


좀 더 자세히 설명하고자 스크린샷을 첨부한다..

아래 스크린샷에 보이는대로 이동 후 import를 누른다.




import 할 파일은 위에 그림에 있는 Solarized Dark.itermcolors이다.

그리고 agnoster theme를 사용하기 위해서는 iTerm text Font를 아래와 같이 바꿔줘야 한다.

Font 주소로 가서 상단의 2개 폰트에 대해서 설치한다.

폰트까지 모두 변경하였으면 echo로 아래와 같이 쳤을때 그림과 같은 결과가 나와야 한다.

echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"

위와 같이 나온다면 축하한다! 이 세팅과정중에 90%는 한거다.

그러고 나서 cd ~로 이동 후 vim .zshrc로 들어가서 테마를 변경해준다.


오류 지적해주신 liseum님 감사합니다^^

#ZSH_THEHE = "robbyrussell" ZSH_THEHE = "agnoster"

터미널을 종료 후 git 폴더로 들어가면 맨 처음과 같은 화면이 뜰거다.

여기까지 따라오느냐고 수고했다. 박수 세번(짝)(짝)(짝)

인제 열심히 코딩 후 git에 commit하자

블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,


정의

함수에 Parameter가 여러개일 경우 함수 argument로 *args를 사용하면 여러개인 Parameter를 대응할 수 있다.
naming은 임의로 *dog, *cat 으로 지을수도 있지만, 관례적으로 *args를 쓰는 편이다.

설명

def test(*args):
    print(args)


>>> num_list = [1, 2, 3]
>>> print( test(*num_list) == test(1, 2, 3))
(1, 2, 3)
(1, 2, 3)
True

궁금중을 정리해보자

  1. test(*num_list) == test(1, 2, 3)가 어떻게 True를 반환하는 것인가?
  2. num_list를 그냥 넘기는게 아니라 왜 *num_list라고 앞에 *를 붙였나?

그럼 이 2가지 궁금증을 한꺼번에 풀 수 있는 예제를 들어보고자 한다.

일단 test2라는 함수를 만들고 그 함수의 Argument로 a, b, c를 받고 출력하는 간단한 함수를 만들어보면 아래와 같다.

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

이 test2라는 함수를 사용하기 위해서는 test2(1, 2, 3)와 같이 사용할 수 있다.

여기까지는 다른 웬만한 프로그래밍 언어랑 별반 차이가 없어 보인다.


하지만 여기서 Python의 Magic을 부려보자.

그 매직이란게 어떤거냐면 위에서 선언한 num_list라는 Parameter를 하나만 전달해서 에러없이 test2를 호출하는 것이다.


어떻게 이게 가능할까?


파이썬에서 Packing, UnPacking이라는 개념을 사용하면 된다.

차근차근 살펴보자

num_list을 가지고 test2를 호출할려고 하면 일단 아래와 같이 호출 할 수 있다.

>>> num_list = [1, 2, 3]

>>> test2(num_list[0], num_list[1], num_list[2])
print(1, 2, 3)

위와 같이 호출하면 문제없이 호출이 될 것이다.

하지만 위의 예제코드는 pythonic하지 않다.

pythonic하게 Refactoring를 해보면 아래와 같다.

>>> test2(*num_list)
print(1, 2, 3)

위와같이 호출하니깐 문제없이 잘 될것이다.

앞에 *가 붙는게 맨 처음을 test함수를 호출할때랑 같다.


이 과정을 설명해보자면

test2(*num_list)로 호출하면 num_list가 unpacking되어서 a=1, b=2, c=3으로 전달되어서 에러 없이 잘 실행되는 것이다.

그럼 *를 앞에 안붙이고 그냥 test2(num_list)를 하면 어떻게 될까?

>>> test2(num_list)
TypeError: test2() missing 2 required positional arguments: 'b' and 'c'

당연한 이야기 지만 2개의 필수 Arguments를 전달 안했다고 에러가 난다.

인제 함수를 호출할때 왜 *num_list라고 쓰는지 이해가 될 것이다.

그럼 인제 맨처음에 생겼던 궁금증을 정리해보자



test(*num_list) == test(1, 2, 3)가 어떻게 True를 반환하는 것인가?

  • test(*num_list라고 호출할때 *num_list로 인해 unpacking이 되어서 전달
  • *args로 인해 다시 packing되어서 출력되기 때문에 둘다 출력결과가 같으므로 True

num_list를 그냥 넘기는게 아니라 왜 *num_list라고 앞에 *를 붙였나?

  • unpacking해서 넘길려고


결론적으로 호출할때 unpacking 실행될때 packing이라고 보면 된다.

블로그 이미지

LeoHeo

어제보다 더 나은 개발자가 되고자 합니다. LeoHeo - 허진한

,