隨筆 關於區域性變數的一點小發現

2021-09-02 22:31:23 字數 2180 閱讀 1839

最近在研究多執行緒的時候,發現了乙個佇列

from queue import queue
這個佇列在多執行緒中是屬於執行緒安全,但是使用過程中發現了這樣的乙個問題,那就是

from queue import queue

def fun(que):

que.put(1)

def main():

q = queue(3)

print(q.empty())

fun(q)

print(q.get())

if __name__ == '__main__':

main()

輸出結果為:

這也就說明q佇列一開始是空的,但是在fun函式卻增加了乙個值,感覺這就和我之前所理解區域性變數不一樣了,按理說fun中的改變應該是不影響main中的值才對。

def fun(b):

b = 9

print("在fun中a的值為"+str(b))

def main():

a = 3

print("在修改前a的值為"+str(a))

fun(a)

print("在修改後a的值為"+str(a))

if __name__ == '__main__':

main()

def fun(b):

def main():

x =

print("修改前x的長度為"+str(len(x)))

fun(x)

print("修改後x的長度為"+str(len(x)))

print("x[0]的值為"+str(x[0]))

if __name__ == '__main__':

main()

def fun(b):

print("區域性變數b的id為" + str(id(b)))

def main():

x =

print("修改前x的id為"+str(id(x)))

fun(x)

print("修改後x的id為"+str(id(x)))

事實證明,他們的id都是一樣的,這也就驗證了我們上面的觀點。順便說乙個發現的另乙個點

def fun(b):

print("區域性變數b的id為" + str(id(b)))

def main():

a = 3

print("在修改前a的id為"+str(id(a)))

fun(a)

print("在修改後a的id為"+str(id(a)))

在main函式的a傳到fun函式中,如果沒有對他進行修改,那麼他們兩者是一樣的東西,也就是main函式確實把真正的a給傳送過去了。如果對傳過去的值進行修改。

def fun(b):

b = b + 1

print("區域性變數b的id為" + str(id(b)))

def main():

a = 3

print("在修改前a的id為"+str(id(a)))

fun(a)

print("在修改後a的id為"+str(id(a)))

那麼此時的b就是我們之前理解的那個區域性變數,我的分享就到這裡了,要是大家能從裡面收穫到一點點,那對我來說便是極好了。

讀C Primer的一點發現

1.識別符號不能包含兩個連續的下劃線 也不能以下劃線開頭後面緊跟乙個大寫字母 在函式體外定義的識別符號不能以下劃線開頭 int a 1 cout a endl 錯誤1error c2065 a 未宣告的識別符號d documents visual studio 2013 projects 實驗 實驗...

進製轉換規律的一點發現

前兩天刷題刷到這樣一道題目,然後問了大佬這種解法的思路,才恍然大悟.題意 給乙個長度不超過 18 的 01 串,你需要輸出這個串在 2,3,4,5,6,7,8,9,10 進製表示下的數值在 10 進製下的和。輸入描述 第一行是乙個正整數 t t 100000 表示測試資料的組數,接下來 t 行,每行...

關於區域性變數問題得出的發現與反思

今日群裡有人問了一段 為何無法執行,簡化如下 do while y 1 我稍加思索以後認為是 塊作用域的問題,就是定義完y以後,退出該 塊,y也就隨之消失了。我記得所學的static這個關鍵字可以宣告乙個靜態變數,就認為在int y 1之前加上static就可以增加變數的作用域,然後做了一下嘗試 d...