Hướng dẫn enclosing scope in python - phạm vi kèm theo trong python

Việc khai báo và sử dụng biến là một trong những vấn đề rất cơ bản nhưng hay gặp phải lỗi trong quá trình phát triển. Hôm nay chúng ta sẽ cùng nhau tìm hiểu về phạm vi của biến trong Python.

Python có 3 phạm vi (scope) của biến:

  • Local scope
  • Global scope
  • Enclosing scope

Local scope (Biến cục bộ)

Một biến được khai báo bên trong một hàm (xem bài hàm trong Python) thì phạm vi của biến là local scope. Biến được sử dụng trong nội tại hàm, và tồn tài khi hàm thực thi.

def myfunc():
    x = 100      # local scope x
    print(x)

myfunc()        # prints 100

Biến cục bộ được giải phóng khỏi bộ nhớ khi kết thúc lời gọi hàm.

Global scope (Biến toàn cục)

Biến toàn cục được khai báo bên ngoài tất cả các hàm, trong file code. Phạm vi của biến toàn cục là trong tòa bộ file code.

x = 100          # global scope x

def myfunc():
    print(x)    # giá trị của x là 100 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 100 bên ngoài hàm myfunc

Nếu trong hàm chúng ta khai báo biến cục bộ trùng tên với biến toàn cục thì hệ thống sẽ sử dụng biến cụ bộ.

x = 100          # global scope x

def myfunc():
    x= 200      # local scope x
    print(x)    # giá trị của x là 200 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 100 bên ngoài hàm myfunc

Khi muốn thay đổi giá trị của biến toàn cục bên trong lời gọi hàm, chúng ta sử dụng từ khóa global trước biến:

x = 100          # global scope x

def myfunc():
    global x
    x = 200
    print(x)    # giá trị của x là 200 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 200 bên ngoài hàm myfunc

Enclosing Scope

Enclosing function là hàm mà bên trong nó chứa một hàm khác (nested functions).

Khi chúng ta khai báo một biến bên trong Enclosing function thì biến này không có hiêu lực bên trong hàm nested functions.

# enclosing function
def f1():
    x = 42
    # nested function
    def f2():
        x = 0
        print(x)    # x có giá trị 0
    f2()
    print(x)        # x vẫn có giá trị 42
    
f1()

Biến x không thay đổi giá trị sau lời gọi hàm f2(), vì bản chất hệ thống sẽ khởi tạo bộ nhớ mới cho biến x bên trong hàm f2(). Muốn thay đội giá trị trong quá trình xử lý logic của hàm 2 chúng ta sử dụng từ khóa nonlocal trước biến x:

# enclosing function
def f1():
    x = 42
    # nested function
    def f2():
        nonlocal x
        x = 0
        print(x)    # x is now 0
    f2()
    print(x)        # x có giá trị mới là 0
    
f1()

Biến x lúc này đã ánh xạ đến biến x bên ngoài hàm f2(), và khi chúng ta thay đổi giá trị của x thì giá trị của x bên ngoài hàm f2() cũng được cập nhật.

Scoping Rule – LEGB Rule

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

L phạm vi là biến cụ bộ – Local Scope.phạm vi là biến cụ bộ – Local Scope.

E tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope). tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope).

G Tiếp theo là biến toàn cục – Global scope.Tiếp theo là biến toàn cục – Global scope.

B Cuối cùng là biến có sẵn trong Python – Built-in. Cuối cùng là biến có sẵn trong Python – Built-in.

Hướng dẫn enclosing scope in python - phạm vi kèm theo trong python
Scoping Rule – LEGB Rule

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

L phạm vi là biến cụ bộ – Local Scope.

Việc khai báo và sử dụng biến là một trong những vấn đề rất cơ bản nhưng hay gặp phải lỗi trong quá trình phát triển. Hôm nay chúng ta sẽ cùng nhau tìm hiểu về phạm vi của biến trong Python.

Nội dung chính ShowShow

  • Local scope (Biến cục bộ)
  • Global scope (Biến toàn cục)
  • Enclosing Scope
  • Scoping Rule – LEGB Rule
  • Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

Nội dung chính ShowShowShow

  • Local scope (Biến cục bộ)
  • Global scope (Biến toàn cục)
  • Enclosing Scope
  • Scoping Rule – LEGB Rule
  • Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

Nội dung chính ShowShow

  • Scoping Rule – LEGB Rule
  • Python có 3 phạm vi (scope) của biến:
  • Local scope

Local scope (Biến cục bộ)

Global scope (Biến toàn cục)

