Hướng dẫn variable scope 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.

E 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.

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

Hướng dẫn variable scope python
Scoping Rule – LEGB Rule

Kết luận

Hiểu rõ về phạm vi của biến giúp chúng ta xây dựng chương trình tối ưu và tránh gặp phải những lỗi cơ bản.

Hướng dẫn python co_code

Đã đăng vào thg 10 22, 2019 6:12 CH 3 phút đọc Chào các bạn!Gần đây mình có tìm hiểu về ngôn ngữ Python, khi tiếp cận với 1 ngôn ngữ mới thường mình không ...

Should i learn excel or python reddit

Hi there guys. My university has just started offering free coursera.org online courses, giving us the opportunity to convert those in valid credits.Im currently studying management with a glimpse ...

Hướng dẫn python update instance attributes

if updating one property due to an update on another property is what youre looking for (instead of recomputing the value of the downstream property on access) use property setters:Nội dung ...

Data cleaning in python jupyter notebook

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: Data Cleaning With pandas and NumPyData ...

Python requests self signed certificate

import requests data = {foo:bar} url = https://foo.com/bar r = requests.post(url, data=data) If the URL uses a self signed certificate, this fails with requests.exceptions.SSLError: [Errno 1] ...

How to print list in list python

I have a list of lists: a = [[1, 3, 4], [2, 5, 7]] I want the output in the following format:1 3 4 2 5 7 I have tried it the following way , but the outputs are not in the desired way:for i in a: ...

How to read column name from excel in python

Hello, readers! In this article, we will be focusing on different ways to print column names in Python.So, let us get started!First, where do you find columns in Python?We often come across questions ...

Hướng dẫn python class attributes list

Mỗi class thường chứa hai loại thành viên quan trọng: thành phần chứa dữ liệu và thành phần xử lý dữ liệu. Trong Python, thành phần chứa dữ liệu được ...

Can a list be input in python?

Sometimes while coding in Python, you will need to take a list as an input. While this might sound simple at first, it is often regarded as a complex task to accomplish for a beginner. This article ...

Parts of a for loop 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: For Loops in Python (Definite ...

Hướng dẫn dùng loop mean python

Nội dung chính2- Tổng quan các vòng lặp trong Python 2- Vòng lặp while 3- Vòng lặp for với range 4- Sử dụng for và mảng 5- Sử dụng lệnh break trong vòng lặp 6- Sử ...

Hướng dẫn list function python

1. Giới thiệu về List trong PythonCấu trúc dữ liệu cơ bản nhất trong Python được gọi là sequence, dùng để lưu trữ các danh sách (list). Trong sequence, mỗi phần ...

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 <3?print usome unicode text N{EURO SIGN} print bsome utf-8 encoded bytestring ...

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 ...

What type of programming language is python?

Notice: While JavaScript is not essential for this website, your interaction with the content will be limited. Please turn JavaScript on for the full experience. What is Python? Executive ...