java와 python 비교
java와 python 비교
2011년 4월 18일
1. 난이도 면에서. 파이썬은 자바보다 훨씬 간단합니다.
2. 개발 속도. Python은 Java보다 훨씬 좋습니다
3. 실행 속도. Java는 표준 Python보다 훨씬 우수하며 pypy와 cython은 Java를 따라잡을 수 있지만 둘 다 프로젝트를 수행할 만큼 성숙하지 않습니다.
4. 사용 가능한 리소스. Java 리소스는 많지만 Python 리소스, 특히 중국어 리소스는 거의 없습니다.
5. 안정성. Python 3과 2는 호환되지 않아 어느 정도 혼란을 일으키고 많은 클래스 라이브러리가 실패합니다. Java는 기업의 지원을 받기 때문에 훨씬 더 안정적입니다.
6. 오픈소스인가요? Python은 처음부터 완전히 오픈 소스였습니다. Java는 sun에서 개발했지만 이제 GUN용 Openjdk도 제공되므로 걱정하지 마세요.
7. 컴파일하거나 해석합니다. 둘 다 해석적입니다.
C는 수동변속기 자동차(컴파일 언어), 자바와 파이썬(인터프리트 언어)은 자동변속기 자동차와 같다고 이해합니다. 가장 빠른 차는 모두 수동변속기지만, 운전을 잘 못하는 사람은 자동변속기를 운전하는 것이 더 빠르다.
Kno에는 프로그래밍 언어 선택에 대해 "필요 사항을 먼저 결정하세요"라는 기사가 있습니다. 언어의 단순성이나 복잡성으로 결정하지 마세요. 정말로 유용하다고 생각하는 프로그램을 작성할 수 있어야만 만족감을 얻고 계속 학습할 수 있습니다.
그러면 Java와 Python은 어떤 환경에 적합한가요? sourceforge.net에서 볼 수 있습니다.
가장 유명하고 오랫동안 테스트된 일반 애플리케이션은 기본적으로 C++로 작성되었습니다. 예를 들어 에뮬, 7-zip, WinSCP, FileZilla 등이 있습니다.
그 중 일부는 가장 유명한 OpenOffice와 같은 Java로 개발되었습니다.
Pidgin, FireBird 등 Python 작성자는 거의 없습니다.
개발 언어 순위(이 언어로 개발된 프로그램의 수)는 다음과 같습니다. > 186
# Visual Basic .NET
애플리케이션처럼 많은 프레임워크와 클래스 라이브러리도 이 목록에 있습니다. 소프트웨어이므로 공평합니다.
Java는 GNU와 상용 분야 모두에서 가장 널리 사용되는 언어임을 알 수 있습니다. C는 주로 시스템의 최하위 계층을 구축하는 데 사용됩니다. C++와 Java는 중간 애플리케이션 계층을 구축하는 데 사용됩니다. 리소스가 충분하면 실행 속도를 위해 C++ 개발이 선택되고, 그렇지 않으면 개발 속도를 위해 Java 개발이 사용됩니다. Python은 모든 면에서 Java보다 우수하며 차세대 언어라고 할 수 있습니다. 그러나 가장 논란이 되는 점은 Pure Python의 속도가 Java보다 훨씬 느리고 그에 대한 안정성이 비판을 받고 있다는 것입니다. 지금까지 Python은 주로 상용 수준에서 다른 언어(주로 c/c++)의 클래스 라이브러리를 바인딩하기 위한 글루 언어로 사용되었습니다. GNU 분야에서는 주로 소규모 애플리케이션과 개인화된 애플리케이션에 국한됩니다. 및 리버스 엔지니어링(해킹) 애플리케이션.
Java가 서버 측에서는 널리 사용되지만 클라이언트 측에서는 덜 사용되는 이유는 무엇입니까? 서버측에서 사용되는 계산량이 적어서 그런걸까요? 나는 이것이 C++에 비해 Java의 속도가 여전히 허용 가능하다는 것을 보여준다고 생각합니다. 용납할 수 없는 것은 JRE 플랫폼과 JRE 플랫폼이 시작될 때 멈추는 순간입니다. 한때 Java로 작성된 프로그램의 성능이 낮다고 생각한 적이 있습니다.
Python 사용자들이 자주 하는 말 중 하나는 Python이 실행될 때 많은 C 라이브러리를 호출하기 때문에 Python이 느리지 않다는 것입니다. 그리고 C는 매우 빠릅니다. 반면에 이것은 글루 언어라는 사실을 반영합니다. 어떤 언어라도 C 라이브러리를 호출할 수 있습니까? 라이브러리가 전적으로 Python으로 구성되어 있다면 운영 효율성은 중요하지 않습니다. 프로그래밍을 위해 항상 다른 사람의 라이브러리를 사용할 수는 없습니다.
----
현재 Python 프로그래밍 언어를 사용하려면 지속적인 학습이 필요합니다. 아래에서는 관련 지식을 더 잘 학습하는 방법을 자세히 살펴보겠습니다. 최근에 나는 약 45.5KLOC인 wxPython 기반 GUI 애플리케이션의 코드를 살펴보았는데 여기에는 사용하는 라이브러리(예: Twisted)가 포함되어 있지 않습니다.
Python을 처음 접하는 Java 개발자가 작성한 코드이므로 심각한 성능 문제(예: 시작 시간 30초)가 있습니다. 코드를 확인해 보니 Java에서는 이해가 되지만 Python 프로그래밍 언어에서는 받아들이기 어려운 내용이 많이 작성되어 있었습니다. "Python이 Java보다 느리기 때문"이 아니라, Java에서는 불가능한 일이라도 Python에서는 동일한 목표를 달성할 수 있는 더 편리한 방법이 있기 때문입니다.
그래서 슬픈 점은 이 사람들이 Python 프로그래밍 언어로 구현해야 하는 것보다 훨씬 느린 코드를 작성하면서 절반의 노력으로 절반의 결과를 얻고 있다는 것입니다. 아래에서 몇 가지 예를 살펴보겠습니다.
◆Java의 정적 메소드는 Python 클래스 메소드로 변환될 수 없습니다. 아, 물론, 거의 동일한 효과를 생성하지만 클래스 메소드의 목적은 실제로 Java에서 일반적으로 불가능한 작업(예: 기본이 아닌 기본 함수 상속)을 수행하는 것입니다. Java 정적 메서드의 관용적 번역은 일반적으로 클래스 메서드나 정적 메서드가 아닌 모듈 수준 함수로 변환됩니다. (그리고 정적 상수는 모듈 수준 상수로 변환되어야 합니다.)
이것은 성능 문제는 아니지만 Python 프로그래밍 언어 프로그래머가 Foo.someMethod를 호출하려는 경우 Foo.Foo.someMethod와 같은 것을 사용해야 합니다. 자바에서 이런 식으로 하면 그는 미치게 될 것이다. 한 가지 주의해야 할 점은 클래스 메서드를 호출하려면 추가 저장 공간이 필요하지만 정적 메서드나 함수를 호출하면 추가 저장 공간이 필요하지 않다는 것입니다.
그런데 Foo.Bar에도 이러한 속성이 있습니다. Baz 체인은 스스로 셀 수 없습니다. Java에서는 이러한 점으로 구분된 이름을 컴파일러에서 검색하며, 실행 시 전체 개수를 고려하지 않습니다. Python에서는 검색 프로세스가 실행 중에 동시에 수행되므로 매 시간마다 실행됩니다. (파이썬에서 기억해야 할 한 가지는 "가독성" 및 "복잡한 것보다 단순한 것"이라는 측면에서 더 관련될 수 있지만 "타일식 구조가 중첩된 구조보다 낫다"는 것입니다.)
◆ 스위치 문을 사용하고 싶으십니까? Python 프로그래밍 언어는 if-then 문 묶음이 아닌 해시 테이블입니다. Java의 스위치 문은 아니지만 문자열도 포함하는 여러 if-then 문을 사용하고 싶으십니까? 여전히 해시 테이블입니다. CPython 사전은 우리가 알고 있는 분야에서 최고의 성능을 발휘하는 것으로 간주되는 해시 테이블을 사용하여 구현됩니다. 당신이 직접 작성한 코드는 당신이 Guido, Tim Peters, Raymond Hettinger의 사생아가 아니고 유전적으로 강화되지 않는 한 이보다 더 나을 수 없습니다.
◆xml은 답이 아닙니다. 그것도 문제가 되지 않습니다. 이제 정규식을 사용하여 Jamie Zawinski는 "어떤 사람들은 문제가 발생하면 '알고 있는데 XML을 사용해야 한다'고 생각합니다. 그러면 두 가지 문제가 발생합니다."라고 설명합니다.
이것은 다릅니다. XML은 Java 코드에 비해 유연하고 유연하기 때문입니다. 그러나 Python 코드에 비해 XML은 앵커이자 부담입니다. Python에서는 핵심 기능이 아닌 함께 작업하는 데 XML이 사용됩니다. 그렇게 할 필요가 없기 때문입니다. Java에서 XML은 도메인별 언어를 구현하고 "코딩 없이" 애플리케이션의 적응성을 향상시킬 수 있기 때문에 구세주가 될 수 있습니다. Java에서는 인코딩을 피하는 것이 큰 이점입니다. 인코딩은 다시 컴파일을 의미하기 때문입니다. 그러나 Python에서는 일반적으로 XML보다 코드를 작성하는 것이 더 쉽습니다. 또한 Python은 XML보다 훨씬 빠르게 코드를 처리합니다. (그뿐만 아니라 XML 처리 코드도 작성해야 하는데, Python이 이미 이를 작성해 주었습니다.)
당신이 Java 프로그래머라면, 당신이 Java 프로그래머라면 Python 핵심 애플리케이션의 일부로 XML을 사용하고 싶습니다. 기존 XML 표준을 구현하지 않거나 일종의 입력 또는 출력 형식을 설정하지 않거나 정보 교환을 위해 일종의 XML 편집기 또는 처리 도구를 구축하지 않는 경우에는 수행하지 마십시오. 전혀하지 마십시오. 그것에 대해 생각조차하지 마십시오. 이제 XML 스키마를 버리고 손을 자유롭게 하십시오! Python 프로그래밍 언어 개발자가 귀하의 응용 프로그램이나 플랫폼을 사용할 예정이라면 작업에 XML을 사용하는 부담을 더하지 않은 것에 대해 감사할 것입니다.
(여기서 유일한 예외는 대상 청중이 어떤 이유로든 정말로 XML을 사용해야 하는 경우입니다. 예를 들어, 그들은 Python 배우기를 거부하지만 XML Money를 사용하면 돈을 지불할 것입니다. XML 편집을 위한 훌륭한 GUI이며 XML GUI는 다른 사람이 작성했으며 이를 무료로 사용할 수 있습니다. XML이 필요한 몇 가지 아키텍처적인 이유도 있습니다. 이는 프로그램에서 작동하지 않습니다. . 의심스러우면 선임 Python 개발자에게 사용 사례를 설명하세요. 또는, 당신의 프로그램이 XML을 사용하는 이유를 Lisp 프로그램에 설명해보세요. 🎜>◆게터와 세터는 사악합니다. 악마라고 해야 하나, 악마다! Python 프로그래밍 언어 객체는 Java Bean이 아닙니다. getter 및 setter를 작성하지 말고 "속성"으로 작성하십시오. 단순한 액세스보다 조금 더 복잡한 기능이 필요하다는 것을 증명할 수 있을 때까지는 의미가 없습니다. 그렇지 않으면 getter 및 setter를 작성하지 마십시오. 이는 CPU 시간 낭비이며, 더 중요하게는 귀중한 프로그래머 시간 낭비입니다. 코드와 테스트를 작성하는 사람들뿐만 아니라 이를 읽고 이해하려는 사람들에게도 해당됩니다.
Java에서는 공개 필드를 사용하면 나중에 마음을 바꿔서 getter와 setter를 사용할 수 없으므로 getter와 setter를 사용해야 합니다. 따라서 Java에서는 이러한 "집안일"을 미리 피하는 것이 좋습니다. Python에서는 일반 기능으로 시작하여 고객 클래스에 영향을 주지 않고 언제든지 마음을 바꿀 수 있기 때문입니다. 따라서 getter 및 setter 메소드를 작성하지 마십시오.
◆코드 중복은 일반적으로 Java에서 피할 수 없는 재앙입니다. 약간의 변경만으로 동일한 메소드를 반복해서 작성해야 합니다(보통 이는 정적 유형 제약 때문입니다). Python에서 이 작업을 수행하는 것은 필요하지도 가치도 없습니다(성능이 필요한 일부 함수를 인라인해야 하는 몇 가지 특정 경우를 제외하고). 거의 변형하지 않고 동일한 코드를 계속해서 작성하는 경우 클로저에 대해 배워야 합니다. 실제로는 그다지 무섭지 않습니다.
Python 프로그래밍 기술 요약
유연한 Python 프로그래밍 언어에 대한 간략한 소개
짧은 시간에 Python 프로그래밍 언어 마스터하기
역사 Python 프로그래밍 언어 지침 소개
Python 프로그래밍 언어에 대한 설명
이것이 바로 여러분이 하는 일입니다. 함수를 포함하는 함수를 작성합니다. 여기서 내부 함수는 계속해서 작성하려는 함수의 템플릿이지만, 그 안에 다양한 상황에 맞게 변수를 사용하는 함수를 추가합니다. 외부 함수는 방금 발생한 변수를 매개 변수로 사용하고 결과로 내부 함수를 반환합니다. 그런 다음 약간 다른 함수를 작성하고 싶을 때마다 외부 함수를 호출하고 "중복" 함수가 표시되기를 원하는 이름에 반환 값을 할당하면 됩니다. 이제 작동 방식을 변경해야 하는 경우 템플릿 한 곳만 변경하면 됩니다.
내가 본 애플리케이션/플랫폼 중에서 수백 줄의 무거운 코드를 제거하는 이 기술을 사용하는 아주 사소한 프로그램은 단 하나뿐입니다. 실제로 개발자는 특수 상용구 파일을 사용하여 이 플랫폼용 플러그인을 개발하기 때문에 타사 개발자의 코드가 많이 절약되고 프로그래머가 배우기도 더 간단해집니다.
이것은 Java->Python 프로그래밍 언어에 대한 사고 방식의 변화 중 빙산의 일각에 불과합니다. 이제 프로그램의 세부 사항을 파헤치지 않고도 올바르게 변경할 수 있습니다. 본질적으로, 한동안 Java를 사용했지만 Python을 처음 사용하는 경우 본능을 너무 믿지 마십시오. 당신의 본능은 Python이 아닌 Java에 의해 조절되었습니다. 한발 물러서서 가장 중요한 것은 너무 많은 코드 작성을 중단하는 것입니다.
이를 위해서는 Python이 더욱 필요하다는 것을 스스로 느껴보세요. 마치 Python이 여러분의 노력 없이 원하는 것은 무엇이든 할 수 있는 마술 지팡이인 것처럼 가장하십시오. "Python은 내 문제를 어떻게 해결합니까?", "Python 언어의 어떤 기능이 내 문제와 가장 유사합니까?"라고 질문하십시오. 필요한 것이 이미 어떤 형태로든 존재한다면 놀랄 것입니다. 실제로 이 현상은 숙련된 Python 프로그래머들 사이에서도 매우 흔하므로 Python 커뮤니티에서는 이에 대한 이름을 갖고 있습니다. 우리는 그것을 "GUIDO의 타임머신"이라고 부릅니다. 왜냐하면 우리가 그것을 스스로 익히기 전에는 그것이 우리에게 필요한 것을 얻을 수 있는 유일한 방법인 것처럼 보이기 때문입니다.
그래서 Python 프로그래밍 언어를 사용할 때 Java를 사용할 때보다 최소한 10배는 더 생산적이라고 느낄 수 없다면 몇 가지 변경을 하는 것이 좋습니다. 타임머신을 사용하는 것을 잊어버리셨나요? 타임머신을 사용하는 것을 잊어버렸다는 것) (동시에 여전히 Java IDE가 그립다면 다음과 같이 생각할 수 있습니다. 왜냐하면 여러분이 작성한 Python 프로그램은 필요한 것보다 훨씬 더 복잡하기 때문입니다. )
위 내용은 java와 python의 비교입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!