30/09/2018, 23:34

So sánh python 2 và 3 cũng như các ngôn ngữ khác c, js, php

Đầu tiên mình rất xin lỗi vì đã lập một topic có phần ngớ ngẩn thế này, đây là những vấn đề mình đã cố thử tìm kiếm nhưng ko có được kết quả rõ ràng như mong đợi.

Mình hy vọng mọi người có thể giải đáp cho mình vài thắc mắc về Python.

Python mạnh, yếu ở điểm nào khi đem so sánh với C, C++, JS và PHP.

  • C mạnh ở hiệu suất, yếu ở việc phải code nhiều, cách thao tác với các biến phức tạp hơn.
  • JS thì là sự đa năng do được cung cấp một loạt các function liên quan đến DOM BOM gì đấy, có rất rất rất nhiều thư viện cũng như sự hỗ trợ từ cộng đồng nhưng câu cú khá dài dòng và OOP ko rõ ràng.
  • PHP thì khá dễ dùng, OOP rõ ràng nhưng syntax hơi xấu (cảm quan cá nhân), cũng được cung cấp một số lượng kha khá các hàm để dùng, cài đặt PHP và các framework thì hơi phức tạp.
  • C++ đối với mình mà nói thì khá tốt, hiệu suất, syntax rõ ràng, cài đặt dễ, tuy nhiên khá khó để đạt được 1 sản phẩm hoàn thiện ở mức dùng được (do được cung cấp khá ít hàm và không nhiều thư viện).
  • Còn Python thì sao các bạn, cài đặt dễ không, số lượng các hàm được cung cấp có nhiều không khi so sánh với PHP, số lượng thư viện thế nào khi so với JS, và để ra được sản phẩm thì có lâu không khi so với C++.
    Ngoài ra là vấn đề về việc chọn Python 2 và Python 3. Mình tìm hiểu thì 2 cái này không khác nhau nhiều lắm nhưng sao nó gây ra nhiều tranh cãi trên mạng như vậy. Và mình nên chọn cái nào, khi mình muốn dùng Python để viết ra vài tool nhỏ nhỏ kiểu auto game trước, sau đó là kiếm việc làm, sau đó nữa là dùng để hỗ trợ cho C++ trong dự án siêu cấp trò chơi mình vẫn đang ấp ủ.
    Cảm ơn những người đã click vào đây, những người đã đọc bài viết này, cảm ơn.
Mark Ollver viết 01:43 ngày 01/10/2018

Em đang học Python thấy khá ok, dễ cài đặt, ngôn ngữ, cú pháp dễ hiểu, ngắn gọn , viết gần giống như là mình nói :v

Tùng Lâm viết 01:40 ngày 01/10/2018

python ngôn ngữ cho người mới học. 2 tháng em đã thành tục trong việc code python và sử dụng framework django. Nếu anh học c/c++ rồi thì rất đơn giản. Cần 1 tuần là anh ok rồi.Nên chon python 3 vì nó có tiềm năng pt trong tương lai

Khoa NTA viết 01:41 ngày 01/10/2018

Theo trình độ và cảm nhận của bản thân, mình thấy:
Python:

  • Mạnh: số dòng code ít, cú pháp đẹp, dễ hiểu (do ban đầu, Python phát triển từ mã giả), thư viện hỗ trợ nhiều (cài đặt dễ dàng thông qua pip), là ngôn ngữ đa chức năng, linh hoạt, đa nền tảng, chế độ interative gíup cho việc test code dễ dàng, là ngôn ngữ thông dịch nên rất thuận tiện. Nếu bạn làm gamebot/autogame, làm game,… thì Python rất hợp, bạn cũng dễ dàng tìm thấy vài con gamebot trên Google. Các hacker cũng rất yêu thích Python vì khả năng hoàn thiện sản phẩm nhanh. Google, Youtube,… cũng dùng Python cho web applications của họ. Python giúp tự động hóa công việc. Python cũng dễ mở rộng thư viện bằng C. Mình thấy ở C và Python có nhiều hàm tương đương về tên và hằng số (như ở trong module socket), giúp bạn học C cũng khá hơn.

  • Yếu: Chạy khá chậm (không chậm bằng PHP đâu) nhưng vẫn chấp nhận được, nếu bạn sử dụng phiên bản Pypy của Python thì tốc độ sẽ cải thiện hoặc sử dụng thư viện như Numpy cũng giúp việc tính toán được nhanh hơn (tuy Python chậm nhưng bạn không nên so sánh tốc độ với C/C++ được). Giữa Python2 và Python3 có sự khác biệt dẫn đến làm hoang mang người mới học. Hình như ở VN, Python chưa phát triển lắm. Do mục đích là mã nguồn mở nên khi bạn muốn làm 1 sản phẩm thương mại code bằng Python thì bạn khó lòng bảo vệ được mã nguồn lắm.