def myfunc():
    x = 100      # local scope x
    print(x)

myfunc()        # prints 100

Enclosing Scope

Global scope (Biến toàn cục)

Enclosing Scope

x = 100          # global scope x

def myfunc():
    print(x)    # giá trị của x là 100 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 100 bên ngoài hàm myfunc

Scoping Rule – LEGB Rule

x = 100          # global scope x

def myfunc():
    x= 200      # local scope x
    print(x)    # giá trị của x là 200 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 100 bên ngoài hàm myfunc

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

x = 100          # global scope x

def myfunc():
    global x
    x = 200
    print(x)    # giá trị của x là 200 bên trong hàm myfunc

myfunc()
print(x)        # giá trị của x là 200 bên ngoài hàm myfunc

Enclosing Scope

Scoping Rule – LEGB Rule

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

Nội dung chính ShowShow

Nội dung chính ShowShow

# enclosing function
def f1():
    x = 42
    # nested function
    def f2():
        nonlocal x
        x = 0
        print(x)    # x is now 0
    f2()
    print(x)        # x có giá trị mới là 0
    
f1()

Scoping Rule – LEGB Rule

Scoping Rule – LEGB Rule

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

Nội dung chính ShowShowphạm vi là biến cụ bộ – Local Scope.

Scoping Rule – LEGB Rule tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope).

Python có 3 phạm vi (scope) của biến:Tiếp theo là biến toàn cục – Global scope.

Local scope Cuối cùng là biến có sẵn trong Python – Built-in.

Scoping Rule – LEGB Rule

Khi một biến được tham chiếu ( được sử dụng trong một logic nào đó) Python sẽ tuân theo LEGB rule với 4 phạm vi của biến theo mức độ:

Nội dung chính ShowShow

Scoping Rule – LEGB Rule

Python có 3 phạm vi (scope) của biến:

Local scope

Global scope

Enclosing scope

# enclosing function
def f1():
    x = 42
    # nested function
    def f2():
        x = 0
        print(x)    # x có giá trị 0
    f2()
    print(x)        # x vẫn có giá trị 42
    
f1()

Python có 3 phạm vi (scope) của biến:phạm vi là biến cụ bộ – Local Scope.

Local scope tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope).

Global scopeTiếp theo là biến toàn cục – Global scope.

Enclosing scope Cuối cùng là biến có sẵn trong Python – Built-in.

Một biến được khai báo bên trong một hàm (xem bài hàm trong Python) thì phạm vi của biến là local scope. Biến được sử dụng trong nội tại hàm, và tồn tài khi hàm thực thi.

Biến cục bộ được giải phóng khỏi bộ nhớ khi kết thúc lời gọi hàm.

Biến toàn cục được khai báo bên ngoài tất cả các hàm, trong file code. Phạm vi của biến toàn cục là trong tòa bộ file code.

Nếu trong hàm chúng ta khai báo biến cục bộ trùng tên với biến toàn cục thì hệ thống sẽ sử dụng biến cụ bộ.

Khi muốn thay đổi giá trị của biến toàn cục bên trong lời gọi hàm, chúng ta sử dụng từ khóa global trước biến:

Enclosing function là hàm mà bên trong nó chứa một hàm khác (nested functions).

Khi chúng ta khai báo một biến bên trong Enclosing function thì biến này không có hiêu lực bên trong hàm nested functions.

Biến x không thay đổi giá trị sau lời gọi hàm f2(), vì bản chất hệ thống sẽ khởi tạo bộ nhớ mới cho biến x bên trong hàm f2(). Muốn thay đội giá trị trong quá trình xử lý logic của hàm 2 chúng ta sử dụng từ khóa nonlocal trước biến x:

Biến x lúc này đã ánh xạ đến biến x bên ngoài hàm f2(), và khi chúng ta thay đổi giá trị của x thì giá trị của x bên ngoài hàm f2() cũng được cập nhật.

L phạm vi là biến cụ bộ – Local Scope.phạm vi là biến cụ bộ – Local Scope.

E tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope). tiếp theo là biến cục bộ trong các enclosing function and lambdas – ( Enclosing Scope).

G Tiếp theo là biến toàn cục – Global scope.Tiếp theo là biến toàn cục – Global scope.

B Cuối cùng là biến có sẵn trong Python – Built-in. Cuối cùng là biến có sẵn trong Python – Built-in.

L phạm vi là biến cụ bộ – Local Scope.

Hướng dẫn python yaml add key

I have the following YAML file. I need to update the YAML file with a new key-value pair using python.I am doing the following but, it gives me error:pod = ...

