最近在研究多執行緒的時候,發現了乙個佇列
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...