Cảm nhận của mình là như vậy thôi. Nói chung là học cũng không thừa đâu bạn, bạn có thể học nó như 1 mã giả để giúp bản hiểu và rèn luyện được thuật toán. Chúc bạn thành công.

Nguyen Thanh Chinh viết 01:50 ngày 01/10/2018

Mình không làm python nhưng cá nhân thấy nó tương đối chậm, hôm nọ có cùng anh bạn cài đặt thuật toán EM với 10000 vòng lặp, ông dùng python chạy hơn 4 tiếng chưa xong trong khi mình dùng java chỉ tầm 30p

anon10499953 viết 01:39 ngày 01/10/2018

Python dùng trình thông dịch còn C++/Java là biên dịch nên Python sẽ chạy chậm hơn. Tuy nhiên đây là vấn đề của các trình thông dịch/biên dịch, chứ Python rất dễ cài đặt, dễ học và dễ code…

Nói chung, nếu mình muốn học một ngôn ngữ nào đó cho biết thì mình sẽ ưu tiên các yếu tố phía trên, chứ còn runtime là gì mình không quan tâm =))

Chế Tiệp Chân Khoa viết 01:46 ngày 01/10/2018

nhớ không lầm thì 2020 là python 2 hết support rồi, bạn học python 3 đi, chắc support tới 2030

G19 viết 01:38 ngày 01/10/2018

cám ơn bạn, mình ưng câu trả lời của bạn quá, mình là người mới học python nên còn định hỏi thêm nhiều điều như kiểu: cách cài thư viện, điểm mạnh python,… nhưng câu trả lời này có rồi

nhớ không lầm thì 2020 là python 2 hết support rồi, bạn học python 3 đi, chắc support tới 2030

sáng giờ mình lỡ học python 2 mất rồi, tại thấy trong máy có sẵn python 2 nên… Mà việc chuyển từ python2 lên 3 chắc cũng ko khó chứ bạn

viết 01:50 ngày 01/10/2018

Mà việc chuyển từ python2 lên 3 chắc cũng ko khó chứ bạn

nếu ko khó thì Python 2 chết lâu rồi…

G19 viết 01:38 ngày 01/10/2018

vậy tức là khó à bạn ?

“”"
Tiện đây, mình muốn hỏi 1 chút về thuật toán.
Đề: dòng đầu nhập vào 1 số N < 100. Dòng 2 nhập vào N số, cách nhau 1 dấu cách. Sau đó…

Để nhập được đống ở dòng 2 kia thì:
C++: mình hay tạo một mảng có N phần tử (với N nhập từ bàn phím). Rồi chạy vòng for và std::cin >> mảng[i]
Cách trên mình thấy phải khai báo mảng bằng 1 biến nên thấy chưa tối ưu lắm, mà ko nghĩ ra cách gì khác, nhân hôm nay có topic nên muốn tham khảo ý kiến mọi người
Python: mình định sẽ input_raw() cả dòng rồi dùng 1 hàm nào đó chia chuỗi thành các tuple, list hay dic gì đó là được.
Nhưng mình vẫn muốn tham khảo thêm, tại vấn đề này mình ko biết phải google với từ khóa nào cả.

viết 01:39 ngày 01/10/2018

đem code Python 2 cho Python 3 chạy ko được tức là ko dễ rồi. Còn khó thì tùy code bạn thế nào nữa.
Google “Python 2 to 3” rồi xem nó gợi ý những gì, đọc sẽ thấy nó dông dài đủ thứ ~.~

viết 01:45 ngày 01/10/2018

khai báo mảng bằng 1 biến nên thấy chưa tối ưu lắm

câu này nghĩa là sao Thế list, tuple, dict gì ko phải là 1 biến à?

nếu ko cần duyệt mảng nữa thì khỏi cần tạo mảng. Ví dụ code tính tổng n số nguyên, thay vì tạo 1 mảng số nguyên thì cộng thẳng luôn:

int n;
std::cin >> n; //chả cần quan tâm, nếu input chắc chắn có n số nguyên sau số nguyên này

