Cổng Khoa học Máy tính dành cho những người yêu thích máy tính. Nó bao gồm các bài báo về khoa học máy tính và lập trình được viết tốt, tư duy tốt và được giải thích tốt, các câu đố và thực hành / lập trình cạnh tranh / các câu hỏi phỏng vấn công ty.

Bạn đang xem : biến truy cập bên trong hàm python

Trong Python, các hàm được coi như đối tượng lớp đầu tiên. Các đối tượng hạng nhất trong một ngôn ngữ được xử lý thống nhất trong suốt. Chúng có thể được lưu trữ trong cấu trúc dữ liệu, được truyền dưới dạng đối số hoặc được sử dụng trong cấu trúc điều khiển. Một ngôn ngữ lập trình được cho là hỗ trợ các hàm hạng nhất nếu nó coi các hàm như các đối tượng hạng nhất. Python hỗ trợ khái niệm về các hàm lớp Một.

Thuộc tính của các hàm lớp một:

  • Một hàm là một thể hiện của kiểu Đối tượng. < / li>
  • Bạn có thể lưu trữ hàm trong một biến.
  • Bạn có thể chuyển hàm dưới dạng tham số cho một hàm khác.
  • Bạn có thể trả về hàm từ một hàm.
  • Bạn có thể lưu trữ chúng trong các cấu trúc dữ liệu như bảng băm, danh sách,…

Lưu ý: Để biết thêm về các đối tượng hạng nhất < span rel = "noopener" target = "_ blank"> nhấp vào đây .

Các chức năng bên trong

Một chức năng mà được định nghĩa bên trong một hàm khác được gọi là hàm bên trong hoặc hàm lồng nhau n. Các hàm lồng nhau có thể truy cập các biến của phạm vi bao quanh. Các hàm bên trong được sử dụng để chúng có thể được bảo vệ khỏi mọi thứ xảy ra bên ngoài hàm. Quá trình này còn được gọi là Encapsulation . Để biết thêm về cách đóng gói hãy nhấp vào đây .

Ví dụ:

< p class = "line number1 index0 alt2">

def < / code> externalFunction (text):

văn bản = văn bản

def innerFunction ():

print (text)

innerFunction () < / code>

if __ name__ = = '__ main__' :

externalFunction ( 'Này!' )

 
 

Đầu ra:

Chào!

Trong ví dụ trên, innerFunction () đã được định nghĩa bên trong externalFunction (), làm cho nó trở thành một hàm bên trong. Để gọi hàm innerFunction (), trước tiên chúng ta phải gọi hàm ngoài (). Sau đó, hàm bên ngoài sẽ tiếp tục và gọi hàm bên trong () vì nó đã được định nghĩa bên trong nó.

Điều quan trọng là hàm bên ngoài phải được gọi để hàm bên trong có thể thực thi. Để chứng minh điều này, hãy xem xét ví dụ dưới đây:
Ví dụ:

def externalFunction (text):

text = text

< p class = "line number6 index5 alt1"> def innerFunction ():

print (text)

innerFunction ()

 
 

Đầu ra: < / strong>

Mã này sẽ không trả về gì khi được thực thi.

Phạm vi của biến trong hàm lồng nhau

Vị trí mà chúng ta có thể tìm thấy một biến và cũng có thể truy cập nó nếu cần được gọi là phạm vi của một biến.
Nó được biết như thế nào để truy cập biến toàn cục bên trong một hàm, nhưng, còn việc truy cập biến của một hàm bên ngoài thì sao? Hãy xem một ví dụ:

def f1 ():

s = 'Tôi yêu GeeksforGeeks'

< / code> def f2 ():

< code class = "undefined space">

f2 ( )

f1 ()

 
 

Đầu ra:

Tôi yêu GeeksforGeeks

Trong ví dụ trên, có thể thấy rằng việc truy cập biến toàn cục từ một hàm cũng tương tự như vậy. Bây giờ, giả sử bạn muốn thay đổi biến của hàm ngoài.

def f1 ():

s = 'I love GeeksforGeeks '

< code class = "undefined space"> def f2 ():

s = 'Tôi cũng vậy'

print (s)

f2 ()

print (s)

f1 ()

 
 

Đầu ra:

Tôi cũng thế
Tôi yêu GeeksforGeeks

Có thể thấy giá trị của biến của hàm ngoài không thay đổi. Tuy nhiên, giá trị của biến của hàm ngoài có thể được thay đổi. Có nhiều cách khác nhau để thay đổi giá trị của biến của hàm ngoài.

  • Sử dụng biến có thể lặp lại -

    < p class = "line number4 index3 alt1">

    def f1 ():

    s = [ 'I love GeeksforGeeks' ]

    def f2 (): < / p>

    s [ 0 ] = 'Tôi cũng vậy'

    < code class = "undefined space"> print (s)

    f2 ()

    print (s)

    < p class = "line number15 index14 alt2">

    f1 ()

     
      

    Đầu ra:

    ['Tôi cũng thế']
    ['Tôi cũng thế']
    
  • Sử dụng từ khóa phi địa phương -

    < p class = "line number3 index2 alt2">

    def f1 ():

    s = 'I love GeeksforGeeks' < / code>

    def f2 ():

    không địa phương s

    s = 'Tôi cũng vậy'

    print (s)

    f2 ()

    print (s)

    < / code>

    f1 ()

     

    Đầu ra:

    Tôi cũng thế
    Tôi cũng thế
    
  • Giá trị cũng có thể được thay đổi như trong ví dụ dưới đây.

    def f1 ():

    f1.s = 'Tôi yêu GeeksforGeeks'

    def f2 ():

    f1.s = 'Tôi cũng vậy'

    print (f1.s)

    f2 ()

    print < / code> (f1.s)

    f1 ()

     
     

    Đầu ra:

    Tôi cũng thế
    Tôi cũng thế
    

