Hàm Python có thể thay đổi biến không?

Các biến được tạo bên ngoài hàm [như trong tất cả các ví dụ ở trên] được gọi là biến toàn cục

Mọi người đều có thể sử dụng biến toàn cục, cả bên trong và bên ngoài hàm

Thí dụ

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

x = "tuyệt vời"

def myfunc[]
print["Trăn là " + x]

myfunc[]

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ục có cùng tên sẽ vẫn như cũ, toàn cầu và với giá trị ban đầu

Thí dụ

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

x = "tuyệt vời"

def myfunc[]
x = "tuyệt vời"
print["Trăn là " + x]

myfunc[]

print["Trăn là " + x]

Tự mình thử »

Từ khóa toàn cầu

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ục bên trong một hàm, bạn có thể sử dụng từ khóa global

Thí dụ

Nếu bạn sử dụng từ khóa global thì biến thuộc phạm vi toàn cục

def myfunc[]
toàn cầu x
x = "tuyệt vời"

myfunc[]

print["Trăn là " + x]

Tự mình thử »

Ngoài ra, hãy sử dụng từ khóa global nếu bạn muốn thay đổi một biến toàn cục bên trong một hàm

Thí dụ

Để thay đổi giá trị của một biến toàn cục bên trong một hàm, hãy tham chiếu đến biến đó bằng cách sử dụng từ khóa global

Sự khác biệt giữa các đối tượng có thể thay đổi, có thể thay đổi tại chỗ và các đối tượng không thay đổi, cố định và không thể thay đổi, chỉ được thay thế bằng một đối tượng mới

Số nguyên là bất biến. Vì vậy, tuyên bố

y += 2

lấy đối tượng hiện có tên y, 5, thêm 2 để tạo đối tượng mới 7 và gán cho nó tên y

Bất kỳ tên nào khác cũng đề cập đến đối tượng ban đầu 5, như biến toàn cục y3 của bạn, đều không thay đổi. họ vẫn đề cập đến cùng một đối tượng 5

Tuy nhiên, danh sách [không được gọi là mảng. ] có thể thay đổi, vì vậy chúng có thể thay đổi. Đặc biệt, khi bạn gán cho một chỉ mục trong danh sách, danh sách sẽ được sửa đổi, nó không tạo ra một danh sách hoàn toàn mới

Vì vậy, tuyên bố của bạn

y[0] += 2

trải qua các bước này

  • tra cứu tên y, cho bạn danh sách [5];

  • tra cứu mục ở vị trí 0 của danh sách đó, là đối tượng int 5;

  • thêm 2 vào int đó, nó sẽ cho bạn một int mới, 7 [hãy nhớ rằng int là bất biến];

  • gán int mới đó vào vị trí 0 của danh sách ban đầu [danh sách có thể thay đổi]

Kết quả cuối cùng là y bây giờ là cùng một danh sách như trước, chỉ khác nội dung

Và bởi vì nó là cùng một danh sách, các tên khác tham chiếu đến nó sẽ thấy sự thay đổi tương tự. Vì vậy, y3 toàn cầu của bạn cũng bị ảnh hưởng

Nếu bạn đang tìm kiếm “tham số đầu ra” như một số ngôn ngữ có, e. g. Pascal gọi chúng là “tham số var”, tôi e rằng bạn không gặp may. Python không có tham số đầu ra và bạn không thể làm việc này

Chúng ta có thể "thay đổi" một biến bằng cách thay đổi đối tượng mà biến đó đang trỏ tới. Chúng tôi làm điều đó thông qua một câu lệnh gán

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 xét cả hai loại thay đổi

bài tập

Giả sử chúng ta có một biến

>>> y = x
>>> id [y]
2253221094088
1 trỏ đến giá trị 4

Chúng ta có thể sử dụng chức năng tích hợp để lấy vị trí bộ nhớ của đối tượng mà biến này ____2________1 đang trỏ tới [mã định danh duy nhất này sẽ không bao giờ thay đổi trong suốt vòng đời của một đối tượng]

Nếu chúng ta trỏ

>>> y = x
>>> id [y]
2253221094088
1 vào một đối tượng mới, chẳng hạn như một danh sách, thì ____2_______4 sẽ thay đổi

>>> x = [1, 2, 3]
>>> id[x]
2253221094088

Nếu chúng ta gán

>>> y = x
>>> id [y]
2253221094088
5 cho
>>> y = x
>>> id [y]
2253221094088
1, điều này sẽ làm cho ____2_______5 trỏ đến cùng một vị trí bộ nhớ như
>>> y = x
>>> id [y]
2253221094088
1

>>> y = x
>>> id [y]
2253221094088

Đây là kiểu thay đổi đầu tiên. phân công. Chúng ta có thể thay đổi đối tượng mà một biến đang trỏ tới bằng cách thực hiện một phép gán

đột biến

Loại "thay đổi" thứ hai là đột biến. Chuyển nhượng thay đổi biến, nhưng đột biến thay đổi đối tượng

