Hướng dẫn variable inside a function python - biến bên trong một hàm python


Biến toàn cầu

Các biến được tạo ra bên ngoài một hàm (như trong tất cả các ví dụ trên) được gọi là các biến toàn cầu.

Show

Các biến toàn cầu có thể được sử dụng bởi tất cả mọi người, cả bên trong các chức năng và bên ngoài.

Thí dụ

Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm

x = "tuyệt vời"

def myfunc (): & nbsp; in ("Python là" + x)
  print("Python is " + x)

myfunc()

Hãy tự mình thử »

Nếu bạn tạo một biến có cùng tên bên trong một hàm, biến này sẽ là cục bộ và chỉ có thể được sử dụng bên trong hàm. Biến toàn cầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.

Thí dụ

Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm

x = "tuyệt vời"

def myfunc (): & nbsp; in ("Python là" + x)
  x = "fantastic"
  print("Python is " + x)

myfunc()

Hãy tự mình thử »

Hãy tự mình thử »



Nếu bạn tạo một biến có cùng tên bên trong một hàm, biến này sẽ là cục bộ và chỉ có thể được sử dụng bên trong hàm. Biến toàn cầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.

Tạo một biến bên trong một hàm, với cùng tên với biến toàn cầu

def myfunc (): & nbsp; x = "tuyệt vời" & nbsp; in ("Python là" + x)

Thí dụ

Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm

x = "tuyệt vời"
  global x
  x = "fantastic"

myfunc()

Hãy tự mình thử »

Hãy tự mình thử »

Nếu bạn tạo một biến có cùng tên bên trong một hàm, biến này sẽ là cục bộ và chỉ có thể được sử dụng bên trong hàm. Biến toàn cầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.

Tạo một biến bên trong một hàm, với cùng tên với biến toàn cầu

def myfunc (): & nbsp; x = "tuyệt vời" & nbsp; in ("Python là" + x)

x = "tuyệt vời"

def myfunc (): & nbsp; in ("Python là" + x)
  global x
  x = "fantastic"

myfunc()

Hãy tự mình thử »

Hãy tự mình thử »



Bạn có thể sử dụng phạm vi mô -đun. Giả sử bạn có một mô -đun gọi là

>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
3:

f_value = 'foo'

def f():
    return f_value

>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
4 là một thuộc tính mô -đun có thể được sửa đổi bởi bất kỳ mô -đun nào khác nhập nó. Vì các mô -đun là đơn lẻ, bất kỳ thay đổi nào đối với
>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
3 từ một mô -đun sẽ có thể truy cập được cho tất cả các mô -đun khác đã nhập:

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'

Lưu ý rằng bạn có thể nhập chức năng theo tên:

>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'

Nhưng không phải là thuộc tính:

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'

Điều này là do bạn đang dán nhãn đối tượng được tham chiếu bởi thuộc tính mô -đun là

>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
4 trong phạm vi cục bộ, nhưng sau đó chuyển nó thành chuỗi
>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
7, trong khi hàm
>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
8 vẫn đang đề cập đến thuộc tính mô -đun.

Bài đăng này lần đầu tiên giới thiệu các hàm lồng nhau và sau đó các phạm vi khác nhau của các biến như các biến toàn cầu, các biến cục bộ trong các hàm, v.v., và cuối cùng, các đóng cửa sử dụng hàm lồng nhau trong Python.

Bạn có thể tìm hiểu về chức năng của Python từ khóa học Python của chúng tôi và bài đăng này.

Chức năng lồng nhau


Giống như các vòng lặp lồng nhau, chúng ta cũng có thể có các chức năng lồng nhau trong Python. Chúng tôi chỉ cần tạo một chức năng bằng cách sử dụng def bên trong một chức năng khác để làm tổ hai hàm. Ví dụ,

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()

Đầu ra

>> import utils
>> from utils import f
>> utils.f_value = 'bar'
>> f()
'bar'
9

def f1(): #outer function
    x = 1 #variable defined in f1 function
    def f2(a): #inner function
        print (a+x) #able to acces the variable of outer function
    f2(2)

f1()

Đầu ra

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
0

Điều này có vẻ khá đơn giản. Bạn có thể thấy rằng chúng tôi cũng truy cập các biến của hàm bên ngoài từ hàm bên trong. Vì vậy, chúng ta hãy cố gắng thay đổi các biến của hàm bên ngoài từ bên trong.

def f1(): #outer function
    x = 1 # variable defined in the outer function
    def f2(a): #inner function
       #will create a new variable in the inner function
       #instead of changing the value of x of outer function
        x = 4
        print (a+x)
    print (x) # prints the value of x of outer function
    f2(2)

f1()

Đầu ra

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
1

