Hướng dẫn python function that changes variable - hàm python thay đổi biến

Hãy nghĩ về chúng như là một phần của chức năng. Khi hàm kết thúc, tất cả các biến của nó cũng chết.

x=2
y=3

def func[x,y]:
    x=200
    y=300

func[x,y] #inside this function, x=200 and y=300
#but by this line the function is over and those new values are discarded
print[x,y] #so this is looking at the outer scope again

Nếu bạn muốn một hàm để sửa đổi một giá trị theo cách chính xác của bạn đã viết nó, bạn có thể sử dụng

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
7 nhưng đây là thực tế rất tệ.

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300

Vấn đề với điều này là nó làm cho việc gỡ lỗi một cơn ác mộng trong trường hợp tốt nhất, và hoàn toàn không thể hiểu được trong trường hợp xấu nhất. Những thứ như thế này thường được gọi là "tác dụng phụ" trong các chức năng - thiết lập một giá trị bạn không cần thiết lập và làm như vậy mà không trả lại rõ ràng, đó là một điều xấu. Nói chung, các chức năng duy nhất bạn nên viết để sửa đổi các mục tại chỗ là các phương thức đối tượng [những thứ như

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
8 sửa đổi danh sách vì thật ngớ ngẩn khi trả về một danh sách mới thay thế!]

Cách đúng đắn để làm điều gì đó như thế này là sử dụng giá trị trả về. Hãy thử một cái gì đó như

def func[x,y]:
    x = x+200 #this can be written x += 200
    y = y+300 #as above: y += 300
    return [x,y] #returns a tuple [x,y]

x = 2
y = 3
func[x,y] # returns [202, 303]
print[x,y] #prints 2 3

Tại sao điều đó không hoạt động? Vâng, bởi vì bạn chưa bao giờ nói với chương trình làm bất cứ điều gì với tuple

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
9 đó, chỉ để tính toán nó. Hãy gán nó ngay bây giờ

#func as defined above

x=2 ; y=3
x,y = func[x,y] #this unpacks the tuple [202,303] into two values and x and y
print[x,y] #prints 202 303

Các biến toàn cầu và cục bộ cùng tên

Kiểm tra ví dụ này,

Quảng cáo

total = 100 

def func1[]: 
   total = 15 

print['Total = ', total] 

func1[] 

print['Total = ', total]
Output:
Total = 100 
Total = 100

Ở đây 'Tổng số' là một biến toàn cầu và hàm func [] có một biến cục bộ cùng tên. Theo mặc định, một hàm ưu tiên cho biến cục bộ hơn biến toàn cầu nếu cả hai đều có cùng tên. Do đó, trong mã trên khi chúng tôi sửa đổi biến 'tổng' bên trong hàm thì nó không được phản ánh bên ngoài hàm. Bởi vì bên trong hàm func [] Tổng biến được coi là biến cục bộ.total' is a global variable and func[] function has a local variable with same name. By default a function gives preference to
local variable over global variable if both are of same name. Therefore in above code when we modified 'total' variable inside the function then it was not reflected outside the function. Because inside function func[] total variable is treated as local variable.

Nhưng điều gì sẽ xảy ra nếu muốn truy cập biến toàn cầu bên trong một hàm có biến cục bộ cùng tên?

Sử dụng từ khóa toàn cầu † để sửa đổi biến toàn cầu bên trong một chức năng

Nếu chức năng của bạn có một biến cục bộ có cùng tên với biến toàn cầu và bạn muốn sửa đổi chức năng biến toàn cầu bên trong thì hãy sử dụng từ khóa 'toàn cầu' trước tên biến khi bắt đầu chức năng, tức là.

global total

Nó sẽ làm cho chức năng tham khảo tổng số biến toàn cầu bất cứ khi nào được truy cập. Kiểm tra ví dụ này,

total = 100
def func[]:
    # refer to global variable 'total' inside function
    global total
    if total > 10:
        total = 15

print['Total = ', total]
func[]
print['Total = ', total]

Output:

Total =  100
Total =  15

Như bạn có thể thấy sửa đổi được thực hiện cho tổng số biến toàn cầu hiện có thể nhìn thấy bên ngoài chức năng.

