Hướng dẫn when should you use global variables in python? - khi nào bạn nên sử dụng biến toàn cục trong python?

Một ý kiến ​​cá nhân về chủ đề là việc có các biến toàn cầu đang được sử dụng trong logic hàm có nghĩa là một số mã khác có thể thay đổi logic và đầu ra dự kiến ​​của hàm đó sẽ khiến việc gỡ lỗi rất khó (đặc biệt là trong các dự án lớn) và sẽ làm cho thử nghiệm khó khăn hơn cũng.

Show

Hơn nữa, nếu bạn xem xét người khác đọc mã của bạn (cộng đồng nguồn mở, đồng nghiệp, v.v.), họ sẽ gặp khó khăn khi cố gắng hiểu biến toàn cầu đang được thiết lập, nơi đã được thay đổi và những gì mong đợi từ biến toàn cầu này trái ngược đối với một hàm bị cô lập mà chức năng của nó có thể được xác định bằng cách đọc định nghĩa hàm.

(Có lẽ) vi phạm định nghĩa chức năng thuần túy

Tôi tin rằng một mã không có lỗi và (gần) sẽ có các chức năng tinh khiết nhất có thể (xem các chức năng thuần túy). Một hàm thuần túy là một hàm có các điều kiện sau:

  1. Hàm luôn đánh giá cùng một giá trị kết quả với cùng một giá trị đối số. Giá trị kết quả chức năng không thể phụ thuộc vào bất kỳ thông tin hoặc trạng thái ẩn nào có thể thay đổi trong khi tiến hành thực hiện chương trình hoặc giữa các lần thực hiện khác nhau của chương trình, cũng không thể phụ thuộc vào bất kỳ đầu vào bên ngoài nào từ các thiết bị I/O (thường là xem bên dưới).always evaluates the same result value given the same argument value(s). The function result value cannot depend on any hidden information or state that may change while program execution proceeds or between different executions of the program, nor can it depend on any external input from I/O devices (usually—see below).
  2. Đánh giá kết quả không gây ra bất kỳ tác dụng phụ hoặc đầu ra nào có thể quan sát được, chẳng hạn như đột biến của các đối tượng có thể thay đổi hoặc đầu ra cho các thiết bị I/O.does not cause any semantically observable side effect or output, such as mutation of mutable objects or output to I/O devices.

Có các biến toàn cầu đang vi phạm ít nhất một trong những điều ở trên nếu không phải là một mã bên ngoài có thể gây ra kết quả bất ngờ.

Một định nghĩa rõ ràng khác về các chức năng thuần túy: "Chức năng thuần túy là một hàm lấy tất cả các đầu vào của nó làm đối số rõ ràng và tạo ra tất cả các đầu ra của nó làm kết quả rõ ràng." [1]. Có các biến toàn cầu vi phạm ý tưởng về các hàm thuần túy vì đầu vào và có thể một trong các đầu ra (biến toàn cầu) không được cung cấp rõ ràng hoặc trả về.all of its inputs as explicit arguments and produces all of its outputs as explicit results." [1]. Having global variables violates the idea of pure functions since an input and maybe one of the outputs (the global variable) is not explicitly being given or returned.

(Có lẽ) Vi phạm kiểm tra đơn vị F.I.R.S.T Nguyên tắc

