AttackOnNunu

Once more into the fray


  • 홈

  • About

  • 태그

  • 카테고리

  • 아카이브

  • 검색

(Hexo_NexT_Theme) 블로그 백업

작성일 2020-02-14 In BLOG 🗂 , HEXO-NEXT-THEME 댓글:

Github에 모든 파일을 다 올렸다고 생각했는데,
막상 git clone 을 해보니 테마 파일이 빠져있음을 알게 되었다.


사라진 hexo-theme-NexT

연습삼아 모든 파일을 지우고 깃허브에 업로드한 데이터를 다운받고 실행시키는데 문제가 발생했다.

hexo 자체의 문제는 없고 특정 태그를 인식 못하는 것을 보고 테마 설정에 문제 있는 것을 인지하였다.

git clone 을 통해 다운받은 폴더를 살펴보니 hexo-theme-NexT 폴더 안 내용이 비어있음을 발견했다.

분명 .gitignore 파일에는 아무것도 작성하지 않고 모든 파일 및 디렉토리가 깃에 업로드 되도록 설정한 것 같은데,
themes 폴더 안의 hexo-theme-NexT 내용이 제대로 업로드 되지 않음을 이번에 알게 되었다.

임기응변으로 해결

그래서 다시 git clone https://github.com/theme-next/hexo-theme-next.git 을 통해 테마를 다운 받아 넣었는데,
원본에서 조금 커스터마이즈했던 설정들 때문에 정상적으로 작동이 되지 않았다.

_config.yml 파일의 내용을 하나하나 수정할 수 밖에 없는 것 같아서
혹시나 하고 백업 파일로 남겨둔 기존 데이터를 그냥 덮어씌우는 방식으로 문제를 해결했다.

(PYTHON) is 와 == 의 차이?

작성일 2020-01-31 In LANGUAGE 🚀 , PYTHON , TERMINOLOGY 댓글:

Reference

  • Is there a difference between “==” and “is”? - stackoverflow.com
  • The difference between ‘is’ and ‘==’ in Python - dbader.org
  • Python Operators - programiz.com
  • 페이스ID vs 일란성쌍둥이 - sisajournal.com

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다



이메일로 받아보는 [🐍PyTricks]에서 is 와 == 의 차이점에 대한 내용이 있길래 정리했습니다
아래 코드의 출력값이 본인의 예상과 다르거나 혹은 이해가 안 된다면 이번 기회에 확실히 짚고 넘어갑시다

>>> a = [1, 2, 3] >>> b = a

>>> a is b
True
>>> a == b
True

“is” vs “==” (위 아래의 차이점을 아시겠나요?)

# a = [1, 2, 3] >>> c = list(a)

>>> a is c
False
>>> a == c
True

Operators in Python

둘의 차이점을 알아보기 전에 Python의 연산자들에는 어떤 것들이 있는지 큰 틀만 알아보겠습니다
자세한 내용은 다음에 기회가 있으면 정리하겠습니다


> > > x + y
> > > 9
> > >
  • 여기서 x와 y는 피연산자(operand) 라고 부르고 그 사이 +가 연산자(operator) 가 됩니다
    위 예제의 덧셈 연산자 외에도 파이썬에는 다양한 연산자들이 존재합니다

Python Operators

  • Arithmetic operators
    • +, -, *, /, %, //, **
  • Comparison operators
    • >, <, ==, !=, >=, <=
  • Logical(Boolean) operators
    • and, or, not
  • Bitwise operators
    • &, |, ~, ^, >>, <<
  • Assignment operators
    • =, +=, -=, *=, /=, %=, //=, **=, &=, |=, ^=, >>=, <<=
  • Special operators (Python에서 제공하는 특별한 연산자들) - Identity operators - is, is not - Membership operators - in, not in

Equality Comparison Operators

Python에서는 같음을 비교(equality comparison)할 때 ==와 is 2가지 연산자(operator)를 사용할 수 있습니다
결론부터 이야기하면 두 연사자의 차이점은 Equality 와 Identity 의 비교라는 것 입니다

