Hướng dẫn how to change value in function python - cách thay đổi giá trị trong hàm python

8

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đã cố gắng sửa đổi giá trị của một chuỗi bên trong một hàm, như bên dưới:

>>> def appendFlag(target, value):
...     target += value
...     target += " "
...
>>> appendFlag
<function appendFlag at 0x102933398>
>>> appendFlag(m,"ok")
>>> m
''

Chà, có vẻ như "mục tiêu" chỉ được thay đổi trong hàm, nhưng làm thế nào để làm cho giá trị mới khả thi bên ngoài hàm? Cảm ơn.

Đã hỏi ngày 21 tháng 3 năm 2019 lúc 6:47Mar 21, 2019 at 6:47

Hướng dẫn how to change value in function python - cách thay đổi giá trị trong hàm python

Hind forsumhind forsumHind Forsum

9.1879 Huy hiệu vàng55 Huy hiệu bạc107 Huy hiệu đồng9 gold badges55 silver badges107 bronze badges

3

Điều này được xử lý trong Python bằng cách trở lại.

def appendFlag(target, value):
   target += value
   target += " "
   return target

Bạn có thể sử dụng nó như thế này:

m = appendFlag(m,"ok")

Bạn thậm chí có thể trả về một số biến như thế này:

def f(a,b):
   a += 1
   b += 1
   return a,b

và sử dụng nó như thế này:

a,b = f(4,5)

Đã trả lời ngày 21 tháng 3 năm 2019 lúc 6:52Mar 21, 2019 at 6:52

Christian Sloperchristian SloperChristian Sloper

7.1213 Huy hiệu vàng14 Huy hiệu bạc28 Huy hiệu đồng3 gold badges14 silver badges28 bronze badges

Bạn cần sử dụng một đối tượng có thể được sửa đổi

>>> m = []
>>> def appendFlag(target, value):
...     target.append(value)
...     target.append(" ")
...
>>> appendFlag(m, "ok")
>>> m
['ok', ' ']

Đã trả lời ngày 21 tháng 3 năm 2019 lúc 7:01Mar 21, 2019 at 7:01

Hướng dẫn how to change value in function python - cách thay đổi giá trị trong hàm python

Các loại dữ liệu có thể thay đổi, chẳng hạn như danh sách hoặc từ điển, có thể được thay đổi từ bên trong chức năng mà không trả lại:

def duplicate_last(l):
    l.append(l[-1])

l = [1, 2, 3]
duplicate_last(l)

Lý do cho điều đó là quản lý bộ nhớ khác nhau cho các đối tượng có thể thay đổi và bất biến trong Python.

Đã trả lời ngày 15 tháng 10 năm 2021 lúc 12:09Oct 15, 2021 at 12:09

Các biến bên trong hàm chỉ có phạm vi hàm, nếu bạn thay đổi giá trị của biến từ bên trong hàm, nó sẽ không được phản xạ bên ngoài hàm. Nếu bạn muốn thay đổi giá trị của biến toàn cầu m, hãy cập nhật nó từ bên ngoài chức năng như sau

 def appendFlag(target, value):
        target += value
        target += " "
        return target
  m=''
  m=appendFlag(m,'ok')

Đã trả lời ngày 21 tháng 3 năm 2019 lúc 7:18Mar 21, 2019 at 7:18

Hướng dẫn how to change value in function python - cách thay đổi giá trị trong hàm python

Agus Mathewagus MathewAgus Mathew

7388 Huy hiệu bạc17 Huy hiệu đồng8 silver badges17 bronze badges

Chức năng của bạn cần trả về giá trị mới. Biến

m = appendFlag(m,"ok")
2 chỉ có phạm vi trong hàm
m = appendFlag(m,"ok")
3.

def appendFlag(target, value):
   ...
   return target

m = appendFlag(m, "ok")

Đã trả lời ngày 21 tháng 3 năm 2019 lúc 6:50Mar 21, 2019 at 6:50

Dwagondwagondwagon

4915 Huy hiệu bạc9 Huy hiệu Đồng5 silver badges9 bronze badges

Tạo một lớp mới và đặt mục tiêu là thành viên của lớp. Sau đó, hãy thử SetAttr (lớp, 'Target', giá trị).

Đã trả lời ngày 19 tháng 11 năm 2021 lúc 0:54Nov 19, 2021 at 0:54

2

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)
def appendFlag(target, value):
   target += value
   target += " "
   return target
0
def appendFlag(target, value):
   target += value
   target += " "
   return target
1

Ở đâ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à.

def appendFlag(target, value):
   target += value
   target += " "
   return target
2

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,

def appendFlag(target, value):
   target += value
   target += " "
   return target
3

Output:

def appendFlag(target, value):
   target += value
   target += " "
   return target
4

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 appendFlag(target, value):
   target += value
   target += " "
   return target
5

Đầu ra:

def appendFlag(target, value):
   target += value
   target += " "
   return target
6

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 appendFlag(target, value):
   target += value
   target += " "
   return target
7

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

def appendFlag(target, value):
   target += value
   target += " "
   return target
8

Để 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 appendFlag(target, value):
   target += value
   target += " "
   return target
9

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

m = appendFlag(m,"ok")
0

Output:

m = appendFlag(m,"ok")
1

Làm thế nào để bạn thay đổi giá trị của một biến trong một chức năng python?

Sử dụng từ khóa toàn cầu † để sửa đổi biến toàn cầu bên trong một hàm. 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à.. If your function has a local variable with same name as global variable and you want to modify the global variable inside function then use 'global' keyword before the variable name at start of function i.e.

Bạn có thể thay đổi tham số trong chức năng Python không?

Tham chiếu đối tượng được chuyển đến các tham số chức năng. Chúng không thể được thay đổi trong chức năng, vì chúng không thể thay đổi, tức là chúng là bất biến. Nó khác, nếu chúng ta vượt qua các lập luận có thể thay đổi. Chúng cũng được thông qua bởi tham chiếu đối tượng, nhưng chúng có thể được thay đổi tại chỗ trong hàm.They can't be changed within the function, because they can't be changed at all, i.e. they are immutable. It's different, if we pass mutable arguments. They are also passed by object reference, but they can be changed in place within the function.

Thay đổi () trong Python là gì?

Từ "thay đổi" là mơ hồ trong Python: chúng ta có hai loại "thay đổi" riêng biệt trong Python.Chúng ta có thể "thay đổi" một biến bằng cách thay đổi đối tượng mà biến đang chỉ vào.Chúng tôi làm điều đó thông qua một tuyên bố chuyển nhượng.Chúng ta cũng có thể "thay đổi" một đối tượng thực tế thông qua một đột biến.Chúng ta hãy xem cả hai loại thay đổi.We can "change" a variable by changing which object that variable is pointing to. We do that through an assignment statement. We can also "change" an actual object through a mutation. Let's take a look at both types of change.

Làm cách nào để thay đổi một biến cục bộ bên trong một hàm trong Python?

Nếu bạn muốn đặt một biến từ bên ngoài, bạn sẽ phải sử dụng một tham số như bạn đã làm với X.Nếu bạn muốn một giá trị mặc định, hãy sử dụng thử nghiệm DEF (x, tham số1 = 50).Nếu bạn gọi hàm mà không có tham số thứ hai, nó sẽ sử dụng giá trị mặc định là 50.Nếu bạn muốn nó thay đổi, bạn sẽ phải vượt qua nó bằng cách nào đó.If you want it to change, you'll have to pass it in somehow.