Python Flashcards

(32 cards)

1
Q

❓ Python là ngôn ngữ kiểu gì về mặt khai báo biến?

A

💡 Kiểu động – không cần khai báo kiểu trước, kiểu được xác định lúc chạy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

❓ Sự khác nhau giữa listtuple là gì?

A

💡 list mutable (có thể thay đổi), tuple immutable (không thay đổi).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

❓ Dữ liệu nào trong Python có thể chứa trùng lặp và thứ tự?

A

💡 listtuple.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

pass dùng để làm gì?

A

💡 Là placeholder – dùng khi cần cú pháp hợp lệ nhưng chưa làm gì.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

breakcontinue khác nhau thế nào?

A

💡 break thoát vòng lặp, continue bỏ qua lượt lặp hiện tại.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

❓ Python chạy chương trình như thế nào?

A

💡 Phân tích cú pháp → biên dịch bytecode → thông dịch bằng PVM.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

self trong class có nghĩa gì?

A

💡 Là tham chiếu đến instance hiện tại – dùng để truy cập thuộc tính và method.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

\_\_init\_\_ là gì?

A

💡 Là constructor, chạy khi object được tạo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

❓ Cách giới hạn quyền truy cập thuộc tính trong Python là gì?

A

💡 Dùng prefix:

  • public: self.name
  • _protected: _name
  • \_\_private: \_\_name (name mangling)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

text[::-1] trả về gì?

A

💡 Chuỗi bị đảo ngược.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

❓ Lấy phần tử thứ 2 đến 4 của list a?

A

💡 a[1:4]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

❓ Dạng slicing a[::2] nghĩa là gì?

A

💡 Lấy mỗi phần tử cách 2 vị trí (step = 2)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

❓ Sự khác nhau giữa module và package?

A

💡 Module là file .py, package là thư mục chứa nhiều module và có \_\_init\_\_.py.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

❓ Import hàm add() từ module math_utils.py thế nào?

A

💡 from math_utils import add

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

❓ Tại sao nên viết unit test?

A

💡 Đảm bảo code đúng, dễ refactor, phát hiện bug sớm.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

pytest khác gì unittest?

A

💡 pytest ngắn gọn, dễ viết, phổ biến hơn trong dự án thực tế.

17
Q

❓ Docstring là gì?

A

💡 Là mô tả hàm/class giúp người dùng hiểu chức năng – truy cập bằng help().

18
Q

❓ Khác biệt giữa list, array, và numpy array là gì?

A

💡 list: chứa mọi kiểu, linh hoạt – array.array: chỉ 1 kiểu, nhanh hơn – numpy.array: tối ưu tính toán số học lớn.

19
Q

❓ Python giải phóng bộ nhớ bằng cách nào?

A

💡 Dùng reference countinggarbage collector – khi không còn biến nào tham chiếu, object được thu hồi.

20
Q

❓ Làm sao biết có bao nhiêu tham chiếu đến 1 object?

A

💡 Dùng sys.getrefcount(obj)

21
Q

❓ Namespace là gì?

A

💡 Là nơi lưu tên biến → mỗi function/class/module là một namespace riêng.

22
Q

❓ Python tìm biến theo thứ tự nào?

A

💡 Theo LEGB: Local → Enclosing → Global → Built-in

23
Q

❓ Decorator là gì?

A

💡 Là hàm nhận vào một hàm khác và mở rộng chức năng cho hàm đó mà không làm thay đổi nội dung gốc của hàm. Rất hữu ích trong logging, kiểm tra quyền truy cập, đo thời gian chạy, caching, v.v.

24
Q

❓ List / Dict / Set comprehension là gì?

A

💡 Là cú pháp rút gọn giúp tạo list, dict, hoặc set từ iterable một cách ngắn gọn và hiệu quả hơn so với vòng lặp thông thường.

```squares = [x**2 for x in range(10)]
word_lengths = {word: len(word) for word in [‘python’, ‘java’]}
~~~

25
**❓ Lambda là gì? Dùng khi nào?**
💡 Là hàm ẩn danh (không tên), chỉ gồm một biểu thức. Dùng cho những hàm đơn giản, khai báo nhanh, thường đi kèm `map`, `filter`, `sort`. ```sorted(data, key=lambda x: x[1]) ```
26
**❓ Sự khác biệt giữa shallow copy và deep copy?**
💡 Shallow copy: sao chép vỏ ngoài – bên trong vẫn tham chiếu chung → thay đổi ảnh hưởng lẫn nhau. Deep copy: sao chép toàn bộ – độc lập hoàn toàn với bản gốc. 📘 Shallow copy = Bản sao "mặt ngoài" * Chỉ sao chép **vỏ ngoài** * Đối tượng con vẫn chia sẻ giữa bản gốc và bản sao * Thay đổi bên trong 1 cái → cái còn lại cũng bị ảnh hưởng 📎 **Ví dụ**: Photocopy bìa sách, bên trong vẫn là sách gốc 📗 Deep copy = Bản sao "toàn bộ" * Sao chép cả vỏ và bên trong * Hai đối tượng độc lập hoàn toàn 📎 **Ví dụ**: In lại toàn bộ quyển sách mới 📌 Nhớ nhanh: * **Shallow copy** = copy "bìa" → chia sẻ bên trong * **Deep copy** = copy "cả quyển sách" → độc lập hoàn toàn
27
**❓ Generator là gì?**
💡 Generator là hàm đặc biệt dùng `yield` để trả về từng giá trị một thay vì trả hết cùng lúc. Giúp tiết kiệm bộ nhớ khi xử lý nhiều dữ liệu. ```def fib(): yield 0 yield 1 ``` > ⚠️ Generator chỉ chạy một lần duy nhất theo vòng lặp, không lưu toàn bộ dữ liệu trong RAM.
28
**❓ Python là ngôn ngữ biên dịch hay thông dịch?**
💡 Là ngôn ngữ **thông dịch** – code Python được chuyển sang bytecode rồi chạy bởi interpreter. Không cần build thủ công như C/C++. ```python myfile.py # chạy trực tiếp, không cần biên dịch ```
29
**❓ Iterator hoạt động như thế nào trong Python?**
💡 Iterator là đối tượng hỗ trợ duyệt qua từng phần tử bằng `next()` – rất hữu ích trong vòng lặp lớn, tiết kiệm bộ nhớ. ``` nums = [1, 2, 3] it = iter(nums) print(next(it)) # 1 print(next(it)) # 2 ```
30
**❓ split() và join() khác nhau thế nào?**
💡 `split()`: chia chuỗi thành list theo ký tự phân cách. `join()`: nối list thành chuỗi bằng một ký tự phân cách. ``` s = "hello world" print(s.split()) # ['hello', 'world'] words = ['python', 'java'] print('-'.join(words)) # 'python-java' ```
31
\*\*❓ *args và **kwargs dùng để làm gì?**
💡 Cho phép truyền số lượng đối số không xác định: * `*args` → tuple các đối số không tên * `**kwargs` → dict các đối số có tên ``` def demo(*args, **kwargs): print(args) print(kwargs) demo(1, 2, 3, a=10, b=20) ```
32
**❓ Dùng chỉ số âm trong list/chuỗi để làm gì?**
💡 Để truy cập phần tử từ **cuối** list hoặc string: * `-1`: phần tử cuối cùng * `-2`: phần tử kế cuối, ... ``` lst = [10, 20, 30, 40] print(lst[-1]) # 40 print(lst[-2]) # 30 s = "python" print(s[-1]) # 'n' ```