Xin chào
Mình có chút thắc mắc về tham số mặc định - biến cục bộ trong python mong được giải đáp.
Ta có 1 ví du về tham số mặc định, biến cục bộ trong c/c++
#include <iostream>
using namespace std;
int test(int a, int b = 1){
b += a;
return b;
}
int main(){
cout << test(1) << endl << test(2);
return 0;
}
kết quả
2
3
1 vài nhận xét:
- b là tham số mặc định, biến cục bộ (khi không được truyền vào sẽ sử dụng)
- b được tạo ra cho từng lần gọi hàm
- b chỉ tồn tại đến cuối hàm test là bị hủy
- b không thể gọi được từ bên ngoài hàm
Tiếp đến ta xem 1 ví dụ bên python
def f(i, values=[]):
values.append(i)
return values
f(1)
f(2)
v = f(3)
print(v)
kết quả
[1, 2, 3]
1 vài nhận xét:
- values là 1 list - tham số mặc định
- values là 1 biến cục bộ, bên ngoài k gọi được
- values tồn tại đến khi nào mình k biết, nhưng chạy xong hàm f thì vẫn còn tồn tại (mình nghĩ ít nhất đến khi thu hồi thủ công hoặc khi chương trình bị tắt thì nó mới mất) điều này khác với c/c++ chỉ tồn tại đến cuối hàm
- values được tạo ra cho n lần gọi hàm
ở trên thì 2 ý cuối:
- values tồn tại đến khi nào mình k biết, nhưng chạy xong hàm f thì vẫn còn tồn tại (mình nghĩ ít nhất đến khi thu hồi thủ công hoặc khi chương trình bị tắt thì nó mới mất) điều này khác với c/c++ chỉ tồn tại đến cuối hàm
- values được tạo ra cho n lần gọi hàm (khác với c/c++, tạo ra cho từng lần gọi)
mình thấy khác c/c++, vậy cơ chế hoạt động của biến cục bộ - tham số mặc định trong python là ntn, biến values sẽ tồn tại đến khi nào thì bị hủy?
Xin cảm ơn