為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

給自己的Python小筆記: Python進階用法- 想讓變數名稱跟著迴圈動態定義嗎- Locals與Globals 技巧教學


Github完整程式碼連結


哈囉哈囉,今天想跟大家介紹一個我在工作中常用到的一個小技巧,由於職業的關係,我時常需要導入數據,並賦予不同的變數名稱來同時操作這些不同時間點錄下的資料,但如果想要同時對這種眾多檔案進行一樣的數據處理,總不能要我一個一個定義變數名稱給它們,然後再一個一個進行數據處理,這樣我就沒時間回家寫文章了XD,所以今天要來分享給大家這個,我覺得非常實用的技巧

問題1: 如果今天遇到一個需要我們定義很多連續變數的值時,我們該怎麼做呢?

範例1: 一般的作法,我們會分別定義每個變數的值,然後再使用它們

number1 = 1
number2 = 2
number3 = 3
number4 = 4
number5 = 5
number6 = 6
number7 = 7
number8 = 8
number9 = 9
number10 = 10
​
​
print(number1)
print(number2)
print(number3)
print(number4)
print(number5)
print(number6)
print(number7)
print(number8)
print(number9)
print(number10)


小提醒: 這樣的作法,確實也可以達到我們要的目的,但是如果今天變數一變多,我們有1000個以上的時候,總不能這樣慢慢定義每個變數,會寫到天荒地老,哈哈,所以接下來我們就來看看今天的主角: locals()與globals()如何幫助我們快速實現目的

範例2: locals與globals簡單變換變數名稱的運用

  • locals()
for i in range(1,10):
  locals()['number'+str(i)] = i
  print('Print In Once: ', locals()['number'+str(i)])
  • globals()
for i in range(1,10):
  globals()['number'+str(i)] = i
  print('Print In Once: ', globals()['number'+str(i)])
  
print(number1)
print(number2)
print(number3)
print(number4)
print(number5)
print(number6)
print(number7)
print(number8)
print(number9)


問題2: 如果今天在函式中定義好的變數,要怎麼在另一個函式中此用這些變數呢?

從上面的結果看起來,不論是locals()還是globals(),都能達到一樣的效果呀,那它們有什麼不同?

  • locals(): 宣告為區域變數,它在使用上會遇到一個問題,在函式A中定義好的變數,不能在函式B中被使用
name_list = ['Jack', 'Eric', 'Cathy', 'Jenny', 'James', 'Gary', 'Lucy', 'Candy']
​
def locals_example():
  for i in range(len(name_list)):
    locals()['name'+str(i)] = name_list[i]
    print(locals()['name'+str(i)])
​
def greet_example():
  for n in range(len(name_list)):
    print('locals(): Hello' + locals()['name'+str(i)])
    
  
if __name__ == '__main__':
  locals_example()
  greet_example()


從最後結果發現,num0並不能在本身函式以外的地方使用,這也正是locals()宣告為區域變數的原因

  • globals(): 宣告為全域變數,變數就能在任何其他函數中使用
name_list = ['Jack', 'Eric', 'Cathy', 'Jenny', 'James', 'Gary', 'Lucy', 'Candy']
​
def globals_example():
  for n in range(len(name_list)):
    globals()['name'+str(n)] = name_list[n]
    print(globals()['name'+str(n)])
​
def greet_example():
  for n in range(len(name_list)):
    print('globals(): Hello' + globals()['name'+str(n)])
    
  
if __name__ == '__main__':
  globals_example()
  greet_example()
  print(name2)


從最後結果可以看出,由於name2是被globals()宣告為全域變數的,所以最後可以成功印出

既然globals()這麼好用,那全部都用globals就好啦,為什麼還要使用locals呢?

未來當撰寫的程式碼越來越多的時候,可能會出現重複定義同一個變數名稱,就有覆寫的問題,所以要斟酌使用locals或是globals喔

這篇雖然短短的,但我覺得這個技巧是可以幫助我們節省很長很長的時間,來進行數據處理,希望這次對大家也有大大的幫助~~

如果覺得我寫得還行,再幫我拍拍手喔,感謝您

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论