1. 程式人生 > >python線程中的全局變量與局部變量

python線程中的全局變量與局部變量

__name__ time () pen import 字符串 rom src pre

在python多線程開發中,全局變量是多個線程共享的數據,局部變量是各自線程的,非共享的。

如下幾種寫法都是可以的:

第一種:將列表當成參數傳遞給線程

from threading import Thread
import time

def work1(nums):
    nums.append(44)
    print("----in work1---",nums)

def work2(nums):
    #延時一會,保證t1線程中的事情做完
    time.sleep(1)
    print("----in work2---",nums)

if __name__==__main__
: g_nums = [11, 22, 33] t1 = Thread(target=work1, args=(g_nums,)) #這種寫法是將列表當成參數傳遞 t1.start() t2 = Thread(target=work2, args=(g_nums,)) t2.start()

第二種:不傳遞,直接用

from threading import Thread
import time

def work1():
    nums.append(44)
    print("----in work1---",nums)

def work2():
    
#延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==__main__: nums = [11, 22, 33] t1 = Thread(target=work1) t1.start() t2 = Thread(target=work2) t2.start()

結果都一樣:

技術分享圖片

對於參數是字符串,數字這種不可變類型的變量

,改變變量的值的時候,要用上global,否則程序報錯。

from threading import
Thread import time def work1(): global nums nums+1 print("----in work1---",nums) def work2(): #延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==__main__: nums = 12 t1 = Thread(target=work1) t1.start() t2 = Thread(target=work2) t2.start()

結果:

技術分享圖片

from threading import Thread
import time

def work1(nums):
    nums=nums+1
    print("----in work1---",nums)

def work2(nums):
    #延時一會,保證t1線程中的事情做完
    time.sleep(1)
    print("----in work2---",nums)

if __name__==__main__:
    g_nums = 11

    t1 = Thread(target=work1, args=(g_nums,)) 
    t1.start()
    t2 = Thread(target=work2, args=(g_nums,))
    t2.start()

結果:

技術分享圖片技術分享圖片

from threading import Thread
import time

def work1(nums):
    nums+1
    print("----in work1---",nums)

def work2(nums):
    #延時一會,保證t1線程中的事情做完
    time.sleep(1)
    print("----in work2---",nums)

if __name__==__main__:
    g_nums = 11

    t1 = Thread(target=work1, args=(g_nums,)) 
    t1.start()
    t2 = Thread(target=work2, args=(g_nums,))
    t2.start()

結果:

技術分享圖片

python線程中的全局變量與局部變量