1. Xem xét đoạn mã sau:
```python
def factory(n):
def multiply_by(x):
return x * n
return multiply_by
my_multiplier = factory(5)
print(my_multiplier(10))
```
Đoạn mã này minh họa khái niệm gì?
A. Đệ quy.
B. Hàm lồng nhau và closures.
C. Biến toàn cục.
D. Vòng lặp vô hạn.
2. Tại sao cần chỉ định kiểu dữ liệu cho tham số và giá trị trả về của hàm (type hinting) trong Python, mặc dù Python là ngôn ngữ kiểu động?
A. Để Python chạy chậm hơn.
B. Để chương trình bắt lỗi kiểu dữ liệu sớm hơn trong quá trình phát triển và cải thiện khả năng đọc mã.
C. Để bắt buộc người dùng phải nhập đúng kiểu dữ liệu.
D. Để loại bỏ hoàn toàn khả năng xảy ra lỗi trong chương trình.
3. Nếu một hàm không có câu lệnh `return` rõ ràng, nó sẽ trả về giá trị nào?
A. 0
B. None
C. False
D. Error
4. Khi gọi một hàm, chúng ta sử dụng cú pháp nào?
A. tên_hàm
B. gọi hàm tên_hàm()
C. tên_hàm()
D. execute tên_hàm
5. Trong Python, đâu là cách đúng để tạo một hàm nhận một số lượng tùy ý các đối số vị trí?
A. def my_func(*args):
B. def my_func(**kwargs):
C. def my_func(args):
D. def my_func(args*):
6. Câu lệnh `pass` trong một hàm được sử dụng để làm gì?
A. Dừng thực thi hàm ngay lập tức.
B. Trả về một giá trị cụ thể.
C. Không làm gì cả, chỉ đơn giản là một trình giữ chỗ hợp lệ về mặt cú pháp.
D. Báo lỗi cho trình thông dịch.
7. Nếu bạn định nghĩa một hàm như sau: `def my_func(x, y=10):
return x + y`. Khi gọi `my_func(5)`, giá trị trả về là bao nhiêu?
A. 5
B. 10
C. 15
D. Error
8. Khái niệm scope của biến trong hàm đề cập đến điều gì?
A. Tốc độ thực thi của hàm.
B. Phạm vi mà biến có thể được truy cập và sử dụng.
C. Số lượng biến mà hàm có thể chứa.
D. Kiểu dữ liệu của biến.
9. Xem xét đoạn mã sau:
```python
def calculate_sum(numbers):
total = 0
for num in numbers:
total += num
return total
my_list = [10, 20, 30]
print(calculate_sum(my_list))
```
Đoạn mã này sử dụng hàm để làm gì?
A. Thực hiện phép nhân các phần tử trong danh sách.
B. Đếm số lượng phần tử trong danh sách.
C. Tính tổng các phần tử trong một danh sách.
D. Tìm giá trị lớn nhất trong danh sách.
10. Trong Python, khi một hàm gọi lại chính nó, đó gọi là gì?
A. Lặp (Iteration)
B. Đệ quy (Recursion)
C. Tái sử dụng (Reusability)
D. Mở rộng (Extension)
11. Trong Python, làm thế nào để bạn định nghĩa một hàm chỉ nhận các đối số theo từ khóa (keyword-only arguments)?
A. Sử dụng `*` trước các tham số từ khóa.
B. Sử dụng `**` trước các tham số từ khóa.
C. Sử dụng `&` trước các tham số từ khóa.
D. Không có cách nào để làm điều này.
12. Một hàm có thể nhận bao nhiêu tham số?
A. Chỉ một tham số.
B. Tối đa hai tham số.
C. Không giới hạn số lượng tham số (bao gồm cả tham số tùy chọn và tham số vị trí).
D. Tối đa mười tham số.
13. Trong các cách sau, cách nào là cách tốt nhất để tái sử dụng một đoạn mã thực hiện tính toán giống nhau nhiều lần?
A. Sao chép và dán đoạn mã đó nhiều lần.
B. Đóng gói đoạn mã vào một hàm và gọi hàm đó mỗi khi cần.
C. Viết lại đoạn mã mỗi lần sử dụng.
D. Sử dụng vòng lặp vô hạn.
14. Xem xét đoạn mã sau:
```python
def show_message(message):
print(Received:, message)
def process_messages(messages):
for msg in messages:
show_message(msg)
my_messages = [Hi, Hello, Greetings]
process_messages(my_messages)
```
Trong đoạn mã này, `show_message` được gọi từ đâu?
A. Trực tiếp từ khối mã chính.
B. Từ một hàm khác (`process_messages`).
C. Từ hệ điều hành.
D. Từ thư viện chuẩn của Python.
15. Độ phức tạp của việc viết mã có thể giảm đi nhờ sử dụng hàm vì:
A. Hàm làm cho chương trình chạy nhanh hơn.
B. Hàm cho phép chia nhỏ vấn đề phức tạp thành các phần nhỏ hơn, dễ quản lý hơn.
C. Hàm tự động sửa lỗi trong mã.
D. Hàm thay thế hoàn toàn các cấu trúc điều khiển như if, for.
16. Xem xét đoạn mã sau:
```python
def greet_person(name=Guest):
print(fHello, {name}!)
greet_person()
greet_person(Alice)
```
Đầu ra của đoạn mã này là gì?
A. Hello, Guest!
Hello, Guest!
B. Hello, Alice!
Hello, Alice!
C. Hello, Guest!
Hello, Alice!
D. Hello, Alice!
Hello, Guest!
17. Trong Python, khai báo một hàm có thể sử dụng từ khóa nào sau đây?
A. keyword
B. function
C. def
D. define
18. Nếu một hàm trả về một giá trị, giá trị đó có thể là bất kỳ kiểu dữ liệu nào trong Python không?
A. Không, chỉ có thể trả về số nguyên.
B. Không, chỉ có thể trả về chuỗi.
C. Có, Python là ngôn ngữ kiểu động và hàm có thể trả về bất kỳ đối tượng nào.
D. Chỉ có thể trả về danh sách.
19. Xem xét định nghĩa hàm sau: `def process_data(data, operation=sum):`. Nếu gọi hàm này bằng `process_data(my_data)`, điều gì sẽ xảy ra với tham số `operation`?
A. Nó sẽ bị bỏ qua.
B. Nó sẽ nhận giá trị mặc định là sum.
C. Nó sẽ báo lỗi vì không được cung cấp.
D. Nó sẽ nhận giá trị của `my_data`.
20. Hàm `print()` trong Python có tác dụng gì?
A. Định nghĩa một biến mới
B. Thực hiện phép tính toán học
C. In kết quả ra màn hình
D. Kiểm tra điều kiện logic
21. Xem xét đoạn mã sau:
```python
def multiply(a, b):
return a * b
result = multiply(5, 3)
print(result)
```
Đầu ra của đoạn mã này là gì?
A. 8
B. 15
C. 53
D. Error
22. Cấu trúc cơ bản của một hàm trong Python là gì?
A. class TênLớp: ...
B. if điều_kiện: ...
C. def tên_hàm(tham_số):
# Khối lệnh của hàm
D. for biến in danh_sách: ...
23. Trong định nghĩa hàm `def greet(name):`, name được gọi là gì?
A. Đối số (Argument)
B. Biến toàn cục (Global Variable)
C. Tham số (Parameter)
D. Biến cục bộ (Local Variable)
24. Phát biểu nào sau đây về hàm là KHÔNG đúng?
A. Hàm giúp tái sử dụng mã lệnh.
B. Mỗi hàm phải trả về một giá trị.
C. Hàm giúp chương trình dễ đọc và quản lý hơn.
D. Hàm có thể nhận dữ liệu vào dưới dạng tham số.
25. Python có các loại hàm nào phổ biến?
A. Hàm có sẵn và hàm do người dùng định nghĩa
B. Hàm toàn cục và hàm cục bộ
C. Hàm đệ quy và hàm lặp
D. Hàm tham số và hàm đối số