Hơn nữa, nếu bạn xem xét kiểm tra đơn vị và nguyên tắc F.I.R.S.T (kiểm tra nhanh, kiểm tra độc lập, lặp lại, tự đánh giá và kịp thời) có thể sẽ vi phạm nguyên tắc kiểm tra độc lập (có nghĩa là các bài kiểm tra không phụ thuộc vào nhau).Fast tests, Independent tests, Repeatable, Self-Validating and Timely) will probably violate the Independent tests principle (which means that tests don't depend on each other).

Có một biến toàn cầu (không phải luôn luôn) nhưng trong hầu hết các trường hợp (ít nhất là những gì tôi đã thấy cho đến nay) là chuẩn bị và chuyển kết quả cho các chức năng khác. Điều này vi phạm nguyên tắc này là tốt. Nếu biến toàn cầu đã được sử dụng theo cách đó (tức là biến toàn cầu được sử dụng trong hàm X phải được đặt trong hàm y trước tiên), điều đó có nghĩa là đối với chức năng kiểm tra đơn vị x, bạn phải chạy chức năng kiểm tra/chạy y trước.

Quả cầu là hằng số

Mặt khác và như những người khác đã đề cập, nếu biến toàn cầu được sử dụng làm biến "không đổi" có thể tốt hơn một chút vì ngôn ngữ không hỗ trợ hằng số. Tuy nhiên, tôi luôn thích làm việc với các lớp và có "hằng số" với tư cách là thành viên lớp và hoàn toàn không sử dụng biến toàn cầu. Nếu bạn có một mã mà hai lớp khác nhau yêu cầu để chia sẻ một biến toàn cầu thì có lẽ bạn cần phải tái cấu trúc giải pháp của mình và làm cho các lớp của bạn độc lập.

Tôi không tin rằng Globals không nên được sử dụng. Nhưng nếu chúng được sử dụng, các tác giả nên xem xét một số nguyên tắc (các nguyên tắc được đề cập ở trên và các nguyên tắc kỹ thuật phần mềm khác và thực tiễn tốt) cho một mã sạch hơn và gần như không có lỗi.

Python cũng sử dụng các biến để giữ dữ liệu. Họ cũng có một tên và một loại; Tuy nhiên, trong Python, bạn không phải khai báo loại dữ liệu. Thay vào đó, bạn có thể tạo một biến Python như sau.

class_number = 4;

Trong ví dụ trên, biến 'class_number' có giá trị là 4; Nó là một loại dữ liệu số nguyên. Và không giống như các ngôn ngữ lập trình khác, bạn không cần phải khai báo một biến mà không khởi tạo. & NBSP;

Phạm vi biến trong Python có nghĩa là gì?

Phạm vi biến có nghĩa là khu vực trong đó các phần của chương trình có thể truy cập biến. Có bốn phạm vi thay đổi trong Python:

  1. Địa phương
  2. Toàn cầu
  3. Kèm theo
  4. Built-in

Trong bài viết này, bạn sẽ tìm hiểu hai loại đầu tiên. Bạn sẽ học cách tạo các biến Python với phạm vi địa phương và toàn cầu.

Biến toàn cầu trong Python là gì?

Trong thế giới lập trình, một biến toàn cầu về Python có nghĩa là có phạm vi trong suốt chương trình, tức là, giá trị biến toàn cầu có thể truy cập trong suốt chương trình trừ khi bị che mờ. & NBSP; & NBSP;

Một biến toàn cầu trong Python thường được tuyên bố là đỉnh của chương trình. Nói cách khác, các biến được khai báo bên ngoài hàm được gọi là biến toàn cầu.

Bạn có thể truy cập các biến toàn cầu trong python cả bên trong và bên ngoài hàm. & Nbsp; & nbsp;

Syntax:

X = “SampleGlobalValue”

Def fn1 ():

Làm thế nào để tạo các biến toàn cầu trong Python?

Để tạo một biến toàn cầu trong Python, bạn cần khai báo biến bên ngoài hàm hoặc trong phạm vi toàn cầu.

Example: 

GlobalVariableinPython_1

Output:

GlobalVariableinPython_2 

Làm thế nào để truy cập biến toàn cầu bên trong và bên ngoài chức năng?

Example:

GlobalVariableinPython_3 

Output:

GlobalVariableinPython_4 

Trong ví dụ được mô tả ở trên, bạn đã thấy một biến toàn cầu được khai báo và truy cập cả bên trong và bên ngoài hàm. & NBSP; & NBSP;

Vì vậy, bạn đang truy cập giá trị cả bên trong và bên ngoài hàm, điều này là tốt, nhưng điều gì xảy ra nếu bạn cố gắng sửa đổi giá trị biến phạm vi toàn cầu bên trong một hàm? & NBSP;

Xem ví dụ được đề cập dưới đây để hiểu tốt hơn. & NBSP;

Example:

GlobalVariableinPython_5. 

Output:

GlobalVariableinPython_6 

Như nó là hiển nhiên, điều này ném một lỗi. Khi bạn cố gắng sửa đổi giá trị biến toàn cầu bên trong một hàm, nó sẽ ném không liên kết, bởi vì trong khi sửa đổi Python xử lý X như một biến cục bộ, nhưng X cũng không được xác định bên trong hàm (myfunc ()).

Đó là nơi mà từ khóa toàn cầu đi vào hình ảnh. Bạn sẽ thấy việc sử dụng các từ khóa toàn cầu trong các phần sau.

Làm thế nào để tạo các biến với phạm vi cục bộ trong Python với các ví dụ?

Phạm vi của biến cục bộ là một hàm mà bạn đã khai báo nó. Để truy cập biến, bạn phải gọi hàm tương ứng. Ví dụ: bạn có thể tạo một biến cục bộ như hình dưới đây.

Def Superfunc ()

#Xác định một chức năng

x = tuyệt vời

#Xác định một biến cục bộ

in ("Python là" + x)

#truy cập một biến cục bộ

superfunc()

#calling hàm

Từ khóa toàn cầu

Từ khóa toàn cầu được sử dụng để sửa đổi biến toàn cầu ngoài phạm vi và ý nghĩa hiện tại của nó. Nó được sử dụng để thực hiện các thay đổi trong biến toàn cầu trong bối cảnh địa phương. Từ khóa ’toàn cầu cũng được sử dụng để tạo hoặc khai báo một biến toàn cầu bên trong một hàm. & Nbsp; & nbsp;

Thông thường, khi bạn tạo một biến bên trong một hàm (một biến cục bộ), nó chỉ có thể được sử dụng trong hàm đó. Đó là nơi mà từ khóa toàn cầu xuất hiện trong vở kịch, giúp tạo ra các biến toàn cầu bên trong hàm và có thể truy cập được trong phạm vi toàn cầu.

Syntax:

Def func ():

Biến toàn cầu

Ví dụ 1:

Sử dụng một từ khóa toàn cầu để tạo một biến trong phạm vi toàn cầu.

GlobalVariableinPython_7 

Output:

GlobalVariableinPython_8 

Ví dụ 2:

Sử dụng từ khóa toàn cầu để thay đổi giá trị của biến toàn cầu bên trong hàm.

GlobalVariableinPython_9 

Output:

GlobalVariableinPython_10 

Bạn đã thấy các từ khóa toàn cầu là gì, các ví dụ của họ và cách sử dụng các từ khóa toàn cầu. Nhưng Python có một số quy tắc cơ bản để sử dụng từ khóa ‘toàn cầu.

Hãy cùng xem toàn cầu trong các chức năng lồng nhau.

Khi bạn khai báo một biến từ khóa toàn cầu bên trong hàm lồng nhau và khi bạn thay đổi biến từ khóa toàn cầu bên trong hàm lồng nhau, nó sẽ phản ánh bên ngoài phạm vi cục bộ, vì nó được sử dụng làm từ khóa toàn cầu.

Example:

Hãy xem một ví dụ cho toàn cầu trong các chức năng lồng nhau.

GlobalVariableinPython_11 

Output:

GlobalVariableinPython_12. 

Bạn có thể thấy đầu ra ở trên cho toàn cầu trong các chức năng lồng nhau. Nhưng có lẽ một lời giải thích nhanh chóng sẽ giúp hiểu rõ hơn.

Bạn đã khai báo biến toàn cầu bên trong hàm bên trong (), được lồng bên trong hàm chính ().

Trước và sau khi gọi bên trong (), biến 'integ' lấy giá trị của biến cục bộ chính, tức là integ = 20. bên ngoài hàm chính (), biến 'integ' lấy giá trị của từ khóa toàn cầu được khai báo bên trong hàm bên trong (), tức là, integ = 20 Khi bạn sử dụng từ khóa toàn cầu bên trong phạm vi cục bộ hàm bên trong (). Nếu bạn thực hiện bất kỳ thay đổi nào bên trong biến từ khóa toàn cầu trong bên trong (), sẽ phản ánh bên ngoài phạm vi, như một hành vi của từ khóa toàn cầu.

Các quy tắc cơ bản của từ khóa ‘toàn cầu như sau:

  • Khi bạn tạo một biến bên trong hàm, nó nằm trong bối cảnh cục bộ theo mặc định
  • Khi bạn tạo hoặc xác định một biến bên ngoài hàm, theo mặc định, đó là bối cảnh toàn cầu, không cần phải có từ khóa toàn cầu ở đây
  • Các từ khóa toàn cầu có thể được sử dụng để đọc hoặc sửa đổi biến toàn cầu bên trong hàm
  • Sử dụng từ khóa toàn cầu bên ngoài chức năng không sử dụng hoặc không có hiệu lực.

Làm thế nào bạn có thể tạo các biến bằng phạm vi toàn cầu trong Python với các ví dụ?

Bạn có thể tạo một biến với phạm vi toàn cầu bằng cách khởi tạo bên ngoài tất cả các chức năng trong chương trình Python. Và bạn có thể truy cập biến từ bất cứ nơi nào trong chương trình Python. & NBSP;

Tạo một biến toàn cầu là đơn giản; Bạn có thể làm điều đó như sau.

x = "tuyệt vời"

#Xác định một biến toàn cầu

def wonderfunc ():

#Declared một hàm

in ("Python là" + x)

#truy cập một biến cục bộ

wonderfunc()

#calling hàm

Từ khóa toàn cầu

Từ khóa toàn cầu được sử dụng để sửa đổi biến toàn cầu ngoài phạm vi và ý nghĩa hiện tại của nó. Nó được sử dụng để thực hiện các thay đổi trong biến toàn cầu trong bối cảnh địa phương. Từ khóa ’toàn cầu cũng được sử dụng để tạo hoặc khai báo một biến toàn cầu bên trong một hàm. & Nbsp; & nbsp;

Thông thường, khi bạn tạo một biến bên trong một hàm (một biến cục bộ), nó chỉ có thể được sử dụng trong hàm đó. Đó là nơi mà từ khóa toàn cầu xuất hiện trong vở kịch, giúp tạo ra các biến toàn cầu bên trong hàm và có thể truy cập được trong phạm vi toàn cầu.

Def func ():

Biến toàn cầu

Ví dụ 1:

#Xác định một chức năng

Sử dụng một từ khóa toàn cầu để tạo một biến trong phạm vi toàn cầu.

Ví dụ 2:

Sử dụng từ khóa toàn cầu để thay đổi giá trị của biến toàn cầu bên trong hàm.

Bạn đã thấy các từ khóa toàn cầu là gì, các ví dụ của họ và cách sử dụng các từ khóa toàn cầu. Nhưng Python có một số quy tắc cơ bản để sử dụng từ khóa ‘toàn cầu.

life()

#calling hàm

print(x)

#truy cập một biến cục bộ

#calling hàm

Từ khóa toàn cầu

Từ khóa toàn cầu được sử dụng để sửa đổi biến toàn cầu ngoài phạm vi và ý nghĩa hiện tại của nó. Nó được sử dụng để thực hiện các thay đổi trong biến toàn cầu trong bối cảnh địa phương. Từ khóa ’toàn cầu cũng được sử dụng để tạo hoặc khai báo một biến toàn cầu bên trong một hàm. & Nbsp; & nbsp;

Thông thường, khi bạn tạo một biến bên trong một hàm (một biến cục bộ), nó chỉ có thể được sử dụng trong hàm đó. Đó là nơi mà từ khóa toàn cầu xuất hiện trong vở kịch, giúp tạo ra các biến toàn cầu bên trong hàm và có thể truy cập được trong phạm vi toàn cầu.

Def func ():

Biến toàn cầu

Ví dụ 1:

loc()

Sử dụng một từ khóa toàn cầu để tạo một biến trong phạm vi toàn cầu.

print(y)

Ví dụ 2:

Sử dụng từ khóa toàn cầu để thay đổi giá trị của biến toàn cầu bên trong hàm.

Bạn đã thấy các từ khóa toàn cầu là gì, các ví dụ của họ và cách sử dụng các từ khóa toàn cầu. Nhưng Python có một số quy tắc cơ bản để sử dụng từ khóa ‘toàn cầu.

Hãy cùng xem toàn cầu trong các chức năng lồng nhau.

Khi bạn khai báo một biến từ khóa toàn cầu bên trong hàm lồng nhau và khi bạn thay đổi biến từ khóa toàn cầu bên trong hàm lồng nhau, nó sẽ phản ánh bên ngoài phạm vi cục bộ, vì nó được sử dụng làm từ khóa toàn cầu.

Hãy xem một ví dụ cho toàn cầu trong các chức năng lồng nhau.

Biến toàn cầu

Ví dụ 1:

print(y)

Sử dụng một từ khóa toàn cầu để tạo một biến trong phạm vi toàn cầu.

loc()

Ví dụ 2:

Sử dụng từ khóa toàn cầu để thay đổi giá trị của biến toàn cầu bên trong hàm.

Bạn đã thấy các từ khóa toàn cầu là gì, các ví dụ của họ và cách sử dụng các từ khóa toàn cầu. Nhưng Python có một số quy tắc cơ bản để sử dụng từ khóa ‘toàn cầu.

Ví dụ1: Biến toàn cầu và biến cục bộ cùng tên

x = 5; & nbsp;

#initializing một biến toàn cầu

Def Man ():

#Xác định một người đàn ông chức năng ()

x = 4

#initializing một biến cục bộ

in ("cục bộ x:", x) & nbsp;

# Truy cập một biến cục bộ

man()

#Đoạn chức năng người đàn ông

In ("Toàn cầu X:", X)

#truy cập một biến cục bộ

Trong ví dụ trên, hàm in trong hàm man () truy cập biến cục bộ x với giá trị là 4. và hàm in bên ngoài truy cập biến cục bộ với giá trị là 5. & nbsp; & nbsp;

Sự khác biệt giữa các biến toàn cầu và địa phương

Hãy cho chúng tôi xem một ví dụ về cách các biến toàn cầu và cục bộ hoạt động trong cùng một mã.

Example:

GlobalVariableinPython_13 

Output:

GlobalVariableinPython_14 

Giải trình:

Ở đây trong chương trình ở trên, bạn đã tuyên bố X là toàn cầu và y là một biến cục bộ trong cùng một chương trình. Sau đó, nó đã cố gắng sửa đổi biến toàn cầu bằng cách sử dụng từ khóa toàn cầu trong hàm cục bộ và in cả GX và LY.

Khi bạn gọi Function1 (), giá trị của GX đã trở thành toàn cầu toàn cầu. Khi bạn đã cố gắng sửa đổi thành GX*2, nó đã in ‘Toàn cầu hai lần. Sau đó, bạn đã in biến LY cục bộ, hiển thị giá trị biến cục bộ, tức là, một lần nữa ’cục bộ.

Sự khác biệt giữa các biến toàn cầu và phi địa phương

Khi một biến nằm trong phạm vi cục bộ hoặc toàn cầu, nó được gọi là biến không thuộc địa. Các biến không thuộc địa được xác định trong hàm lồng nhau có phạm vi không được xác định.

Example:

GlobalVariableinPython_15. 

Output:

GlobalVariableinPython_16 

Explanation:

Từ chương trình trên, có thể nhận thấy rằng hàm lồng nhau là bên trong (). Bên trong bên trong (), bạn đã thấy việc sử dụng từ khóa không thuộc địa để tạo biến không thuộc địa. Bên trong () được định nghĩa trong phạm vi của outerfn (). Nếu bạn thay đổi giá trị của một biến không địa điểm, chúng sẽ phản ánh trong biến cục bộ.

Tóm lại, việc hiểu phạm vi của các biến Python là điều cần thiết cho một chương trình không có lỗi. Bạn có thể truy cập các biến toàn cầu từ bất cứ nơi nào trong chương trình. Tuy nhiên, bạn chỉ có thể truy cập các biến cục bộ từ hàm. Ngoài ra, nếu bạn cần thay đổi một biến toàn cầu từ một hàm, bạn cần tuyên bố rằng biến là toàn cầu. Bạn có thể làm điều này bằng cách sử dụng từ khóa "toàn cầu". & NBSP;

Mong muốn chuyển sang lĩnh vực lập trình? Tham gia khóa đào tạo & nbsp; Python & nbsp; và bắt đầu sự nghiệp của bạn như một lập trình viên Python chuyên nghiệp

Sự kết luận

Các biến là một trong những yếu tố cơ bản nhất của ngôn ngữ lập trình. Nó là một lớp trừu tượng cho các ô bộ nhớ chứa giá trị thực. Các loại biến toàn cầu, cục bộ và không thuộc địa chỉ giúp lập trình viên truy cập một số giá trị hoàn toàn trong phạm vi chương trình hoặc một số giá trị được giới hạn trong hàm.

Trong bài viết này, bạn đã học được một biến toàn cầu là gì trong Python, làm thế nào để xác định các biến toàn cầu trong Python, cách khai báo một biến toàn cầu trong Python, từ khóa toàn cầu là gì, khi sử dụng từ khóa toàn cầu, sự khác biệt giữa toàn cầu, cục bộ, địa phương và các biến không thuộc địa cùng với một số ví dụ làm việc. & nbsp; & nbsp;

Tham gia khóa đào tạo Python của SimplileArn để tìm hiểu thêm về chủ đề này. Khóa học này sẽ dạy cho bạn những điều cơ bản về Python, các tuyên bố có điều kiện, hoạt động dữ liệu, kịch bản shell và Django. Khóa học chứng nhận này, bao gồm 38 giờ học tập kết hợp và 8 giờ học tập tự nhịp trực tuyến, sẽ chuẩn bị cho bạn một sự nghiệp hoàn thành như một lập trình viên Python chuyên nghiệp bằng cách cung cấp cho bạn kinh nghiệm lập trình thực tế.

Có bất kỳ câu hỏi cho chúng tôi? Để lại cho họ trong phần bình luận của bài viết này, và các chuyên gia của chúng tôi sẽ liên hệ lại với bạn về họ, càng sớm càng tốt!

Khi nào các biến toàn cầu nên được sử dụng Python?

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. 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.Global variables can be used by everyone, both inside of functions and outside.

Có phải thực hành tốt để sử dụng các biến toàn cầu trong Python?

Việc sử dụng biến toàn cầu trong Python được coi là thực hành xấu và nói chung nên tránh.Thay vào đó, người dùng có thể thử và sử dụng tham số để truyền giá trị lên hàm hoặc trả về giá trị để có được nó.. Instead the user can try and use a parameter for passing a value onto a function or return a value to obtain it.

Tại sao chúng ta nên sử dụng các biến toàn cầu?

Các biến toàn cầu được khai báo và xác định bên ngoài bất kỳ chức năng nào trong chương trình.Họ giữ các giá trị của họ trong suốt vòng đời của chương trình.Họ có thể truy cập trong suốt quá trình thực hiện chương trình.Các biến không toàn cầu không phải là xấu vì giá trị của chúng có thể được thay đổi bởi bất kỳ chức năng nào.They hold their values throughout the lifetime of program. They are accessible throughout the execution of program. Non-const global variables are evil because their value can be changed by any function.

Là tốt hơn để sử dụng các biến địa phương hoặc toàn cầu?

Tất cả phụ thuộc vào phạm vi của biến.Nếu bạn cảm thấy rằng một biến nhất định sẽ lấy nhiều giá trị bằng cách đi qua các chức năng khác nhau thì hãy sử dụng các biến cục bộ và truyền chúng trong các cuộc gọi chức năng.Nếu bạn cảm thấy rằng một biến nhất định bạn cần sử dụng sẽ có giá trị không đổi, thì hãy khai báo nó là một biến toàn cầu.If you feel that a certain variable will take multiple values by passing through various functions then use local variables and pass them in function calls. If you feel that a certain variable you need to use will have constant value, then declare it as a global variable.