Hầu hết các đối tượng Python có thể được thay đổi sau khi chúng được tạo. Tất cả các danh sách, bộ và từ điển đều có thể được thay đổi, trong khi bộ, số và chuỗi thì không thể. Các đối tượng có thể thay đổi được gọi là có thể thay đổi và hành động thay đổi một trong các đối tượng này là một đột biến

Phép gán gần như luôn liên quan đến dấu hiệu

>>> y = x
>>> id [y]
2253221094088
9, trong khi đột biến có thể có nhiều dạng. một hình thức là một cuộc gọi phương thức. Ví dụ: gọi phương thức
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> id[x]
2253221094088
>>> id [y]
2253221094088
0 trong danh sách

Hãy lấy danh sách của chúng ta từ trước đó mà cả

>>> y = x
>>> id [y]
2253221094088
1 và
>>> y = x
>>> id [y]
2253221094088
5 đều trỏ đến

>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> id[x]
2253221094088
>>> id [y]
2253221094088

Và chúng ta sẽ gọi phương thức

>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> id[x]
2253221094088
>>> id [y]
2253221094088
0 trên biến
>>> y = x
>>> id [y]
2253221094088
1 để thêm một mục mới vào danh sách của chúng ta

>>> x.append[4]
>>> x
[1, 2, 3, 4]

Hãy nhớ rằng cả

>>> y = x
>>> id [y]
2253221094088
5 và
>>> y = x
>>> id [y]
2253221094088
1 đều trỏ đến cùng một đối tượng, vì vậy nếu chúng ta nhìn vào
>>> y = x
>>> id [y]
2253221094088
5 thì dường như nó cũng đã thay đổi

Lưu ý rằng chúng tôi đã không thực sự "thay đổi"

>>> y = x
>>> id [y]
2253221094088
1 hoặc
>>> y = x
>>> id [y]
2253221094088
5 bởi vì
>>> y = x
>>> id [y]
2253221094088
4 của hai biến này giống như trước đây

>>> id[x]
2253221094088
>>> id [y]
2253221094088

Thay vào đó, chúng tôi đã thay đổi đối tượng mà hai biến này đang trỏ đến

Tóm lược

Tóm lại, nếu chúng ta có hai biến

>>> y = x
>>> id [y]
2253221094088
1 và
>>> y = x
>>> id [y]
2253221094088
5 và cả hai đều trỏ đến cùng một đối tượng trong bộ nhớ

>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]
>>> id[x]
2253221094088
>>> id [y]
2253221094088

Nếu sau đó chúng tôi đã chỉ định lại

>>> y = x
>>> id [y]
2253221094088
1 vào một danh sách mới

>>> x = [4, 5, 6]
>>> x
[4, 5, 6]

Tôi đã hoàn thành một nhiệm vụ có nghĩa là tôi đã thay đổi đối tượng mà biến

>>> y = x
>>> id [y]
2253221094088
1 đang trỏ tới

Biến

>>> y = x
>>> id [y]
2253221094088
1 đã thay đổi ở đây nhưng
>>> y = x
>>> id [y]
2253221094088
5 thì không

Bởi vì chúng tôi đã không chỉ

>>> y = x
>>> id [y]
2253221094088
5 bất cứ nơi nào mới. chúng tôi chỉ trỏ
>>> y = x
>>> id [y]
2253221094088
1 vào một đối tượng mới, vì vậy
>>> y = x
>>> id [y]
2253221094088
4 của nó đã thay đổi nhưng
>>> y = x
>>> id [y]
2253221094088
4 của
>>> y = x
>>> id [y]
2253221094088
5 vẫn giống như trước đây

>>> id[x]
2253221617032
>>> id[y]
2253221094088

Nếu chúng ta trỏ

>>> y = x
>>> id [y]
2253221094088
1 và
>>> y = x
>>> id [y]
2253221094088
5 trở lại cùng một đối tượng và sau đó gọi một phương thức trên đối tượng này để yêu cầu nó tự biến đổi

Các chức năng có thể thay đổi các biến?

Các hàm có thể truy cập các biến toàn cục và sửa đổi chúng . Sửa đổi các biến toàn cục trong một hàm được coi là thực hành lập trình kém. Tốt hơn là gửi một biến dưới dạng tham số [hoặc để nó được trả về trong câu lệnh 'return'].

Các hàm Python có thể sửa đổi một tham số không?

Tham chiếu đối tượng được chuyển đến tham số chức năng. Không thể thay đổi chúng trong hàm, bởi vì chúng không thể thay đổi được , tôi. e. chúng là bất biến. Nó khác, nếu chúng ta truyền các đối số có thể thay đổi. Chúng cũng được truyền theo tham chiếu đối tượng, nhưng chúng có thể được thay đổi tại chỗ trong hàm.

Hàm có thể tạo biến trong Python không?

Kết quả thực tế của điều này là các biến có thể được xác định và sử dụng trong một hàm Python ngay cả khi chúng có cùng tên với các biến được xác định trong các hàm khác hoặc trong chương trình chính< . Trong những trường hợp này, sẽ không có sự nhầm lẫn hoặc nhiễu vì chúng được giữ trong các không gian tên riêng biệt. . In these cases, there will be no confusion or interference because they're kept in separate namespaces.

Chủ Đề