How does threads work in python?

Watch Now This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Threading in PythonPython threading ...

Giao tiếp arduino với python

Hướng dẫn đặt hàngBảo hành & đổi trả hàngGia Công SMT Hà Nội Đăng nhập VỀ ĐIỆN TỬ HAYSố 87, Hoàng Ninh, Việt Yên, Bắc GiangMIỄN PHÍ SHIP Khoảng ...

Hướng dẫn dùng python pipe python

Miêu tảPhương thức pipe() tạo một pipe. Trả về một cặp (r, w) có thể sử dụng để đọc và viết tương ứng.Cú phápCú pháp của pipe() trong Python:os.pipe() Chi ...

How to print square in python

In Mathematics, a square is a result of multiplying a number by itself. That multiplication is done just once, like so: n x n. That makes squaring the same as raising the number to the ...

Hướng dẫn random sample trong python

26. Random một số trong pythonRandom và “secrets” module, bộ tạo số giả ngẫu nhiên mặc định của random module được thiết kế với trọng tâm vào mô phỏng ...

Hướng dẫn in python 3

Python hiện là một trong những ngôn ngữ lập trình phổ biến nhất thế giới. Python đặc biệt phổ biến trong cộng đồng nghiên cứu. Tuy vậy Python không bị ...

Hướng dẫn json add key-value python

This may sound like an average question, but I havent found a good answer to what I am trying to do.Take d.json:{SDA:{Info:{Description:Anti Advertisment Bot, Blocks invites ...

Hướng dẫn dùng pandas.concat python

Trong chuỗi các bài học tiếp theo sẽ đề cập đến kĩ thuật merging dataframe. Xuất phát từ yêu cầu thực tế là chúng ta cần đọc dữ liệu tồn tại dưới ...

How to perform a mann-whitney u test in python

scipy.stats.mannwhitneyu(x, y, use_continuity=True, alternative=two-sided, axis=0, method=auto, *, nan_policy=propagate, keepdims=False)[source]#Perform the Mann-Whitney U rank test on ...

Convert datetime to string python

The strftime() method returns a string representing date and time using date, time or datetime object.Example 1: datetime to string using strftime()The program below converts a datetime object ...

How do you find the median in python manually?

View DiscussionImprove ArticleSave ArticleReadDiscussView DiscussionImprove ArticleSave ArticleIn this article, we will learn how to calculate Mean, Median, and Mode with Python without using ...

Trong nnlt python cú pháp ghi tệp

Lập trình Python1. Tìm hiểu về kiểu tệp– Tệp (file) hay còn gọi là tập tin dùng để chứa các thông tin được đặt tên và lưu trữ trên bộ nhớ máy tính ...

Hướng dẫn hashmap get python

Mục lục Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi ...

Hướng dẫn python setter without getter

class My_Class: def __init__(self): self._x = 0 @property def x(self): return self._x @x.setter def x(self, x): self._x = x If I delete the following ...

Hướng dẫn syntax trong python

Python là ngôn ngữ khá giống với Perl, C và Java. Tuy nhiên có một vài điểm khác biệt rõ rệt với các ngôn ngữ trên.Nội dung của bài1 Cách hoạt động của ...

Hướng dẫn unique python

Mô-đun numpy của Python cung cấp một hàm để tìm các phần tử duy nhất trong một mảng numpy. Hàm numpy.unique () tìm các phần tử duy nhất của một mảng và trả ...

Python setup.py install invalid syntax

I am new to python and am trying to do web scraping, but I keep getting a syntax error every time I try to install a library. I have tried installing both mechanize and mechanoid. I change the ...

Hướng dẫn encoding trong python

Làm cách nào để in văn bản được mã hóa UTF-8 vào bảng điều khiển bằng Python

Print comma separated list python

Pass sep=, as an argument to print()You are nearly there with the print statement. There is no need for a loop, print has a sep parameter as well as end.>>> print(*range(5), sep=, ) 0, ...

Hướng dẫn python flask tutorial

Loạt bài viết này sẽ hướng dẫn lập bạn cách tạo ra một ứng dụng Web đơn giản với Python và Flask framework.Để giúp cho bạn dễ theo dõi, sau đây là danh ...

Loại ngôn ngữ lập trình là Python?

Lưu ý: Mặc dù JavaScript không cần thiết cho trang web này, nhưng sự tương tác của bạn với nội dung sẽ bị hạn chế.Vui lòng bật JavaScript để có kinh nghiệm đầy đủ.Python là gì?Chấp hành, quản lý ...