Trong bài các biến Python lần trước, khi nhắc đến vấn đề thay đổi giá trị của biến toàn cục trong một hàm mình có nói phải dùng từ khóa Python là global, nhưng chưa nói rõ cách dùng vì muốn dành riêng một bài để viết chi tiết về từ khóa này.

Từ khóa global để làm gì và cách dùng nó trong Python ra sao? Mời các bạn cùng theo dõi nhé.

Trong Python, từ khóa global cho phép bạn chỉnh sửa biến bên ngoài phạm vi hiện tại. Nó được sử dụng để tạo biến global và thực hiện thay đổi cho biến trong bối cảnh cục bộ.

Quy tắc của từ khóa global trong Python

  • Khi chúng ta tạo biến trong một hàm, nó mặc định là biến cục bộ.
  • Khi chúng ta định nghĩa một biến bên ngoài hàm, nó mặc định là biến toàn cục. Bạn không cần phải sử dụng từ khóa global.
  • Chúng ta sử dụng từ khóa global để đọc và viết biến toàn cục trong một hàm.
  • Sử dụng từ khóa global bên ngoài một hàm thì không có tác dụng gì cả.

Cách sử dụng từ khóa global trong Python

Ví dụ 1: Truy cập biến toàn cục từ trong một hàm

a = 1 # Biến toàn cục

def them():
    print(a)

them()

Khi chạy code trên chúng ta nhận được đầu ra là 1. Tuy nhiên, có vài trường hợp chúng ta cần chỉnh sửa biến toàn cục từ bên trong hàm, đó chính là trường hợp mình nhắc đến từ đầu, vậy phải làm sao?

Ví dụ 2: Chỉnh sửa biến toàn cục trong một hàm

Giả sử ta cần sửa giá trị của a thành a + 9 trong hàm them(), nếu viết code sau:

a = 1 # Biến toàn cục

def them():
 a = a + 9 
    print(a)

them()

Bạn sẽ nhận được thông báo lỗi:

UnboundLocalError: local variable 'a' referenced before assignment

Đó là do chúng ta chỉ có thể truy cập vào biến toàn cục mà không thể chỉnh sửa nó trong một hàm. Giải pháp cho vấn đề này là sử dụng từ khóa global. Khi đó, đoạn code trên sẽ được viết lại như sau:

a = 1 # Biến toàn cục

def them():
 global a 
    a = a + 9 
    print("Trong them():", a)

them()
print("Trong main:", a)

Chạy code trên ta được kết quả đầu ra là:

Trong them(): 10
Trong main: 10 

Ở đây, chúng ta định nghĩa a là một biến toàn cục trong hàm them(), sau đó tăng giá trị của a lên 9, tức là a = a + 9. Sau đó, chúng ta gọi hàm them(), cuối cùng, in biến toàn cục a. Kết quả là thay đổi được thực hiện cho biến a trong hàm them() cũng xảy ra trên biến toàn cục bên ngoài hàm, a = 10.

Ví dụ 3: Chia sẻ biến toàn cục global thông qua mô-đun trong Python

Trong Python, chúng ta tạo ra một mô-dun config.py để giữ các biến toàn cục và chia sẻ thông tin thông qua các mô-đun Python trong cùng một chương trình. Đây là cách chúng ta có thể chia sẻ biến toàn cục qua các mô-đun Python.

Tạo một file config.py để lưu trữ biến toàn cục:

a = 0
b = "rỗng"

Tạo một file update.py để thay đổi các biến toàn cục:

import config

config.a = 10
config.b = "tinhoccuaem.com"

Viết file main.py để kiểm tra sự thay đổi:

import config
import update

print(config.a)
print(config.b)

Khi chạy file main.py, đầu ra sẽ là:

10
tinhoccuaem.com 

Ở đây, ta đã tạo ra 3 file là config.py, update.py và main.py. Mô-đun config.py lưu trữ 2 biến toàn cục là a và b. Trong file update.py chúng ta nhập mô-đun config.py và sửa đổi giá trị của biến a, b. Tương tự trong file main.py, ta nhập cả 2 mô-đun config.py và update.py. Cuối cùng, chúng ta dùng lệnh in để kiểm tra xem giá trị của biến a và b đã được thay đổi hay chưa.

