다음은 몇 가지 주요 차이점입니다.
루비에는 블록이 있습니다. 파이썬은 그렇지 않습니다.
파이썬에는 함수가 있습니다. 루비는 그렇지 않습니다. 파이썬에서는 어떤 함수 나 메소드를 가져 와서 다른 함수로 전달할 수 있습니다. 루비에서는 모든 것이 메소드이므로 메소드를 직접 전달할 수 없습니다. 대신, 당신은 그들을 통과하기 위해 Proc 's에 포장해야합니다.
루비와 파이썬은 클로저를 지원하지만 다른 방식으로 지원합니다. 파이썬에서는 다른 함수 안에 함수를 정의 할 수 있습니다. 내부 함수는 외부 함수에서 변수에 대한 읽기 액세스 권한을 갖지만 쓰기 액세스는 할 수 없습니다. Ruby에서는 블록을 사용하여 클로저를 정의합니다. 클로저는 외부 범위에서 변수에 대한 전체 읽기 및 쓰기 액세스 권한을 갖습니다.
파이썬에는 목록 이해력이 있습니다. 예를 들어 숫자 목록이 있으면 다음과 같이 쓸 수 있습니다.
[x*x for x in values if x > 15]
15보다 큰 모든 값의 제곱의 새로운 목록을 얻으려면 Ruby에서 다음을 작성해야합니다.
values.select {|v| v > 15}.map {|v| v * v}
루비 코드는 컴팩트하지 않습니다. 또한 값 배열을 먼저 15보다 큰 값을 포함하는 더 짧은 중간 배열로 변환하기 때문에 비효율적입니다. 그런 다음 중간 배열을 취하여 중간 제곱을 포함하는 최종 배열을 생성합니다. 그런 다음 중간 배열이 처리됩니다. 따라서 Ruby는 계산 중에 메모리에 3 개의 배열로 끝납니다. 파이썬은 입력 목록과 결과 목록 만 필요합니다.
파이썬도 비슷한지도 이해력을 제공합니다.
파이썬은 튜플을 지원합니다; 루비는 그렇지 않습니다. Ruby에서는 배열을 사용하여 튜플을 시뮬레이션해야합니다.
Ruby는 switch / case 문을 지원합니다. 파이썬은 그렇지 않습니다.
루비는 표준 expr ? val1 : val2
삼항 연산자를 지원합니다 . 파이썬은 그렇지 않습니다.
루비는 단일 상속 만 지원합니다. 다중 상속을 모방해야하는 경우 모듈을 정의하고 믹스 인을 사용하여 모듈 메소드를 클래스로 가져올 수 있습니다. 파이썬은 모듈 믹스 인보다는 다중 상속을 지원합니다.
파이썬은 단선 람다 함수 만 지원합니다. 일종의 람다 함수 인 루비 블록은 임의로 커질 수 있습니다. 이 때문에 Ruby 코드는 일반적으로 Python 코드보다 더 기능적인 스타일로 작성됩니다. 예를 들어 Ruby에서 목록을 반복하려면 일반적으로
collection.each do |value|
...
end
블록은에 전달되는 함수와 매우 유사하게 작동합니다 collection.each
. 파이썬에서 동일한 작업을 수행하려면 명명 된 내부 함수를 정의한 다음 각 메소드에 컬렉션에 전달해야합니다 (목록 이이 메소드를 지원하는 경우).
def some_operation(value):
...
collection.each(some_operation)
그것은 아주 잘 흐르지 않습니다. 따라서 일반적으로 다음과 같은 비 기능적 접근 방식이 Python에서 사용됩니다.
for value in collection:
...
안전한 방법으로 자원을 사용하는 것은 두 언어 사이에서 상당히 다릅니다. 여기서 문제는 일부 리소스를 할당하고 (파일 열기, 데이터베이스 커서 얻기 등) 임의의 작업을 수행 한 다음 예외가 발생하더라도 안전한 방식으로 닫으려고한다는 것입니다.
Ruby에서는 블록을 사용하기가 쉽기 때문에 (# 9 참조) 일반적으로이 패턴을 임의의 작업이 리소스에서 수행되도록 블록을 취하는 메소드로 코딩합니다.
파이썬에서, 임의의 액션을위한 함수를 전달하는 것은 명명 된 내부 함수를 작성해야하기 때문에 조금 복잡합니다 (# 9 참조). 대신 파이썬은 with
안전한 리소스 처리를 위해 명령문을 사용합니다 . Python 객체를 올바르게 정리하는 방법을 참조하십시오 . 상세 사항은.