int sum = 0;
while (std::cin >> n) sum += n;
std::cout << sum << "\n";

nếu cần mảng thì xài vector:

int n;
std::cin >> n;

std::vector<int> v(n, 0); //mảng n số 0.

for (int i = 0; i < v.size(); ++i) std::cin >> v[i]; //C++ bình thường
//hoặc
for (int& x : v) std::cin >> x; //C++11
G19 viết 01:49 ngày 01/10/2018

Theo như mình được học, nhiều tài liệu khi nói đến mảng thường chú thích thêm là: khi khai báo mảng, có thể dùng hàm số nhưng ko nên dùng biến, kiểu như này: int array[MAX] với MAX là 1 const chứ ko nên int array[x] với x là biến.
Còn tuple list dict tất nhiên là biến, mình ko hiểu ý câu hỏi sau lắm :

Cám ơn bạn, mình đang nói đến trường hợp 2 đấy nhưng dùng mảng thường thay vì vector.

viết 01:40 ngày 01/10/2018

trong C++ đừng xài mảng kiểu C. Xài vector hết đi

std::vector<int> arr(10); //thay cho int arr[10]; 
std::vector<int> arr(n); //thay cho int* arr = new int[n]
G19 viết 01:38 ngày 01/10/2018

ok, mình sẽ làm thế lần sau.
Vector rõ ràng tiện hơn nhưng do mình quen với array và thấy nó vẫn dùng được nên chưa bỏ được thói quen này. Sẽ thay đổi sau khi được lời khuyên của bạn.

viết 01:36 ngày 01/10/2018

nếu bạn muốn viết code C++ như Python thì học C++11/C++14 ấy. Mất công hơn viết dài 1 tí nhưng chạy lẹ hơn Python 10-30 lần. Xử lý số nguyên lớn thì C++ phải xài thư viện riêng (GMP).

G19 viết 01:48 ngày 01/10/2018

Cám ơn bạn, mình sẽ tìm hiểu sớm. Mà viết code C++ như Python là ý làm sao bạn? Syntax đẹp hay là gì nhỉ ?
Còn việc nhập cái đống kia bằng python thì có cách nào hay hơn không bạn. Tại cách mình dùng nó phải nhận vào kiểu string trước, rồi chia ra thành nhiều string, rồi chuyển nhiều string thành nhiều integer nên thấy hơi cồng kềnh.

viết 01:42 ngày 01/10/2018

vì nhập có 1 lần nên bạn ko cần quan tâm nhanh chậm đâu.

p = [int(s) for s in raw_input().split()]

Hưng Lê viết 01:41 ngày 01/10/2018

C++/Java là biên dịch

Java không phải biên dịch hoàn toàn nha bạn.

trong C++ đừng xài mảng kiểu C. Xài vector hết đi

Tại sao vậy bạn?

G19 viết 01:36 ngày 01/10/2018

Tại sao vậy bạn?

Đơn giản nhất mình thấy nó đa năng hơn array, dễ dàng thêm bớt, ngoài mặt hiệu suất ra thì mình thấy vector hơn ở mọi thứ mà.
Mình có 1 chút thắc mắc nhỏ về cách hoạt động của cái vector này. Liệu có phải khi mình push_back hay xóa đi một phần tử thì nó sẽ: tạo cho mình một mảng mới, chuyển dữ liệu sang rồi xóa mảng cũ đi; hay nó khai báo thêm một biến bên ngoài rồi chỉ index từ mảng ra đấy; hay một cách hoạt động nào khác?

viết 01:46 ngày 01/10/2018

Tại sao vậy bạn?

vì nó là C++… Nếu bạn muốn xài mảng kiểu C thì sao ko viết code C luôn đi, C++ làm gì?

  • kích cỡ mảng C cố định, ko thay đổi được. Muốn thay đổi phải cấp phát động => y hệt vector
  • kích cỡ mảng C ko quá 2MB (dung lượng tối đa thông thường của stack), muốn nhiều hơn phải xài mảng động => vector
  • truyền mảng vào hàm trong C phải truyền 2 tham số: con trỏ tới phần tử đầu tiên và kích cỡ của mảng. vector chỉ cần truyền 1 tham số.
  • mảng C 2 chiều tĩnh truyền vào hàm cần 3 tham số, vector<vector<>> chỉ cần 1 tham số…
  • cấp phát động cho mảng 2 chiều?
  • một khi đã cấp phát xong thì vector chả khác gì mảng C về mặt tốc độ.
Bài liên quan
0