Chức năng của các biến python có nằm trong phạm vi không?

Nghĩ về nó theo cách này. phạm vi trong Python xảy ra với khoảng trắng. Khi chúng ta mô tả mã một hàm chứa bằng cách thụt lề nó dưới định nghĩa hàm, phạm vi của nó sẽ thay đổi thành một phạm vi nội bộ mới. Nó có quyền truy cập vào các biến được xác định bên ngoài nó, nhưng nó không thể thay đổi chúng

Khi chức năng chạy xong, phạm vi của nó sẽ biến mất, cũng như các biến được xác định của nó

Hãy kiểm tra lại điều này trong REPL

>>> def twitter_info[]:
..     twitter_account = "nnja"
..     print[f"Account inside function: {twitter_account}"]
...
>>> twitter_info[]
Account inside function: nnja
>>> print[f"Account outside of function: {twitter_account}"]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'twitter_account' is not defined

Chúng tôi nhận được một

>>> name = "Nina"
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
>>>
>>> def try_change_name[]:
..     name = "Max"
..     print[f"Name inside of function: {name}"]
...
>>> try_change_name[]
Name inside of function: Max
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
3 khi cố gắng truy cập biến
>>> name = "Nina"
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
>>>
>>> def try_change_name[]:
..     name = "Max"
..     print[f"Name inside of function: {name}"]
...
>>> try_change_name[]
Name inside of function: Max
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
4 bên ngoài hàm. Đó là bởi vì nó nằm ngoài phạm vi, chính xác như chúng ta mong đợi.

Sử dụng các biến được định nghĩa bên ngoài hàm

Nói chung, chúng tôi muốn cẩn thận khi sử dụng các biến được xác định bên ngoài chức năng của chúng tôi

Lưu ý rằng nếu chúng ta cố gắng thay đổi giá trị của một biến được xác định bên ngoài hàm của mình, chúng ta sẽ thấy các thay đổi trong hàm chứ không phải bên ngoài hàm đó

Bạn không thể thay đổi các biến được xác định bên ngoài hàm bên trong hàm. Nếu bạn cố gắng, những thay đổi của bạn sẽ chỉ áp dụng khi chức năng đang chạy. Khi chức năng chạy xong, giá trị sẽ trở lại như trước khi chức năng của bạn chạy

Một chút khó hiểu, nhưng hãy xem nó hoạt động

>>> name = "Nina"
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
>>>
>>> def try_change_name[]:
..     name = "Max"
..     print[f"Name inside of function: {name}"]
...
>>> try_change_name[]
Name inside of function: Max
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina

Nếu chúng tôi không biết phải tìm gì, chương trình có thể không hoạt động như chúng tôi mong đợi. Một nguyên tắc nhỏ là đặt tên các biến của chúng ta một cách rõ ràng và giảm thiểu số lượng biến chúng ta khai báo bên ngoài các hàm và lớp, mà bạn sẽ tìm hiểu trong ngày thứ hai

Cách sử dụng phù hợp là khi sử dụng một hằng số, một biến được định nghĩa bằng chữ in hoa toàn bộ, với các từ được phân tách bằng dấu gạch dưới. Hằng số là một giá trị mà chúng ta muốn sử dụng nhiều lần trong chương trình của mình, nhưng chúng ta không bao giờ muốn thay đổi nó theo chương trình

Hôm nay, chúng ta sẽ thảo luận về Phạm vi biến Python. Sau đây, chúng ta sẽ tìm hiểu các loại phạm vi biến trong Python, Python Global Keyword và Python Non-local Keywords

Vì vậy, hãy bắt đầu học tập của chúng tôi

Phạm vi biến Python là gì?

Phạm vi của một biến trong python là một phần của mã hiển thị. Thực ra để chỉ nó thì bạn không cần dùng thêm tiền tố nào cả

Hãy lấy một ví dụ, nhưng trước khi sửa lại cú pháp python

