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ả:
def outer():
def inner():
return '+++'
return inner
Hãy ghi lệnh gọi outer vào
biến res:
res = outer()
print(res)
Sau khi thực thi mã, một đối tượng chứa hàm sẽ được hiển thị:
<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ề:
print(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ó:
res = outer()()
print(res) # sẽ in ra '+++'
Cho đoạn mã sau:
def 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.
Cho đoạn mã sau:
def 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.