Khi chúng tôi sử dụng từ khóa toàn cầu với một biến bên trong hàm thì biến cục bộ sẽ được ẩn. Nhưng điều gì sẽ xảy ra nếu chúng ta muốn giữ Bot là biến cục bộ & toàn cầu với giống nhau và sửa đổi cả hai trong chức năng? Hãy xem làm thế nào để làm điều đó,

Sử dụng Globals [] để truy cập các biến toàn cầu bên trong hàm

Vì các từ khóa 'toàn cầu' ẩn biến cục bộ có cùng tên, vì vậy để truy cập cả biến cục bộ và toàn cầu bên trong một hàm, có một cách khác, tức là toàn cầu [] Sử dụng nó để truy cập / sửa đổi biến toàn cầu mà không cần sử dụng từ khóa 'toàn cầu' I, e.'global' keywords hide the local variable with same name, so to access both the local & global variable inside a function there is an another way i.e. global[] function.
globals[] returns a dictionary of elements in current module and we can use it to access / modify the global variable without using 'global' keyword i,e.

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
0

Đầu ra:

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
1

Như bạn có thể thấy rằng chúng tôi có biến cục bộ và biến toàn cầu với cùng tên, tức là tổng số và chúng tôi đã sửa đổi cả hai bên trong hàm. Bằng cách sử dụng từ điển được trả về bởi Globals [] để tham khảo biến toàn cầu thay vì từ khóa 'toàn cầu'. Nó sẽ không ẩn biến cục bộ bên trong hàm.globals[] to refer global variable instead of keyword 'global'. It will not hide local variable inside the function.

Xử lý lỗi không liên lạc

Nếu chúng ta cố gắng truy cập một biến toàn cầu với từ khóa 'toàn cầu' hoặc toàn cầu [] bên trong một hàm, tức là.

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
2

Nó sẽ ném một lỗi như thế này,

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
3

Để ngăn chặn lỗi này, chúng tôi cần sử dụng từ khóa 'toàn cầu' hoặc hàm toàn cầu [], tức là.

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
4

Ví dụ hoàn chỉnh về biến toàn cầu và toàn cầu [] trong Python

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
5

Output:

def func[x,y]:
    global x #these tell the function to look at the outer scope 
    global y #and use those references to x and y, not the inner scope
    x=200
    y=300

func[x,y]
print[x,y] #prints 200 300
6

Hàm Python có thể thay đổi một biến?

Một số giá trị trong Python có thể được sửa đổi, và một số không thể. Điều này không bao giờ có nghĩa là chúng ta không thể thay đổi giá trị của một biến - nhưng nếu một biến chứa một giá trị của một loại bất biến, chúng ta chỉ có thể gán cho nó một giá trị mới. Chúng ta không thể thay đổi giá trị hiện có theo bất kỳ cách nào.. This does not ever mean that we can't change the value of a variable – but if a variable contains a value of an immutable type, we can only assign it a new value. We cannot alter the existing value in any way.

Làm thế nào để bạn thay đổi một biến bên trong một hàm trong Python?

Nếu bạn muốn chỉ cần truy cập một biến toàn cầu, bạn chỉ cần sử dụng tên của nó.Tuy nhiên, để thay đổi giá trị của nó, bạn cần sử dụng từ khóa toàn cầu.Ví dụ.Điều này sẽ thay đổi giá trị của biến toàn cầu thành 55.use the global keyword. E.g. This would change the value of the global variable to 55.

Chức năng có thể cập nhật một biến không?

Bất kỳ công thức nào phụ thuộc vào một biến sẽ tự động cập nhật khi nó thay đổi.Tuy nhiên, biến sẽ không được cập nhật tự động nếu giá trị của công thức được sử dụng trong chức năng SET thay đổi.. However, the variable won't be automatically updated if the value of the formula used in the Set function changes.

Làm cách nào để thay đổi giá trị của một biến trong Python?

Trong python += được sử dụng để tăng và -= cho giảm.Trong một số ngôn ngữ khác, thậm chí còn có một cú pháp đặc biệt ++ và - để tăng hoặc giảm dần bởi 1. Python không có cú pháp đặc biệt như vậy.Để tăng x bởi 1, bạn phải viết x + = 1 hoặc x = x + 1.+= is used for incrementing, and -= for decrementing. In some other languages, there is even a special syntax ++ and -- for incrementing or decrementing by 1. Python does not have such a special syntax. To increment x by 1 you have to write x += 1 or x = x + 1 .

Bài Viết Liên Quan

Chủ Đề