Điều này có vẻ khá đơn giản. Bạn có thể thấy rằng chúng tôi cũng truy cập các biến của hàm bên ngoài từ hàm bên trong. Vì vậy, chúng ta hãy cố gắng thay đổi các biến của hàm bên ngoài từ bên trong.

Từ hai ví dụ trên, bạn có thể thấy rằng chúng ta có thể in các biến của hàm bên ngoài từ mục bên trong nhưng không thể thay đổi nó. >> from utils import f, f_value >> f_value = 'bar' >> f() 'foo' 2 đã tạo một biến mới có tên 'X' bên trong hàm F2 thay vì thay đổi giá trị của biến 'X' của hàm F1. Vì vậy, trước khi chuyển sang các cuộc thảo luận nhiều hơn về các chức năng lồng nhau, chúng ta hãy biết về phạm vi của các biến trong Python trước, tức là, nơi các biến sống và từ nơi chúng ta có thể truy cập chúng.


Phạm vi của các biến

Vị trí nơi chúng ta có thể tìm thấy một biến và cũng truy cập nó nếu được yêu cầu được gọi là phạm vi của một biến. Vì vậy, chúng ta hãy tìm hiểu những phạm vi này là gì.


Các biến địa phương và toàn cầu

def f1():
    a = 5
f1()
#a can't be accessed outside the function f1
print (a) # will give error

Một biến trong một hàm trong Python là một biến cục bộ nếu nó không được khai báo là một thứ khác. Một biến cục bộ chỉ có thể được truy cập tại địa phương, một biến được xác định bên trong một hàm chỉ có thể truy cập được vào hàm đó và không thể được sử dụng bên ngoài hàm.

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
3
>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
4
>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
5

Đầu ra

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
3
>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
4
>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
5

Bạn có thể thấy rằng biến 'A' được tạo bên trong hàm là một biến cục bộ và không thể truy cập được bên ngoài hàm.

a = 5
def f1():
    print (a) # will print 5

f1()

Ngoài ra, chúng ta có thể truy cập từ một hàm các biến được xác định bên ngoài hàm đó nhưng không thể sửa đổi chúng.

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
6

Đầu ra

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
6

a = 1
def f1():
    a = 5
    print (a) #will print 5

print (a) #will print 1

f1()

Đầu ra

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
7

Điều này có vẻ khá đơn giản. Bạn có thể thấy rằng chúng tôi cũng truy cập các biến của hàm bên ngoài từ hàm bên trong. Vì vậy, chúng ta hãy cố gắng thay đổi các biến của hàm bên ngoài từ bên trong.

Từ hai ví dụ trên, bạn có thể thấy rằng chúng ta có thể in các biến của hàm bên ngoài từ mục bên trong nhưng không thể thay đổi nó.

>> from utils import f, f_value
>> f_value = 'bar'
>> f()
'foo'
2 đã tạo một biến mới có tên 'X' bên trong hàm F2 thay vì thay đổi giá trị của biến 'X' của hàm F1. Vì vậy, trước khi chuyển sang các cuộc thảo luận nhiều hơn về các chức năng lồng nhau, chúng ta hãy biết về phạm vi của các biến trong Python trước, tức là, nơi các biến sống và từ nơi chúng ta có thể truy cập chúng.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
0

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
0
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
0

Xin lưu ý rằng không giống như các ngôn ngữ khác như C, Python không có bất kỳ phạm vi riêng nào cho các vòng lặp, nếu/khác, v.v. Do đó, việc thay đổi các biến bên trong một vòng lặp cũng sẽ thay đổi biến toàn cầu.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
1

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
1
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
1

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
2

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
2
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
2

Sau khi hiểu các biến toàn cầu và địa phương, hãy đi sâu vào phạm vi của các biến trong các hàm lồng nhau.

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


Chúng ta đã biết cách truy cập một biến toàn cầu tạo thành một hàm. & NBSP; Trong phần này, chúng tôi sẽ tìm hiểu về việc truy cập và thay đổi các biến của hàm bên ngoài từ bên trong. Vì vậy, trước tiên chúng ta hãy cố gắng in một biến của hàm bên ngoài từ bên trong.
In this section, we will learn about accessing and changing the variables of an outer function from the inner one. So, first let's try to print a variable of an outer function from the inner one.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
3

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
3
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
3

Bạn có thể thấy rằng chúng tôi có thể in biến của hàm bên ngoài. Điều này tương tự như in một biến toàn cầu từ một hàm.

Hãy cố gắng thay đổi giá trị của biến của hàm bên ngoài.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
4

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
4
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
4