Ví dụ 4: Sử dụng biến toàn cục trong hàm lồng nhau.

Trong ví dụ này bạn sẽ biết cách để sử dụng biến toàn cục trong hàm lồng nhau.

def ham1():
 x = 20

 def ham2():
 global x
 x = 25
 
 print("Trước khi gọi ham2: ", x)
 print("Đang gọi ham2")
 ham2()
 print("Sau khi gọi ham2: ", x)

ham1()
print("x trong main: ", x)

Chạy code trên ta được:

Trước khi gi ham2: 20
Đang gi ham2
Sau khi gi ham2: 20
x trong main: 25

Ở đây, chúng ta khai báo biến toàn cục trong hàm lồng ham2(). Trong ham1()xkhông bị ảnh hưởng bởi từ khóa global.

Trước và sau khi gọi hàm ham2()x sẽ lấy giá trị của biến cục bộ là 20. Bên ngoài hàm ham1(), x sẽ lấy giá trị toàn cục, được khia báo trong ham2() là 25. Đây là do ta sử dụng từ khóa global trong x để tạo biến toàn cục trong ham2(). Nếu chúng ta thực hiện bất kỳ sự thay đổi nào cho x trong ham2() thì thay đổi sẽ xuất hiện bên ngoài phạm vi cục bộ.

