+1

Những thành phần chỉ có trong Python mà không có trong Ruby

Dưới đây là một số thành phần hoặc tính năng mà Python có nhưng Ruby không có trực tiếp (hoặc không phổ biến bằng):


1. Kiểu dữ liệu tuple

  • Python: Python có kiểu dữ liệu tuple, là một dạng danh sách bất biến (immutable). Điều này hữu ích khi bạn cần đảm bảo dữ liệu không bị thay đổi.

Python:

my_tuple = (1, 2, 3)
# my_tuple[0] = 10  # Error: Tuples are immutable
  • Ruby: Ruby không có kiểu dữ liệu tương đương với tuple. Nếu cần bất biến, bạn phải sử dụng freeze trên mảng:
arr = [1, 2, 3].freeze
# arr[0] = 10  # Error: can't modify frozen Array

2. Dictionary Comprehension

  • Python: Python cho phép tạo dictionary bằng cách sử dụng cú pháp comprehension.
squared = {x: x**2 for x in range(5)}
print(squared)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
  • Ruby: Ruby không có cú pháp tương đương. Bạn phải sử dụng các phương thức như each_with_object hoặc map:
squared = (0..4).map { |x| [x, x**2] }.to_h
puts squared  # {0=>0, 1=>1, 2=>4, 3=>9, 4=>16}

3. Decorator (Hàm trang trí)

  • Python: Python hỗ trợ decorators, cho phép bạn sửa đổi hành vi của hàm hoặc lớp một cách dễ dàng.
def decorator(func):
    def wrapper():
        print("Before the function call")
        func()
        print("After the function call")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()
  • Ruby: Ruby không có decorators tích hợp sẵn. Bạn cần viết logic thủ công hoặc sử dụng các phương pháp metaprogramming để đạt được điều tương tự.

4. Kiểu dữ liệu set tích hợp

  • Python: Python có kiểu dữ liệu set tích hợp, hỗ trợ các phép toán tập hợp như hợp, giao, và hiệu.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 & set2)  # {3} (Intersection)
  • Ruby: Ruby cần sử dụng Set từ thư viện chuẩn (require 'set') để có tính năng tương tự:
require 'set'
set1 = Set.new([1, 2, 3])
set2 = Set.new([3, 4, 5])
puts set1 & set2  # #<Set: {3}>

5. Type Hints (Gợi ý kiểu dữ liệu)

  • Python: Python hỗ trợ type hints, giúp lập trình viên chỉ định kiểu dữ liệu cho các tham số và giá trị trả về.
def add_numbers(a: int, b: int) -> int:
    return a + b
  • Ruby: Ruby không hỗ trợ gợi ý kiểu dữ liệu tích hợp. Bạn cần sử dụng các gem như sorbet hoặc rbs để đạt được điều này.

6. List Comprehension

  • Python: Python có cú pháp ngắn gọn để tạo danh sách từ một vòng lặp hoặc điều kiện.
squared = [x**2 for x in range(5)]
print(squared)  # [0, 1, 4, 9, 16]
  • Ruby: Ruby không có cú pháp tương đương. Bạn phải sử dụng map:
squared = (0..4).map { |x| x**2 }
puts squared  # [0, 1, 4, 9, 16]

7. Hàm ẩn danh đa dòng (lambda)

  • Python: Python hỗ trợ hàm ẩn danh (lambda), nhưng chỉ cho phép biểu thức đơn dòng.
add = lambda x, y: x + y
print(add(2, 3))  # 5
  • Ruby: Ruby hỗ trợ lambda nhưng cú pháp và cách sử dụng phức tạp hơn:
add = ->(x, y) { x + y }
puts add.call(2, 3)  # 5

8. Tích hợp với NumPy và Pandas

  • Python: Python có các thư viện như NumPy và Pandas, rất mạnh mẽ trong việc xử lý số liệu và dữ liệu bảng. Đây là một lợi thế lớn cho Python trong lĩnh vực khoa học dữ liệu.

  • Ruby: Ruby không có các thư viện tích hợp tương tự mạnh mẽ như NumPy hay Pandas. Có thể sử dụng NMatrix hoặc Daru, nhưng chúng không phổ biến bằng Python.


9. Gán nhiều giá trị cùng lúc

  • Python: Python cho phép gán nhiều giá trị cho nhiều biến trên một dòng.
a, b, c = 1, 2, 3
print(a, b, c)  # 1 2 3
  • Ruby: Ruby hỗ trợ tính năng tương tự nhưng ít được sử dụng.
a, b, c = 1, 2, 3
puts "#{a}, #{b}, #{c}"  # 1, 2, 3

10. Đa luồng thực sự (True Multithreading)

  • Python: Python hỗ trợ đa luồng, nhưng do GIL (Global Interpreter Lock), các luồng không thực sự chạy song song với nhau trong nhiều trường hợp.

  • Ruby: Ruby MRI (Matz's Ruby Interpreter) cũng có GIL, nhưng Python có nhiều lựa chọn hơn như PyPy, Jython, hay CPython để tối ưu hóa đa luồng.


11. Hỗ trợ tích hợp cho Machine Learning và AI

  • Python: Python nổi bật với các thư viện AI/ML như TensorFlow, PyTorch, Scikit-learn, và Keras.

  • Ruby: Ruby có rất ít thư viện AI/ML mạnh mẽ. Hầu hết các dự án AI/ML sử dụng Python.


12. Hỗ trợ async/await tích hợp

  • Python: Python hỗ trợ lập trình bất đồng bộ với asyncawait:
import asyncio

async def say_hello():
    print("Hello!")
    await asyncio.sleep(1)
    print("Goodbye!")

asyncio.run(say_hello())
  • Ruby: Ruby không hỗ trợ async/await tích hợp. Bạn cần sử dụng các gem như async.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí