Python: Lời gọi hàm (Call the function)
Giải phóng thời gian, khai phóng năng lực
Lời gọi hàm
Các hàm thường giao tiếp hay gọi đến nhau bằng lời gọi hàm (call function). Việc giao tiếp hay gọi đến nhau của các hàm có thể thông qua việc truyền đối số.
Cú pháp gọi hàm:
tên_hàm(danh_sách_đối_số)
trong đó,
danh_sách_đối_số: Nếu phần định nghĩa hàm có danh_sách_tham_số thì bắt buộc phải có danh_sách_đối_số với số lượng phải bằng với số lượng tham số trong danh_sách_tham_số. Bản chất của danh_sách_đối_số là các dữ liệu (giá trị) muốn truyền đi.
Ví dụ:
#định nghĩa hàm def tinhTong(a, b): print(a,"+",b,"=",a+b) tinhTong(1, 2) #lời gọi hợp lệ, 1 được truyền cho a, 2 được truyền cho b tinhTong(1) #lời gọi không hợp lệ, 1 được truyền cho a, nhưng không có dữ liệu truyền cho b tinhTong(1, 2, 3) #lời gọi không hợp lệ vì số lượng dữ liệu truyền đi vượt quá số lượng tham số nhận
Truyền dữ liệu
Tất cả các đối số trong ngôn ngữ Python đều được truyền bằng tham chiếu. Điều này có nghĩa là ta có thể thay đổi giá trị của biến bên trong hàm gọi tại hàm được gọi.
Ví dụ:
#định nghĩa hàm swap() def swap(myList): tg=myList[0] myList[0]=myList[1] myList[1]=tg #định nghĩa hàm main() def main(): a=5 b=10 myList=[a,b]; swap(myList) #gọi tới hàm swap truyền đi list a=myList[0] b=myList[1] print(a,b) #in ra kết quả sau khi swap, a=10 và b=5 main()
Tuy nhiên, có một ví dụ sau đây trong đó đối số được truyền bằng tham chiếu nhưng tham chiếu lại bị ghi đè bên trong hàm được gọi, và điều này dẫn đến dữ liệu trong myList không thay đổi được ở hàm gọi.
Ví dụ:
def swap(myList): myList=[9,10] def main(): a=5 b=10 myList=[a,b]; swap(myList) a=myList[0] b=myList[1] print(a,b) #a vẫn chứa 5, b vẫn chứa 10 main()
Trong ví dụ trên, trong hàm swap() thì tham số myList là cục bộ, và điều này dẫn đến việc mặc dù thay đổi myList bên trong hàm nhưng không ảnh hưởng đến myList trong hàm main(). Kết quả là không hoán đổi giá trị của hai biến a và b cho nhau được.
Giải phóng thời gian, khai phóng năng lực