요즘 최신 스마트폰은 대부분 ‘페이스ID’ 기능을 제공하고 있습니다.
이전의 ‘터치ID’의 인식 오류 확률인 1/50000 보다 20배 성능이 뛰어난 1/1000000의 확률로 훨씬 보안이 뛰어나다고 알려져 있습니다
하지만 정말 똑같이 생긴 일란성 쌍둥이가 있을 때 페이스ID의 보안은 쉽게 뚫리지 않을까 하는 의구심이 들지 않나요?

쉽게 생각해서 페이스ID의 원리는 스마트폰에 등록된 얼굴 데이터와 카메라, 적외선 센서 등으로 입력되는 데이터를 비교하는 것 입니다
일란성 쌍둥이가 너무 똑같이 생겨서 입력되는 데이터 값이 거의 똑같다면 이론상 페이스ID로 서로의 스마트폰 잠금을 해제할 수 있을 것 입니다
이처럼 두 데이터가 같은 값(value)을 가지는지 비교하는 것을 Equality comparison 이라고 합니다

하지만 아무리 일란성 쌍둥이라고 해도 두 사람은 엄밀히 다른 사람입니다
간단하게는 주민등록 번호 등으로 구분할 수 있고, 한쪽만 가지고 있는 점이나 흉터 등과 같은 차별적인 특징으로도 구분할 수 있을 것 입니다
각 사람마다의 고유성(Identity)을 구분하는 것을 Identity comparison 이라고 합니다

파이썬에서 두 피연산자들의 데이터 혹은 값이 같은지를 비교하고 싶을 때, == 연산자를 사용하고
고유값(파이썬에서는 객체마다 고유한 상수 ‘id’값을 가집니다)을 비교하고 싶을 때, is 연산자를 사용합니다

동등성 Equality ==

  • 피연산자들의 데이터/값(value) 이 같은지를 비교합니다

> > > a = [1, 2, 3]
> > > b = a

> > > a is b
> > > True
> > > a == b
> > > True

동일성 Identity is

  • 피연산자들의 주소/고유한 상수(ID) 가 같은지 비교합니다

id() 의 반환값이 실제 메모리상의 주소는 아닙니다
하지만 해당 객체를 가리키는 유일한 상수입니다


# a = [1, 2, 3]

> > > c = list(a)

> > > a is c
> > > False
> > > a == c
> > > True
  • is 연산자는 객체(object)의 id값을 == 연산자로 확인하는 것이라고 생각하시면 됩니다

> > > a is c
> > > False
> > > id(a) == id(c)
> > > False

결론

is 연산자는 다음 2가지 상황에서만 사용하는 것을 권장

  • 피연산자들이 같은 객체 인지 확인할 때
  • 객체가 True, False, None 와 같은 파이썬 상수와 비교할 때


(PYTHON) Namespace

작성일 2020-01-24 In LANGUAGE 🚀 , PYTHON , TERMINOLOGY 댓글:

Reference

  • 옥스포드 사전? - lexico.com
  • 위키피디아 ‘네임스페이스’ - wikipedia.org
  • 이름공간이란? - 파이썬 프로그래밍 입문서

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다



Namespace?

생각보다 네임스페이스라는 용어를 자주 접하게 되어서 이참에 명확하게 정리해두고자 작성하게 되었습니다

NOUN
Computing
A class of elements (e.g. addresses, file locations, etc.) in which each element has a name unique to that class, although it may be shared with elements in other classes.

네임스페이스는 단어 그대로 name과 space가 합쳐져 이름을 가지는 공간이라는 뜻으로 컴퓨터학에서 사용되는 용어입니다

쉽게 생각해서 어느 학교(프로그램)에 민수(객체)라는 이름을 가진 학생이 2명이 있다고 했을 때,
선생님이 그냥 “민수야 이것 좀 해봐” 라고 하면 둘 중 어느 민수를 지칭하는 건지 모릅니다
하지만 한 명의 민수는 1반에 속해있고 다른 민수는 8반에 속해있다고 하면 둘을 구분 지을 수 있습니다
여기서는 반이 네임스페이스의 역할을 한다고 볼 수 있습니다