>>> b=8
>>> def func[]:
                a=7
                print[a]
                print[b]              
>>> func[]

đầu ra

7
8

>>> a

đầu ra

Traceback [cuộc gọi gần đây nhất gần đây nhất].
Tệp “
a
NameError. tên ‘a’ không được xác định

Ngoài ra, khoảng thời gian mà một biến còn sống được gọi là 'thời gian tồn tại' của nó

Các loại phạm vi biến Python

Có 4 loại Phạm vi biến trong Python, hãy thảo luận từng loại một

Phạm vi biến Python – Các loại

1. Phạm vi cục bộ trong Python

Trong đoạn mã trên, chúng tôi xác định một biến 'a' trong hàm 'func'. Vì vậy, 'a' là cục bộ của 'func'. Do đó, chúng ta có thể đọc/ghi nó trong func, nhưng không thể ở bên ngoài nó

Khi chúng tôi cố gắng làm như vậy, nó sẽ gây ra lỗi NameError. Nhìn vào mã này

>>> a=0
>>> def func[]:
               print[a]
                a=1
                print[a]            
>>> func[]

đầu ra

Traceback [cuộc gọi gần đây nhất gần đây nhất].
Tệp “
func[]
Tệp “
print[a]
UnboundLocalError: local variable ‘a’ referenced before assignment

Ở đây, chúng tôi có thể đã truy cập Phạm vi toàn cầu 'a' bên trong 'func', nhưng vì chúng tôi cũng xác định 'a' cục bộ trong đó, nên nó không còn truy cập phạm vi toàn cầu 'a'

Sau đó, câu lệnh in đầu tiên bên trong 'func' sẽ gây ra lỗi trong Python, vì chúng tôi đang cố truy cập phạm vi cục bộ 'a' trước khi gán nó

Tuy nhiên, việc cố gắng thao túng các giá trị toàn cầu từ bên trong phạm vi cục bộ là một cách làm không tốt. Cố gắng chuyển nó thành tham số cho hàm

>>> def func[a=0]:
                a+=1
                print[a]             
>>> func[]

đầu ra

1

2. Phạm vi toàn cầu trong Python

Chúng tôi cũng khai báo một biến 'b' bên ngoài bất kỳ phạm vi Biến python nào khác, điều này làm cho nó trở thành phạm vi toàn cầu

Do đó, chúng ta có thể đọc nó ở bất cứ đâu trong chương trình. Ở phần sau của bài viết này, chúng ta sẽ xem cách viết nó bên trong func

3. Phạm vi kèm theo trong Python

Hãy lấy một ví dụ khác

>>> def red[]:
                a=1
                def blue[]:
                                b=2
                                print[a]
                                print[b]
                blue[]
                print[a]
>>> red[]

đầu ra

1
2
1

Trong mã này, 'b' có phạm vi cục bộ trong hàm Python 'blue' và 'a' có phạm vi không cục bộ trong 'blue'

Tất nhiên, phạm vi biến python không phải là toàn cầu hoặc cục bộ là không cục bộ. Đây còn được gọi là phạm vi kèm theo

4. Phạm vi tích hợp

Cuối cùng, chúng ta nói về phạm vi rộng nhất. Phạm vi tích hợp có tất cả các tên được tải vào phạm vi biến python khi chúng tôi khởi động trình thông dịch

Ví dụ: chúng ta không bao giờ cần nhập bất kỳ mô-đun nào để truy cập các chức năng như print[] và id[]

Từ khóa toàn cầu trong Python

Cho đến nay, chúng tôi chưa gặp bất kỳ vấn đề nào với phạm vi toàn cầu. Vì vậy, hãy lấy một ví dụ

>>> a=1
>>> def counter[]:
                a=2
                print[a]            
>>> counter[]

đầu ra

2

Bây giờ, khi chúng tôi tham chiếu đến 'a' bên ngoài chức năng này, chúng tôi nhận được 1 thay vì 2

>>> a

đầu ra

