Sắc thái khi làm việc với hàm bên trong trong Python

Trong Python có thể không chỉ có các hàm lồng nhau, mà một hàm còn có thể trả về một hàm khác. Ví dụ, giả sử hàm outer trả về mã nguồn của hàm inner như kết quả:

pythondef outer():
  def inner():
    return '+++'

  return inner

Hãy ghi lệnh gọi outer vào biến res:

pythonres = outer()
print(res)

Sau khi thực thi mã, một đối tượng chứa hàm sẽ được hiển thị:

python<function outer.<locals>.inner at 0x000001564A212B90>

Nếu gọi biến res với dấu ngoặc tròn, thì thông báo '+++' sẽ được trả về:

pythonprint(res()) # sẽ in ra '+++'

Có thể viết lại mã sao cho vào res ghi outer với hai dấu ngoặc tròn - để gọi chính nó và hàm inner. Từ đó suy ra, có thể ghi thêm các dấu ngoặc tròn bên phải của hàm ngoài theo số lượng hàm được lồng vào nó:

pythonres = outer()()
print(res) # sẽ in ra '+++'
Задание 1

Cho đoạn mã sau:

pythondef outer():
  def inner(num):
    return num + 2

  return inner
  
res = outer()(3)
print(res)

Hãy cho biết, điều gì sẽ được in ra console.

Задание 2

Cho đoạn mã sau:

pythondef outer():
  def inner(txt):
    return 'hello, ' + txt

  return inner
  
res = outer()
print(res)

Hãy cho biết, điều gì sẽ được in ra console.