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

0 0 0

Người đăng: Hoang Minh Dai

Theo Viblo Asia

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Bài toán tìm đường đi ngắn nhất với giải thuật Dijkstra

Với các bạn sinh viên chuyên ngành công nghệ thông tin, chắc không lạ gì với bài toán tìm đường đi ngắn nhất (Shortest Path Problems) trong đồ thị trọng số nữa. Ở bài viết lần này, mình sẽ làm 3 việc:.

0 0 135

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

- vừa được xem lúc

Những thay đổi trong ruby 3.0

. 2020 là một năm lớn đối với cộng đồng Ruby. Những người sáng lập Ruby có một món quà thực sự tuyệt vời cho chúng ta vào giáng sinh với việc phát hành Ruby 3.

0 0 47

- vừa được xem lúc

Có gì đặc biệt trong phiên bản Ruby 3x3 ?

Hello guys, chắc hẳn thời gian vừa rồi chúng ta cũng đã nghe qua thông tin Ruby sắp cho ra mắt Ruby version 3, hay còn được gọi là ruby 3x3, vậy liệu Ruby version 3 này có gì mới, và có những update nào đáng phải kể đến, và tại sao mọi người lại gọi nó là ruby version 3x3, thì trong bài ngày hôm nay

0 0 43

- vừa được xem lúc

Cách sử dụng class Time & Date trong Ruby (Phần 1)

Time là một class trong Ruby, nó sẽ giúp chỉnh sửa format, trích xuất thông tin một cách hiệu quả theo ý của bạn. . Topic hôm nay chúng ta có gì nào. .

0 0 97

- vừa được xem lúc

Ruby 3.0 có gì mới

Ruby 3.0.0 đã được ra mới được ra mắt vào tháng 12/2020, mục tiêu của bản 3.0.

0 0 41