Python全棧Day 14部分知識點
- 2020 年 1 月 19 日
- 筆記
前面涉及數據類型和變量的總結
變量的作用是用來記錄狀態變化,變量名:「門牌號」,變量值:內存中開闢一個「小房間「」,存在裏面。
數據類型:字符串、數字、列表、元組、字典。
可變:列表、字典
不可變(重新賦值,用ID號查看發現變了):字符串,數字,元組
訪問順序:
直接訪問:數字
順序訪問:字符串、列表、元組
映射:字典(占內存比列表高,但查詢速度更快)
存放元素個數:
容器類型:列表、元組、字典
原子:數字、字符串
集合
由不同元素組成;無序;只能存放不可變類型。
s={1,2,3,4,5,6} #和字典一樣都是花括號,但元素不一樣
dic={key:value,…}
s=set('hello')
print(s)
輸出
{'o','h','l','e'} #不止這一種結果
s=set(['alex','alex','sb'])
print(s)
輸出
{『sb』,'alex'}
內置方法
- add(將括號內的不可變數據整體放入集合中)
- set(清空集合,輸出set())
- copy(複製某集合,產生新集合)
- pop(隨機刪除集合中某元素)
- remove(指定刪除某元素,括號內寫元素,元素不存在會報錯)
- discard(指定刪除某元素,括號內寫元素,元素不存在不會報錯)
補充
set本身是可變的,但用s=frozenset('hello')定義的set是不可變的。
簡單去重:
name=['alex','alex','wupeiqi']
name=list(set(name))
字符串格式化
msg='I'+'Like'+'Music' #加號盡量不要用,會開闢新的內存空間,效率非常低
#與之相比,下面這樣做就比較合理
msg='I am %s my hobby is %s'%('Chen Yuan','music') #其實%s什麼都能接收,比如列表,數字…,但盡量用專門的符號,否則降低可讀性;%.3s截取字符串前三位。 %d只能接收數字 %f浮點數(%.2f四捨五入小數點後兩位)。 打印百分號%%。
print(msg)
輸出
I am Chen Yuan my hobby is music
tp1='i am %(name)s age %(age)d'%{'name':'alex','age':18} #通過鍵
print('root','x','0','0',sep=':')
輸出
root:x:0:0
常用格式化
tp1='i am {},age {},hobby {}'.format('Alex',18,'play') #不一一對應則報錯
tp1='i am {2},age {1},hobby {0}'.format('play',18,'Alex') #後面相當於元組
tp1='i am {1},age {1}'.format('play',18,'Alex') #輸出i am 18,age 18
tp1='i am {name},age {age},hobby {hobby}'.format(name='Alex',age=18,hobby='play')
tp1=''i am {name},age {age},hobby {hobby}'.format(**{'name':'Alex','age':18,'hobby':'play'})
tp1='i am {0[0]},age {0[1]},hobby {0[2]}'.format(['Alex',18,'play'],['CY',23,'music']) #0[0]中第一個0指的是format後面整個圓括號和它包含的東西,輸出i am Alex,age 18,hobby play
tp1='i am {:s},age {:d},money {:f}'.format('Alex',18,9999.9)
tp1='i am {:s},age {:d}'.format(*['Alex',18])
tp1='numbers: {:b},{:o},{:d},{:x},{:X},{:%},{}'.format(15,15,15,15,15,15.87623,2) #b是二進制,o八進制,d整型,x十六進制(小寫abcd),X(大寫abcd),%顯示百分比(1587.623000%默認小數點後六位)
函數
為了完成某特定功能而存在(內部開頭'''The function definitions''',結尾return …),返回值(如果是變量?)需要將值賦給新變量,然後打印該變量,否則打印出的是地址。函數遇到return就結束掉了,寫多個return只會執行第一個。
Python語句是自上而下執行的,如果定義了一個有參函數,又定義了一個函數名相同的無參函數,則接下來調用默認是調用無參的那個,如果調用的時候傳參將會報錯。
使用函數的好處:
1.減少代碼重用;
2.保持一致性,易維護;
3.可擴展性。
過程的定義:
沒有返回值的函數,沒返回值返回None。
返回值可以是多個值,返回的其實是元組
總結:
返回值數=0 返回None
返回值數=1 返回object
返回值數>1 返回tuple
變量是不佔空間的,相當於門牌號,值才占空間。
形參只有在被調用時才會分配內存單元,調用結束即可釋放所分配的內存單元,只在函數內部有效。
實參可以是常量、變量、表達式、函數等,無論何類,進行函數調用時都必須有確定的值,以便把這些值傳送給形參。
調用的位置參數test(1,2,3)(位置必須固定,不能多或少參數)和形參一一對應,如果調用使用的是關鍵字參數test(y=2,x=1,z=3),無需一一對應,但也不能多或缺參數。如果混用位置參數和關鍵字參數則位置參數一定要在關鍵字參數左邊(另外,test(1,2,z=3,y=4)也會報錯,y值不會覆蓋。)
形參如果包括設置默認值的參數可以不給它傳值使用默認值,或者賦新值覆蓋。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 def test(x,*args): 4 print(x) 5 print(args) 6 print(args[0]) 7 args.append('x') 8 print(args)
1.
輸入
test(1,2,3,4,5,6)
輸出
Traceback (most recent call last): File "<input>", line 3, in <module> 1 File "<input>", line 7, in test AttributeError: 'tuple' object has no attribute 'append' (2, 3, 4, 5, 6) #元組 2
2.
輸入
test(1,{'name':'alex'})
輸出
1
({'name':'alex'},)
3.
輸入(函數體最後加一條print(args[0][0]))
test(1,['x','y','z'])
輸出
1
(['x','y','z'],)
x
4.
輸入
test(1,*['x','y','z']) #遍歷列表的元素依次賦給args元組
輸出
1
('x','y','z')
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 def test(x,**kwargs): 4 print(x) 5 print(kwargs)
1.
輸入
test(1,y=2,z=3)
輸出
1
{'y':2,'z':3}
2.
輸入
test(1,y=2,z=3,z=3) #會報錯,一個參數不能傳兩個值
def test(x,*args,**kwargs) #參數順序不要變,名稱最好也別變