Closures trong Python

Clos là một đối tượng hàm ghi nhớ các giá trị trong phạm vi bao quanh ngay cả khi chúng không có trong bộ nhớ.

< ul>

  • Đây là một bản ghi lưu trữ một hàm cùng với một môi trường: một ánh xạ liên kết từng biến miễn phí của hàm (các biến được sử dụng cục bộ, nhưng được xác định trong một phạm vi bao quanh) với giá trị hoặc tham chiếu mà tên đã bị ràng buộc khi bao đóng được tạo.
  • Bao đóng — không giống như một hàm thuần túy — cho phép hàm truy cập các biến đã thu thập đó thông qua các bản sao của bao đóng của các giá trị hoặc tham chiếu của chúng, ngay cả khi hàm được gọi ra bên ngoài phạm vi của chúng .
    filter_none.
  • < p class = "line number3 index2 alt2"> def < / code> văn bản = văn bản

    def innerFunction ():

    print (text)

    return innerFunction

    nếu __ name__ = = '__ main__' :

    myFunction = externalFunction ( 'Này!' )

    myFunction ()

     
     

    Đầu ra:

    Chào!
    
    • Như đã quan sát từ đoạn mã trên, các bao đóng giúp gọi hàm bên ngoài phạm vi của chúng.
    • Hàm innerFunction chỉ có phạm vi bên trong hàm bên ngoài. Nhưng với việc sử dụng các bao đóng, chúng ta có thể dễ dàng mở rộng phạm vi của nó để gọi một hàm bên ngoài phạm vi của nó.

    < / p>

    nhập ghi nhật ký < / p>

    logging.basicConfig (tên tệp = 'example.log' , level = logging.INFO)

    def trình ghi (func):

    def < code class = "trơn"> log_func ( * args):

    logging.info (

    'Đang chạy "{}" với các đối số {}' . < code class = "functions"> format (func .__ name__, args))

    print (func ( * args))

    return log_func

    def thêm (x, y):

    trả về x + y

    def sub (x, y): < / code>

    return x - y

    add_logger = trình ghi (thêm)

    sub_logger = logger (sub)

    add_logger ( 3 , 3 )

    add_logger ( 4 , 5 )

    sub_logger ( 10 , 5 )

    sub_logger ( 20 , 10 )

     
      

    Đầu ra:

    6
    9
    5
    10
    

    Ghi chú cá nhân của tôi


    Xem thêm những thông tin liên quan đến chủ đề truy cập biến bên trong hàm python

    Truy cập điểm ảnh và vùng ảnh trong OpenCV Python - Bài 5

    • Tác giả: Học Kỹ Thuật Channel
    • Ngày đăng: 2021-06-07
    • Đánh giá: 4 ⭐ ( 8098 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: TruyCapDiemAnhOpenCV XuLyAnhOpenCV
      Truy cập điểm ảnh
      Truy cập thuộc tính ảnh
      Tách kênh bức ảnh

    Hàm trong Python

    • Tác giả: hoclaptrinh.vn
    • Đánh giá: 5 ⭐ ( 9816 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Trong các chương trước, bạn đã làm quen với một số hàm đã được xây dựng sẵn trong Python, điển hình như hàm print().

    Biến toàn cục và biến cục bộ trong Python

    • Tác giả: laptrinhtudau.com
    • Đánh giá: 4 ⭐ ( 4889 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Biến toàn cục và biến cục bộ trong Python - Lập Trình Từ Đầu 8 Hàm trong Python

    Bài 03. Biến Trong python (Variables)

    • Tác giả: pythonnangcao.com
    • Đánh giá: 3 ⭐ ( 8012 lượt đánh giá )
    • Khớp với kết quả tìm kiếm:

    Python tương đương với các biến tĩnh bên trong một hàm là gì?

    • Tác giả: qastack.vn
    • Đánh giá: 5 ⭐ ( 9981 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Một chút đảo ngược, nhưng điều này sẽ làm việc: def foo(): foo.counter += 1 print…

    Hàm trong Python

    • Tác giả: viettuts.vn
    • Đánh giá: 3 ⭐ ( 3118 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Hàm trong Python là một khối lệnh được tổ chức và có thể tái sử dụng, để thực hiện một hành động nào đó.Ví dụ print() là một hàm được xây dựng sẵn.

    Biến Trong Python

    • Tác giả: techacademy.edu.vn
    • Đánh giá: 5 ⭐ ( 6433 lượt đánh giá )
    • Khớp với kết quả tìm kiếm: Techacademy sẽ giới thiệu với các bạn về BIẾN TRONG PYTHON. Một phần tuy cơ bản nhưng rất quan trọng trong lập trình và nó sẽ theo bạn mãi cho tới khi bạn còn code. I. Trong Python Biến Là Gì Có hai trường phái định nghĩa biến trong python như sau: Trường phái đầu tiên […]

    Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

    Xem Thêm  Liên kết HTML Siêu liên kết - siêu liên kết html tab mới

    By ads_php