273 BÌNH LUẬN

  1. Hello There. I found your blog using msn. This is a really well written article.
    I will make sure to bookmark it and return to read more of your useful information. Thanks for the post.
    I will certainly comeback.

  2. When I initially commented I seem to have clicked the -Notify me when new comments
    are added- checkbox and from now on whenever a comment is added I receive 4 emails
    with the exact same comment. There has to be
    a way you can remove me from that service? Cheers!

  3. Hello there! This post couldn’t be written any better!

    Reading through this post reminds me of my old room mate!
    He always kept talking about this. I will forward this write-up
    to him. Fairly certain he will have a good read.

    Thanks for sharing!

  4. I seriously love your blog.. Very nice colors & theme.
    Did you create this web site yourself? Please reply back as I’m attempting to create my own website and would love to learn where you got this
    from or just what the theme is called. Cheers!

  5. Wow, wonderful blog layout! How long have you been blogging for?

    you make blogging look easy. The overall look of your
    web site is wonderful, let alone the content!

  6. Hi! I just wanted to ask if you ever have any issues with hackers?
    My last blog (wordpress) was hacked and I ended up losing a few months of hard work due to no data backup.
    Do you have any solutions to stop hackers?

  7. What’s Happening i am new to this, I stumbled upon this I’ve found It positively useful and
    it has aided me out loads. I am hoping to give a contribution &
    assist other customers like its aided me. Great job.

  8. Do you have a spam issue on this website; I
    also am a blogger, and I was curious about your situation; we have developed some nice procedures and we are looking to trade
    methods with other folks, be sure to shoot me an email if interested.

  9. An interesting discussion is worth comment. I think that you should write more
    about this subject matter, it might not
    be a taboo matter but usually people don’t speak about these
    topics. To the next! Kind regards!!

  10. Definitely believe that which you stated. Your favorite justification seemed
    to be on the net the easiest thing to be aware of. I say to you, I
    certainly get annoyed while people think about worries that they plainly do not know about.
    You managed to hit the nail upon the top and defined out the whole thing without
    having side effect , people can take a signal.
    Will likely be back to get more. Thanks

  11. Great work! This is the kind of info that are supposed to be shared around the net.
    Disgrace on the search engines for no longer positioning this post higher!
    Come on over and visit my website . Thank you =)

  12. You made some really good points there. I looked on the web for additional information about the issue and found most people will go along with your views on this web site.

  13. This particular blog is obviously entertaining and also diverting. I have chosen helluva helpful advices out of this amazing blog. I ad love to come back over and over again. Thanks a bunch!

  14. I wanted to thank you for this great read!! I surely enjoying every small bit of it I have you bookmarked to look at new stuff you postaаАа’б‚Т€ТšаЂаŒаАТ’аЂа†

  15. Very nice info and right to the point. I am not sure if this is actually the best place to ask but do you people have any thoughts on where to hire some professional writers? Thx

  16. I was recommended this blog by my cousin. I am not sure whether this post is written by him as nobody else know such detailed about my difficulty. You are wonderful! Thanks!

  17. Wow! This can be one particular of the most useful blogs We have ever arrive across on this subject. Basically Fantastic. I am also a specialist in this topic so I can understand your hard work.

  18. This unique blog is obviously cool and also diverting. I have found a bunch of useful things out of this amazing blog. I ad love to go back over and over again. Cheers!

  19. Thank you for another magnificent article. Where else could anybody get that kind of information in such an ideal way of writing? I have a presentation next week, and I am on the look for such info.

  20. May I simply say what a relief to discover an individual who truly knows what they are talking about on the web.
    You certainly know how to bring a problem to light and make it important.
    More people should check this out and understand this side of the story.

    I was surprised you aren’t more popular since you surely
    have the gift.

  21. Estudios posteriores en varones sugieren que este efecto es improbable en humanos, aunque en algunos hombres se ha observado una disminución de la concentración de esperma. Entre las pruebas más usuales se encuentran los análisis de sangre para comprobar el nivel de hormonas masculinas, la posible presencia de azúcar alto en la sangre, niveles de homocisteína y exploraciones físicas para detectar cualquier posible tumor o anomalía genital.

  22. We’re a bunch of volunteers and starting a new
    scheme in our community. Your website provided us with helpful
    information to work on. You’ve performed an impressive process and our whole group will
    probably be thankful to you.

  23. you’re truly a just right webmaster. The web site loading pace is incredible.
    It kind of feels that you are doing any unique trick.
    In addition, The contents are masterpiece. you’ve done a magnificent process in this matter!

  24. Wow, wonderful blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your web site is magnificent, as well as the content!

  25. I really like your blog.. very nice colors & theme.
    Did you design this website yourself or did you hire someone to do it for
    you? Plz reply as I’m looking to create my own blog
    and would like to know where u got this from. cheers

  26. Its like you read my mind! You seem to know a lot about this, like you
    wrote the book in it or something. I think that you could do with a few pics to
    drive the message home a little bit, but instead of that, this is great blog.
    An excellent read. I’ll certainly be back.

  27. I really like your blog.. very nice colors & theme.

    Did you create this website yourself or did you hire someone to do it for you?
    Plz answer back as I’m looking to design my own blog
    and would like to find out where u got this from. thanks

  28. This is very interesting, You are a very skilled blogger. I have joined your feed and look forward to seeking more of your excellent post. Also, I ave shared your site in my social networks!

  29. You are my intake, I own few web logs and very sporadically run out from brand . Analyzing humor is like dissecting a frog. Few people are interested and the frog dies of it. by E. B. White.

  30. I think other website proprietors should take this web site as an model, very clean and magnificent user friendly style and design, as well as the content. You are an expert in this topic!

  31. I will right away grasp your rss feed as I can at in finding your email subscription hyperlink or newsletter service. Do you have any? Kindly permit me recognize in order that I may subscribe. Thanks.

  32. Wow, awesome blog layout! How long have you been blogging for? you made blogging look easy. The overall look of your web site is magnificent, as well as the content!

  33. I was recommended this website by my cousin. I am not sure whether this post is written by him as nobody else know such detailed about my trouble. You are wonderful! Thanks!

  34. So happy to get found this article.. Is not it awesome when you uncover an excellent article? Treasure the entry you made available.. Excellent views you ave got here..

  35. Thank you for another fantastic article. Where else could anybody get that type of information in such an ideal way of writing? I have a presentation next week, and I am on the look for such info.

  36. It’а†s actually a nice and useful piece of information. I am glad that you just shared this helpful information with us. Please stay us up to date like this. Thanks for sharing.

  37. Wow, fantastic blog layout! How long have you ever been running a blog for? you made running a blog look easy. The overall look of your site is fantastic, let alone the content material!

  38. Im no pro, but I consider you just crafted a very good point point. You certainly know what youre talking about, and I can really get behind that. Thanks for staying so upfront and so truthful.

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here