1

Lý do tại sao điều này xảy ra?

Điều này đã không thay đổi bất cứ điều gì cho toàn cầu 'a'. Bây giờ, nếu bạn muốn thay đổi phiên bản chung của 'a' thì sao?

>>> a=1
>>> def counter[]:
                global a
                a=2
                print[a]    
>>> counter[]

đầu ra

2

>>> a

đầu ra

2

Những gì chúng tôi làm ở đây là, chúng tôi tuyên bố rằng 'a' chúng tôi sẽ sử dụng trong chức năng này là từ phạm vi toàn cầu

Sau này, bất cứ khi nào chúng ta tham chiếu đến 'a' bên trong 'counter', người phiên dịch biết chúng ta đang nói về 'a' toàn cầu

Trong ví dụ này, nó đã thay đổi giá trị của 'a' toàn cục thành 2

Từ khóa không cục bộ trong Python

Giống như từ khóa ‘global’, muốn thay đổi biến nonlocal, bạn phải sử dụng từ khóa ‘nonlocal’. Trước tiên hãy thử điều này mà không cần từ khóa

>>> name = "Nina"
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
>>>
>>> def try_change_name[]:
..     name = "Max"
..     print[f"Name inside of function: {name}"]
...
>>> try_change_name[]
Name inside of function: Max
>>> print[f"Name outside of function: {name}"]
Name outside of function: Nina
1

đầu ra

2
2
1

Như bạn có thể thấy, điều này không làm thay đổi giá trị của 'a' bên ngoài hàm 'blue'. Để có thể làm điều đó, chúng tôi sử dụng 'nonlocal'

>>> a
0

đầu ra

2
2
2

Nhìn thấy?

Câu hỏi phỏng vấn Python về Phạm vi biến Python

  1. Bạn có ý nghĩa gì bởi phạm vi?
  2. Các loại phạm vi biến là gì?
  3. phạm vi của biến với ví dụ là gì?
  4. Biến python là gì?
  5. Làm thế nào để bạn khai báo một biến trong Python 3?

Sự kết luận

Chúng tôi hy vọng rằng phạm vi biến Python sẽ rõ ràng hơn đối với bạn. Chúng tôi đã thấy bốn loại phạm vi - phạm vi cục bộ, phạm vi kèm theo, phạm vi toàn cầu và phạm vi tích hợp

Chức năng Python có phạm vi hoặc phạm vi khối không?

Phạm vi [hoặc hàm] cục bộ là khối mã hoặc phần thân của bất kỳ hàm Python hoặc biểu thức lambda nào . Phạm vi Python này chứa các tên mà bạn xác định bên trong hàm. Những tên này sẽ chỉ hiển thị từ mã của hàm.

Biến nào có phạm vi chức năng?

Biến cục bộ có Phạm vi chức năng. Chúng chỉ có thể được truy cập từ bên trong chức năng. Vì các biến cục bộ chỉ được nhận dạng bên trong các hàm của chúng, các biến có cùng tên có thể được sử dụng trong các hàm khác nhau.

Là biến bao gồm trong phạm vi?

Phạm vi được xác định bởi một phương thức bắt đầu bằng dấu ngoặc nhọn mở của nó. Tuy nhiên, nếu phương thức đó có tham số, thì chúng cũng được bao gồm trong phạm vi của phương thức . Theo nguyên tắc chung, các biến được khai báo bên trong phạm vi không hiển thị [nghĩa là có thể truy cập được] đối với mã được xác định bên ngoài phạm vi đó.

Tại sao VAR là phạm vi chức năng?

Từ khóa var được sử dụng để khai báo các biến phạm vi chức năng và biến phạm vi toàn cầu . Nếu bạn sử dụng var bên trong một khối, biến đó sẽ không nằm trong phạm vi khối. Nó sẽ là phạm vi chức năng hoặc phạm vi toàn cầu tùy thuộc vào vị trí của khối.

Chủ Đề