또 다른 예시로는,
‘python’ 이라는 용어는 컴퓨터학에서는 프로그래밍 언어 를 말하며 ‘파이썬’이라고 읽히지만
그리스 신화에서는 델토이 신탁소를 지배하는 거대한 뱀 을 가리키며 고대 그리스어로 ‘피톤’이라고 읽습니다
동물사전에는 비단 뱀 으로 정의됩니다 (google에서 이미지로 검색하면 비단 뱀 사진이 압도적으로 많습니다)

파이썬 아이콘이 뱀 모양이기도 해서 오해할 수 있지만, 파이썬 언어의 창시자 귀도 반 로썸(Guido van Rossum)은 자신이 좋아하는 영국 코미디 프로인 ‘몬티 파이선의 날아다니는 서커스(Monty Python’s Flying Circus)’에서 영감을 얻었다고 합니다

이렇게 한 단어 ‘python’은 여러 의미를 가지고 있는데 우리가 이들을 구분할 수 있는 이유는 무엇일까요?
본능적으로 알 수 있듯이, ‘python’이 컴퓨터 의 네임스페이스에 있으면 프로그래밍 언어 로,
그리스 신화 의 네임스페이스에 있다면 거대한 뱀 으로, 동물사전 이라는 네임스페이스면 비단 뱀 으로
우리는 인식할 수 있습니다.


C++에서의 Namespace

개인적으로 저는 C언어를 처음 배울 때 잘 몰라도 그냥 #include <stdio.h>를 입력 했었고,
C++를 처음 배울 때도 일단 모르겠지만 using namespace std를 입력 했었던 것 같습니다

#include <iostream>

// This is how one brings a name into the current scope. In this case, it's
// bringing them into global scope.
using std::cout;
using std::endl;

namespace box1 {
int box_side = 4;
}

namespace box2 {
int box_side = 12;
}

int main() {
int box_side = 42;
cout << box1::box_side << endl; // Outputs 4.
cout << box2::box_side << endl; // Outputs 12.
cout << box_side << endl; // Outputs 42.
}

Python에서의 Namespace

파이썬에서는 각각의 모듈(module)들이 네임스페이스 역할을 합니다.
모듈이 계층적인 패키지들에 속해있기 때문에 네임스페이스 또한 계층적인 성격을 띕니다.

  • 예를 들어, 2개의 함수 func1()과 func2() 그리고 1개의 클래스 class1을 가지는 모듈이 있다고 가정해 봅시다
    모듈을 전체를 import하면 함수와 클래스 모두 잘 작동하는 것을 볼 수 있습니다


    # assume module a defines two functions : func1() and func2() and one class : class1

    import modulea

    modulea.func1()
    modulea.func2()
    a = modulea.class1()
  • 하지만 모듈 내의 특정한 함수만 import하면 현제 작업하고 있는 네임스페이스에는 func2() 함수와 class1이 없는 것으로 인식됩니다


    # assume modulea defines two functions : func1() and func2() and one class : class1

    from modulea import func1

    func1()
    func2() # this will fail as an undefined name, as will the full name modulea.func2()
    a = class1() # this will fail as an undefined name, as will the full name modulea.class1()
  • 간혹 모듈의 이름이 너무 길어서 짧게 쓰고 싶을 때, import ... as ... 를 통해 임의로 이름을 바꿀 수 있습니다

    import numpy as np
    a = np.arange(1000)
1…131415…33
NUNU

NUNU

개인적으로 공부하면서 정리한 내용들을 블로그에 남기고 있습니다.
99 포스트
18 카테고리
53 태그
RSS
Creative Commons
© 2021 NUNU
Powered by Hexo v3.9.0
|
Theme – NexT.Mist v7.2.0