Bạn có thể thấy rằng chúng ta không thể thay đổi giá trị của biến của hàm bên ngoài từ bên trong.

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
5 đã tạo một biến cục bộ mới của hàm F2 thay vì thay đổi giá trị 'A' từ hàm F1.

Có nhiều cách khác nhau để thay đổi giá trị của biến cục bộ của hàm bên ngoài từ hàm bên trong. Cách đầu tiên là sử dụng một điều khác.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
5

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6

Chúng ta cũng có thể thay đổi giá trị của biến như trong ví dụ tiếp theo.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
6


Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6

Chúng ta cũng có thể thay đổi giá trị của biến như trong ví dụ tiếp theo.

Cách thứ ba là sử dụng từ khóa không thuộc địa. Xin lưu ý rằng từ khóa

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
8 chỉ hoạt động với Python3. Bạn có thể sử dụng bất kỳ cách nào trong hai cách được đề cập ở trên để thay đổi giá trị của biến trong Python2.

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
7

Đầu ra

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6
def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
6

Chúng ta cũng có thể thay đổi giá trị của biến như trong ví dụ tiếp theo.

Cách thứ ba là sử dụng từ khóa không thuộc địa. Xin lưu ý rằng từ khóa def f1(): #outer function print ("Hello") def f2(): #inner function print ("world") f2() f1() 8 chỉ hoạt động với Python3. Bạn có thể sử dụng bất kỳ cách nào trong hai cách được đề cập ở trên để thay đổi giá trị của biến trong Python2.


Chúng ta có thể sử dụng từ khóa

def f1(): #outer function
    print ("Hello")
    def f2(): #inner function
        print ("world")
    f2()

f1()
8 để thay đổi giá trị của biến của hàm bên ngoài tương tự như sử dụng từ khóa
>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
9 để thay đổi giá trị của các biến toàn cầu.
 

>> import utils
>> utils.f()
'foo'
>> utils.f_value = 'bar'
>> utils.f()
'bar'
8

Khi bạn đã sẵn sàng với các khái niệm về phạm vi của các biến, chúng ta hãy tìm hiểu về việc đóng cửa trong Python.

def f1(): #outer function
    x = 1 #variable defined in f1 function
    def f2(a): #inner function
        print (a+x) #able to acces the variable of outer function
    f2(2)

f1()
2

Khép kín

Đóng cửa về cơ bản là giữ một bản ghi của một chức năng với một môi trường. Ví dụ: nếu chúng ta gọi một hàm với một đối số (foo (1)), thì nó phải lưu giữ một bản ghi môi trường với đối số đó sẽ được sử dụng sau trong chương trình. Nó sẽ rõ ràng từ các ví dụ được đưa ra dưới đây. & nbsp;

Đầu ra

def f1(): #outer function
    x = 1 #variable defined in f1 function
    def f2(a): #inner function
        print (a+x) #able to acces the variable of outer function
    f2(2)

f1()
2

Bạn có thể thấy rằng môi trường được tạo bởi F1 (1) khác với F1 (100) và cả hai đều được Python nhớ, do đó in các giá trị khác nhau cho A (2) và B (2). Đây là những gì đóng cửa là.

Làm thế nào để bạn sử dụng một biến bên trong một hàm trong Python?

Các biến được xác định bên trong các phương thức chỉ có thể được truy cập trong phương thức đó chỉ bằng cách sử dụng tên biến.Ví dụ - var_name.Nếu bạn muốn sử dụng biến đó bên ngoài phương thức hoặc lớp, bạn phải khai báo biến đó là toàn cầu.using the variable name. Example – var_name. If you want to use that variable outside the method or class, you have to declared that variable as a global.

Một biến có thể được tạo bên trong một hàm trong Python?

Thông thường, khi bạn tạo một biến bên trong một hàm, biến đó là cục bộ và chỉ có thể được sử dụng bên trong hàm đó.Để tạo một biến toàn cầu bên trong một hàm, bạn có thể sử dụng từ khóa toàn cầu.. To create a global variable inside a function, you can use the global keyword.

Bạn có thể đặt một biến bên trong một chức năng?

Các biến được xác định bên trong một hàm không thể được truy cập từ bất cứ nơi nào bên ngoài hàm, bởi vì biến chỉ được xác định trong phạm vi của hàm.Tuy nhiên, một hàm có thể truy cập tất cả các biến và hàm được xác định bên trong phạm vi mà nó được xác định., because the variable is defined only in the scope of the function. However, a function can access all variables and functions defined inside the scope in which it is defined.

Biến nào được tạo ra bên trong một hàm?

Một biến cục bộ được xác định bên trong một hàm hoặc câu lệnh khối và không thể truy cập được bên ngoài hàm hoặc khối. is defined inside a function or a block statement and is not accessible outside the function or block.