1) ->를 사용하지 않은 코드
(reduce (map (map xs bar) foo) baz)
2) ->를 사용한 코드
(-> xs (map bar) (map foo) (reduce baz))
  • 1번과 같은 중첩된 호출 대신에 2번과 같은 순차적인 호출로 표현할 수 있게 해준다.

  • 앞쪽의 함수의 호출 결과가 그 다음 호출의 첫번째 파라미터로 들어간다. (xs는 변수)


<테스트 환경>
 - OS : Windows 10
 - Leiningen 버전 : 1.0.0
,

의심스러운 파일를 업로드하면 다양한 바이러스 검사 엔진으로 검사한 결과를 보여줍니다.

https://www.virustotal.com/gui/home/upload


,

표준 라이브러리인 configparser를 사용하면 .INI 파일을 읽고 쓸 수 있다.



.INI 파일 쓰기

import configparser

config = configparser.ConfigParser()
config['AAA'] = {}                # 섹션을 생성한다
config['AAA']['BBB'] = 'CCC'      # 섹션 아래 실제 값을 생성한다
config['DEFAULT']['DDD'] = 'EEE'      # DEFAULT 섹션은 기본적으로 생성되어 있어 생성없이 쓸 수 있다

with open('config.ini', 'w') as configfile:
    config.write(configfile)

  • 1 Depth에 반드시 섹션을 생성한 후에 그 아래 값을 생성할 수 있다. (1 Depth에는 값을 생성할 수 없다)
  • Depth는 최대 2 Depth까지 가능하다. (2 Depth에는 섹션을 생성할 수 없다)


.INI 파일 읽기 (기본)

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

print("config['AAA']['BBB'] : " + config['AAA']['BBB'])


.INI 파일 읽기 (고급)

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

if not 'AAA' in config:           # 섹션이 존재하는지 체크
    print("config['AAA'] not exist")
   
if 'BBB' in config['AAA']:        # 섹션 아래 값이 존재하는지 체크
    print("config['AAA']['BBB'] : " + config['AAA']['BBB'])
else:
    print("config['AAA']['BBB'] not exist")
    
if 'DDD' in config['AAA']:        # 섹션 아래 값이 존재하는지 체크
    print("config['AAA']['DDD'] : " + config['AAA']['DDD'])
else:
    print("config['AAA']['DDD'] not exist")

  • Config 파일이 존재하지 않을 경우는, 에러가 나지 않고 단지 빈 맵으로 반환된다.(DEFAULT 섹션은 존재한다)


참고사항

<테스트 환경>
 - OS : Windows 10
 - Python 버전 : 3.7.5
,

인스턴스 메소드

  • 인스턴스에 대한 참조를 첫번째 파라미터로 받는다.
  • 정의 방법
  • class ClassName1:
      def method1(self, a, b, c):
        ...
    


정적(static) 메소드

  • 필수 파라미터가 없다.
  • 정의 방법
  • class ClassName2:
      @staticmethod
      def method2(a, b, c):
        ...
    


클래스 메소드

  • 클래스 정보 객체에 대한 참조를 첫번째 파라미터로 받는다.
  • 정의 방법
  • class ClassName3:
      @classmethod
      def method3(cls, a, b, c):
        ...
    
<테스트 환경> 
- OS : Windows 10 
- Python 버전 : 3.7.5
,

PATH

  • Emacs에서 M-x를 누른 후, shell을 입력하면, Emacs 내부에서 운영체제 Shell을 이용할 수 있는데, 여기에 적용되는 경로를 설정하는 것이다. (Shell에서 path를 입력하면 나오는 path 환경변수를 변경)
  • 최근의 윈도우 환경에서는 역슬래시/정슬래시 모두 지원하므로 둘다 사용가능하다.
  • path 환경변수에 덧붙여지는 것이므로 ;까지 포함하여 설정하여야 한다.
  • 설정 방법
    # 하나만 설정
    (setenv "PATH" (concat (getenv "PATH") ";/path/to/path1"))
    
    # 여러개를 설정
    (setenv "PATH" (concat (getenv "PATH") ";/path/to/path1;/path/to/path2"))
    


exe-path

  • Emacs에서 어떤 기능을 제공하기 위해 외부 프로그램을 찾는 경로이다. (예를 들면, 철자 검사, 파일 압축, 컴파일, grep, diff 등등)
  • 윈도우 환경에서도 정슬래시를 사용한다.
  • 설정 방법
    # 하나씩 원하는 만큼 추가하는 방식
    (add-to-list 'exec-path "/path/to/exe-path1")
    (add-to-list 'exec-path "/path/to/exe-path1")
    
    # 한꺼번에 추가하는 방식
    (setq exec-path (append '("/path/to/exe-path1" "/path/to/exe-path2") exec-path))
    
<테스트 환경>
- OS : Windows 10
- Emacs 버전 : Emacs 24.5.1 윈도우
,