python3基礎(六)-變數
阿新 • • 發佈:2018-11-12
1、區域性變數
在函式裡面定義的變數為區域性變數,它只能在該函式當中使用(它的作用範圍在該函式裡面),出了該函式就不起作用了。如果區域性變數和全域性變數的名字是一樣的,則在函式內會優先使用區域性變數。
2、全域性變數
在函式體外面定義的變數為全域性變數,可以在後面的程式碼中使用。
3、str(list)函式
names=['zhan', 'tao', 'lishi'] print("names的值為%s"%names) #前面print使用的變數為基礎變數,而這裡為什麼可以使用陣列呢,其實是系統自動幫我們做了些事情,比如在這個地方系統自動呼叫的函式將陣列轉換成了字串str(names)
4、函式多個返回值
def test():
a=1
b=2
return a,b #函式是可以返回多個值的,也可以返回一個數組型別的值:return [a,b]
x,y=test() #可以使用兩個變數來接它裡面返回的兩個值。x=1,y=2
x=test() #也可以使用一個變數來接它裡面返回的兩個值,只不過返回的值變成了元組(1,2),也可以使用一個值來接它返回的陣列。
5、預設引數值
def test(x, y, z=10): #z=10則是預設引數,預設值為10 print(x, y, z) 什麼是預設引數?函式裡面定義的引數,一般呼叫時是必須要傳入值的。而預設引數,則是引數含有預設值,而呼叫時不一定要對此引數傳值。當呼叫此函式時,不傳值時預設引數則會使用預設值,當傳入值時,預設引數則會使用新傳入的值。
6、不定長引數
def test(x, y, *args): #*args為匿名引數,也就是不帶名字的 print(x, y) print(args) sum = x + y for i in args: sum+=i print(sum) test(1,2,3,4,5,6,7,8) 結果:x=1,y=2,args=(3,4,5,6,7,8) def test2(x, *args, **kwargs): #*kwargs為帶名字的引數 print(x) print(args) print(kwargs) sum = x + y for i in args: sum+=i for i in kwargs.values(): #既然kwargs是字典,而我們所需要的只是字典的值 sum+=i print(sum) test2(1,2,3, num1=4, num2=5) #此處如果不指定名字,那麼4和5也會被傳給匿名引數 結果:x=1,args=(2,3),kwargs={'num1' : '4', 'num2' : '5'} #從結果可以看出kwargs引數返回的是一個字典
7、集合的拆包
nums=[2,3]
num2={"num1":4, "num2":5}
test2(1, *nums, **nums2) #打印出來的結果,跟test2(1,2,3, num1=4, num2=5)這種傳參方法所得到的結果是一樣的。本來nums和num2是全域性變數名,但在傳入的引數前加上*或**號,是為了表明傳入的是匿名引數,還是帶名字的引數。
8、小知識
1)如果在全域性變數定義了一個age=30。如果在某個函式當中,也使用賦值運算子直接age=30,則是代表在此函式裡面重新定義了一個區域性變數為age,而不一定是修改全域性變數。(這塊是跟java不同的,java裡面是直接修改全域性變數)
2)如果在賦值運算前加上global age,則代表下一行是修改變數值。
3)如果全域性變數是可變型別的變數,則可以在呼叫它的函式裡面直接通過變數本身的函式修改變數的值。但是需要重新賦值也就是修改引用,仍然要加global age提前申明,否則仍然是在呼叫函式裡面新建一個新的區域性變數。list或dict。
4)如果全域性變數是不可變型別是絕對不能修改它的值的。比如連續定義兩個全域性變數age=100,age=200,這並不是把age的值改成了200,而是在記憶體當中存在兩個堆記憶體塊,一個堆記憶體塊存的值為100,另一個堆記憶體塊存的值為200,只是修改了變數age的引用而已。而如果age=200是在函式當中,那麼即不可以修改全域性變數age的值,也不能修改全域性變數age的引用,而是重新定義了一個新的區域性變數age。除非在上一行,加上global age,也僅僅是修改引用而已。
5)函式定義時,預設引數不能放在預設引數之前定義。意思就是帶有預設值的形式引數,必須放在沒有預設值的的引數後面定義。
6)函式裡面變數的變化,要注意可變變數與不可變變數的區別。比如str.replace("", "")函式是不會導致str本身的值有任何變化的,而是建立一個新的字串,所以在呼叫此函式時需要定義一個變數來接它的結果。
作者:滄水巫雲
部落格:http://blog.csdn.NET/amir_zt/
以上原創,轉載請註明出處,謝謝。
https://blog.csdn.net/amir_zt/article/details/83011931