Trong bài viết này, chúng tôi sẽ thảo luận về cách sử dụng một biến từ một chức năng khác trong Python. Nói chung, các hàm giới hạn phạm vi của các biến vào khối hàm và chúng không thể được truy cập từ bên ngoài hàm.
Chức năng trong Python:
Các chức năng được coi là đối tượng trong Python. Điều đó có nghĩa là chúng có thể được thông qua dưới dạng đối số, được gán và lưu trữ trong các biến. Cũng có thể liên kết các biến với các hàm trong Python. Đây là cách chúng tôi sẽ tiếp cận nhiệm vụ hiện tại là truy cập một biến từ bên ngoài chức năng. Điều này được thực hiện tương tự như cách chúng tôi truy cập các thành viên của một lớp bởi đối tượng của họ bằng cách sử dụng. nhà điều hành.
Cách sử dụng một biến từ một chức năng khác trong Python:
Biến có thể được gán cho đối tượng hàm bên trong phần thân hàm. Vì vậy, biến chỉ tồn tại sau khi hàm được gọi. Khi hàm đã được gọi, biến sẽ được liên kết với đối tượng hàm. Biến này bây giờ có thể được sử dụng ở bất cứ đâu bên trong hoặc bên ngoài bất kỳ chức năng nào. Hãy cùng xem một triển khai mẫu giống nhau trong mã dưới đây.
def function_1[]: # assigning a string as a member of the function object function_1.var = "variable inside function_1" print["function_1 has been called"] def function_2[]: print["function_2 has been called"] print[function_1.var] function_1[] function_2[]
Chạy mã này trực tuyến
Lưu ý rằng hàm_1 phải được gọi là đầu tiên khác, hàm_2 sẽ truy cập một biến chưa được tạo. Chạy cùng một mã mà không có hàm_1 [] sẽ dẫn đến lỗi thuộc tính. Đầu ra cho mã trên như sau:
function_1 has been called function_2 has been called variable inside function_1
Đầu ra giải thích rõ ràng dòng điều khiển bên trong mã. Function_2 truy cập thuộc tính của hàm_1 phải được gọi là đầu tiên. Do đó, tôi hy vọng bạn tìm thấy bài viết này hữu ích trong việc hiểu cách truy cập các biến từ một chức năng khác trong Python.
Xem thêm:
- Các lớp học và đối tượng trong Python
1.2.4.1. Định nghĩa chức năng
In [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function
Cảnh báo
Các khối chức năng phải được thụt vào dưới dạng các khối dòng điều khiển khác.
1.2.4.2. Trở lại tuyên bố
Các chức năng có thể tùy chọn trả về các giá trị.
In [6]: def disk_area[radius]: ...: return 3.14 * radius * radius ...: In [8]: disk_area[1.5] Out[8]: 7.0649999999999995
Ghi chú
Theo mặc định, các chức năng trả về
function_1 has been called function_2 has been called variable inside function_18.
Ghi chú
Theo mặc định, các chức năng trả về
function_1 has been called function_2 has been called variable inside function_18.
- Lưu ý cú pháp để xác định hàm:
- Từ khóa
function_1 has been called function_2 has been called variable inside function_1
9;name, then - được theo sau bởi tên chức năng, sau đó
- Các đối số của hàm được đưa ra giữa các dấu ngoặc đơn sau đó là một đại tràng.
- cơ thể chức năng;
1.2.4.3. Thông số¶
Các tham số bắt buộc [đối số vị trí]
In [81]: def double_it[x]: ....: return x * 2 ....: In [82]: double_it[3] Out[82]: 6 In [83]: double_it[] --------------------------------------------------------------------------- Traceback [most recent call last]: File "", line 1, in TypeError: double_it[] takes exactly 1 argument [0 given]
Tham số tùy chọn [từ khóa hoặc đối số được đặt tên]
In [84]: def double_it[x=2]: ....: return x * 2 ....: In [85]: double_it[] Out[85]: 4 In [86]: double_it[3] Out[86]: 6
Đối số từ khóa cho phép bạn chỉ định các giá trị mặc định.
Cảnh báo
Các giá trị mặc định được đánh giá khi hàm được xác định, không phải khi nó được gọi. Điều này có thể có vấn đề khi sử dụng các loại có thể thay đổi [ví dụ: từ điển hoặc danh sách] và sửa đổi chúng trong cơ thể chức năng, vì các sửa đổi sẽ tồn tại trong các lời mời của hàm.
Sử dụng một loại bất biến trong đối số từ khóa:
In [124]: bigx = 10 In [125]: def double_it[x=bigx]: .....: return x * 2 .....: In [126]: bigx = 1e9 # Now really big In [128]: double_it[] Out[128]: 20
Sử dụng một loại có thể thay đổi trong đối số từ khóa [và sửa đổi nó bên trong cơ thể chức năng]:
In [2]: def add_to_dict[args={'a': 1, 'b': 2}]: ...: for i in args.keys[]: ...: args[i] += 1 ...: print[args] ...: In [3]: add_to_dict Out[3]: In [4]: add_to_dict[] {'a': 2, 'b': 3} In [5]: add_to_dict[] {'a': 3, 'b': 4} In [6]: add_to_dict[] {'a': 4, 'b': 5}
Mẹo
Liên quan hơn là ví dụ thực hiện cắt lát Python:
In [98]: def slicer[seq, start=None, stop=None, step=None]: ....: """Implement basic python slicing.""" ....: return seq[start:stop:step] ....: In [101]: rhyme = 'one fish, two fish, red fish, blue fish'.split[] In [102]: rhyme Out[102]: ['one', 'fish,', 'two', 'fish,', 'red', 'fish,', 'blue', 'fish'] In [103]: slicer[rhyme] Out[103]: ['one', 'fish,', 'two', 'fish,', 'red', 'fish,', 'blue', 'fish'] In [104]: slicer[rhyme, step=2] Out[104]: ['one', 'two', 'red', 'blue'] In [105]: slicer[rhyme, 1, step=2] Out[105]: ['fish,', 'fish,', 'fish,', 'fish'] In [106]: slicer[rhyme, start=1, stop=4, step=2] Out[106]: ['fish,', 'fish,']
Thứ tự của các đối số từ khóa không quan trọng:
In [107]: slicer[rhyme, step=2, start=1, stop=4] Out[107]: ['fish,', 'fish,']
Nhưng đó là cách thực hành tốt để sử dụng cùng một thứ tự như định nghĩa chức năng.
Đối số từ khóa là một tính năng rất thuận tiện để xác định các hàm với số lượng đối số thay đổi, đặc biệt là khi các giá trị mặc định được sử dụng trong hầu hết các cuộc gọi đến hàm.
1.2.4.4. Đi qua giá trị
Mẹo
Bạn có thể sửa đổi giá trị của một biến bên trong một hàm không? Hầu hết các ngôn ngữ [C, Java, Tiết] phân biệt các lần vượt qua bằng giá trị và đường đi qua bởi tham chiếu. Trong Python, một sự khác biệt như vậy có phần giả tạo, và nó hơi tinh tế cho dù các biến của bạn sẽ được sửa đổi hay không. May mắn thay, tồn tại các quy tắc rõ ràng.
Các tham số cho các hàm là các tham chiếu đến các đối tượng, được truyền theo giá trị. Khi bạn chuyển một biến cho một hàm, Python sẽ chuyển tham chiếu đến đối tượng mà biến đề cập đến [giá trị]. Không phải là biến chính nó.value]. Not the variable itself.
Nếu giá trị được truyền trong một hàm là bất biến, hàm không sửa đổi biến người gọi. Nếu giá trị có thể thay đổi, hàm có thể sửa đổi biến người gọi tại chỗ:value passed in a function is immutable, the function does not modify the caller’s variable. If the value is mutable, the function may modify the caller’s variable in-place:
function_1 has been called function_2 has been called variable inside function_10
Các chức năng có một bảng biến cục bộ gọi là không gian tên cục bộ.
Biến
In [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function1 chỉ tồn tại trong hàm
In [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function2.
1.2.4.5. Các biến toàn cầu
Các biến được khai báo bên ngoài hàm có thể được tham chiếu trong hàm:
function_1 has been called function_2 has been called variable inside function_11
Nhưng các biến số toàn cầu của người Viking này không thể được sửa đổi trong hàm, trừ khi được tuyên bố toàn cầu trong hàm.global in the function.
Điều này không hoạt động:
function_1 has been called function_2 has been called variable inside function_12
Những công việc này:
function_1 has been called function_2 has been called variable inside function_13
1.2.4.6. Số lượng tham số biến đổi
Các hình thức đặc biệt của các tham số:In [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function
3: Bất kỳ số lượng đối số vị trí nào được đóng gói thành một bộIn [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function
4: Bất kỳ số lượng đối số từ khóa được đóng gói vào từ điển
function_1 has been called function_2 has been called variable inside function_14
1.2.4.7. Tài liệu
Tài liệu về những gì chức năng làm và các tham số của nó. Hội nghị chung:
function_1 has been called function_2 has been called variable inside function_15
1.2.4.8. Các chức năng là đối tượng
Các chức năng là các đối tượng hạng nhất, có nghĩa là chúng có thể:- được gán cho một biến
- một mục trong danh sách [hoặc bất kỳ bộ sưu tập nào]
- được truyền như một lập luận cho một chức năng khác.
function_1 has been called function_2 has been called variable inside function_16
1.2.4.9. Phương pháp bình
Phương pháp là các hàm gắn liền với các đối tượng. Bạn đã thấy những điều này trong các ví dụ của chúng tôi về danh sách, từ điển, chuỗi, v.v ...
1.2.4.10. Bài tập
Bài tập: Trình tự Fibonacci
Viết một hàm hiển thị các Điều khoản đầu tiên của
In [56]: def test[]: ....: print['in test function'] ....: ....: In [57]: test[] in test function5 của chuỗi Fibonacci, được xác định bởi:
Tập thể dục: Quicksort
Thực hiện thuật toán Quicksort, theo định nghĩa của Wikipedia
function_1 has been called function_2 has been called variable inside function_17