Julia, JavaScript, Lua 및 기타 언어로 된 Python의 "with as"문

with asPython 의 기능 을 이해하는 데 어려움 중 하나는 Python 언어의 한계에 대해 더 깊이 이해하지 않는 한 그 필요성이 분명하지 않습니다.

예를 들어 Ruby, Julia, Lua, Go, JavaScript 또는 Swift 개발자는이 문을 추가 할 필요가 없습니다. 왜 그런 겁니까?

문제의 핵심은 많은 Python 개발자가 소중히 여기는 기능입니다. 코드 블록을 표시하기 위해 들여 쓰기를 사용하는 것입니다.

JavaScript에서 예를 들어 작성할 수 있습니다.

openfile('foobar.txt', function(file) {
  // called after file has been opened
  // file is a handle to the open file
  read_data(file)
  ...
});

openfile("foobar.txt", function(file)
  -- called after file has been opened
  -- file is a handle to the open file
  read_data(file)
  ...
end)

openfile("foobar.txt", def (file):
  # called after file has been opened
  # file is a handle to the open file
  read_data(file)
  ...

이는 들여 쓰기의 변경보다는 코드 블록의 끝을 알리는 기호를 갖는 이점을 보여줍니다.

자원 할당 및 정리를 위해 마감과 함께 고차 함수 사용

인라인 멀티 라인 클로저를위한 친숙한 구문을 갖는 이점에 대해 자세히 살펴 보겠습니다. JavaScript, Lua 및 기타 여러 언어가 잘 작동하지만 Julia 코드 예제로 설명하겠습니다.

function openfile(callback, filename::String)
		file = open(filename)
    callback(file)
    close(file)
end

openfile(file -> print(readline(file)), "foobar.txt")

openfile("foobar.txt") do file
		print(readline(file))
end

파일을 열고 닫는이 방법의 장점은 파일을 닫는 것을 잊지 않는다는 것입니다.

Python 솔루션

설명했듯이 Python에서 구문을 동일하게 달성하는 것은 어렵습니다. 따라서 with-as발명되었습니다. 이전 예제가 Python에서 어떻게 구현되는지 보여 드리겠습니다.

class openfile:
   def __init_(self, filename):
       self.filename
   def __enter__(self):
       self.file =  open(self.filename)
       return file
   def __exit__(self, exc_type, exc_val, exc_tb):
       close(self.file)

이 클래스를 사용하여 다음과 같은 방식으로 파일을 열고 읽을 수 있습니다.

with openfile("foobar.txt") as file:
  print(readline(file))

  1. 먼저 openfile클래스 생성자가 호출되고 열고 자하는 파일의 이름을 저장합니다.
  2. openfile클래스 의 인스턴스가 with-as구성에 전달되어 해당 __enter__메서드가 호출됩니다. 우리가 원하는 자원을 획득해야합니다. 이 경우 파일 핸들입니다.
  3. 반환 된 객체는에 대한 인수가됩니다 as. 따라서 as file에서 반환 된 객체를 참조합니다 __enter__. 이름이 일치 할 필요는 없습니다. 우리는 as foobar대신 쓸 수있었습니다 .
  4. with-as블록 내부의 모든 코드 가 실행되면 Python이 호출 __exit__하여 리소스를 해제합니다. 예외가 발생하는 경우에도 호출됩니다.

서브 클래 싱 또는 데코레이터를 사용하여 이러한 컨텍스트 관리자 클래스를 만드는 방법에는 많은 변형이 있습니다 .

Suggested posts

도메인 이름에 대한 정보 찾기

Brian P. Hogan의 Small, Sharp 소프트웨어 도구에서 발췌

도메인 이름에 대한 정보 찾기

facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.

UI 디자인의 D-word와 L-word. 언어가 중요합니다. 인종 차별하지 마십시오.

UI 디자인의 D-word와 L-word. 언어가 중요합니다. 인종 차별하지 마십시오.

우리의 언어는 우리의 생각, 태도 및 행동을 형성할 수 있는 강력한 도구입니다. 무해해 보이는 용어도 해로운 편견과 고정관념을 영속화할 수 있습니다.

Related posts

기다림의 계절에 할 수 있는 것(기술 분야에서 첫 직장을 얻기 위해 기다림)

기다림의 계절에 할 수 있는 것(기술 분야에서 첫 직장을 얻기 위해 기다림)

새로운 직업으로 전환하는 것은 혼자서 하려고 한다면 매우 어려울 수 있습니다. 귀하와 동일한 학습 수준에 있고 유사한 목표, 끈기 및 추진력을 공유하는 책임 파트너를 찾는 것이 중요합니다.

팟캐스트가 영향력 있는 이유는 무엇입니까?

팟캐스트가 영향력 있는 이유는 무엇입니까?

지난 주에 저는 PressGazette(영국 언론 뉴스 웹사이트)를 통해 발송된 보도 자료를 보았습니다. 이 기사는 Scandi 팟캐스트 호스팅 및 광고 회사인 Acast가 팟캐스팅에서 "아마도 가장 영향력 있는" 게시자 컨소시엄을 이끌 것이라고 발표했습니다.

직장 혁명: 최고의 전문가들이 하이브리드 및 원격 작업에 대해 논의합니다.

직장 혁명: 최고의 전문가들이 하이브리드 및 원격 작업에 대해 논의합니다.

오늘날 빠르게 진화하는 비즈니스 환경에서 하이브리드 및 원격 작업의 개념은 전례 없는 추진력을 얻었습니다. 기업이 변화하는 직원의 요구와 기대에 지속적으로 적응함에 따라 다양한 분야의 전문가들이 모여 이 혁신적인 작업 방식의 이점, 과제 및 미래에 대해 논의했습니다.

네트워크 TV 트위터

네트워크 TV 트위터

낡은 것이 다시 새 것이 되고, 번쩍이던 것이 이제는 무디게 느껴진다. JNCO 청바지가 1990년대 후반의 다른 패션과 함께 시내의 쿨한 아이들 사이에서 컴백하는 것에 대해 말하는 것이 아닙니다.