1、callable() : 可否調用
def func():
pass
print(callable(a)) # False
print(callable(print)) # True
print(callable(func)) # True
2、三個查看方法Ctrl + 左鍵單擊 :pycharm
help:包含所有方法名 以及 它的使用方法 --- 不知道用法
dir:只包含方法名 --- 想查看某方法是否在這個數據類型中
print(dir(int)) == print(dir(5)) # 出來int的所有方法
3、
想輸出(黃字藍底):願你們這場愛能避免麻煩
print('\033[0;33;44m願你們這場愛能避免麻煩\033[0m')
PS:注意使用';'分號分隔開的
4、函數的內置方法們
①基礎數據類型相關(38)5、round: print(round(3.14159,2)) # 3.14數據結構相關(24):序列(13):列表和元組2:list和tuple相關內置函數2:reversed,slice字符串9:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr數據集合(3):字典1:dict集合2:set,frozenset相關內置函數(8):len,sorted,enumerate,all,any,zip,filter,map數字相關(14):數字—數據類型相關:**bool,**int,**float,complex數字—進制轉換相關:bin,oct,hex②迭代器/生成器相關(3)數字—數學運算:**min,**max,**sum,*abs,*divmod,*round,*pow
③作用域相關(2)locals()globals()④其他(12)字符串類型代碼的執行(3): *evel *exec compile輸入輸出(2): **input **print內存相關(2): **hash id文件操作相關(1): **open模塊相關(1): _import_幫助(1): help調用相關(1): callable查看內置屬性(1): *dir⑤反射相關(4):
⑥面向對象相關(9)
6、pow: print(pow(2,3,2)) 2的3次方 取餘 2 # 0
7、sum: print(sum([1,2,3,4,5,6),-2) # 前面加起來 減 2
print(sum(range(101))) # sum接收可迭代對象 5050
8、min: print(min([],default = 0)) 若沒有 default 則報錯 # 0
print(min([-9,2,23,59],key = abs)) # 輸出絕對值最小的數 # 2
9、max: 和min類似
10、divmid: print(divmod(17,10)) # (1,7) 商1,餘 7
11、input 和 print
①s = input('提示:')
②
print(1,2,sep=',') # print('%s,%s'%(1,2))
print(1,2,3,4,5,sep='*') # sep是指定多個要打印的內容之間的分隔符 ,默認空格
f = open('文件','w',encoding='utf-8')
print('abc\n',file=f)
print(2)
二、進度條:import time
for i in range(2,101,2): # 源代碼是從0 開始(加入顏色了之後不知道怎麼0%的時候顏色會覆蓋一下)
time.sleep(0.3) # 睡眠0.3,不然直接顯示,看不到效果
i2 = i // 2 # 打印多少個'*' 8/2 = 4
if i == 100: # 等於100打印完成,回車換行
p_str = '\r%s%% : \033[0;31;41m%s\033[0m\n'% (i,'*'*i2)
else: # 不等於100直接在後面打印*
p_str = '\r%s%% : \033[0;31;41m%s\033[0m'%(i,'*'*i2)
print(p_str,end='',flush=True) # 沒顏色的話是逐步打印 *
# print(self, *args, sep=' ', end='\n',flush=False) # 源碼中end 默認換行;flush緩存,爲True的話拿到一條打印一條三、不懂也不想懂的:難受
print(id(1)) # 1777295584
print(id(2)) # 1777295616
print(hash('sajghfj;eyrwodnvjnz,.jifupwk')) #算法 # 1058870219305678952
print(hash(125342)) # 125342
print(hash((1,2,3,4))) # 485696759010151909
數據的存儲和查找模塊:hashlib
{'k':'v'}
[1,2,3,4,5,6,]
hash([1,2,3,4,5,6,])
hash 判斷一個數據類型是否可以hash
在一個程序執行的過程中,對同一個值hash的結果總是不變
多次執行,對同一個值的hash結果可能改變
四、
1、迭代器強轉換的三種方法:
print(list(ret))
next
for循環
2、
li = [3,4,2,5,7,1,5]
ret = reversed(li) 這兩個的區別:
print(ret) 返回值不同:
print(list(ret)) reversed:返回迭代器
不改變原來的列表,生成一個新的序列迭代器
li.reverse() reverse:返回None
print(li) 是在原本的列表的基礎上修改的
3、
ret = bytes('花不再香',encoding='utf-8') :將中文轉換成bytes
print(ret.decode(encoding='utf-8')) :將十六進制轉換成中文
修改的次數多,且字符串長的時候:
ret = bytearray('alex',encoding='utf-8')
print(id(ret)) # ## 43715808
print(ret[0]) # ## 97
ret[0] = 65
print(ret) # ## bytearrary(b'ALex')
print(id(ret)) # ## 43715808
ps: 對比較長的字符串做修改的時候,指定某一處進行修改,不會改變這個bytearry的
4、print(ord('a')) # ## 97 顯示其ASCII碼
print(chr(97)) # ## a 顯示ASCII碼對應的字符
5、print(repr(1)) # ## 1
print(repr('1')) # ## 1
6、print('name: %r' %('金老闆')) # ## name: '金老闆'
print('name: %s' %('金老闆')) # ## name: 金老闆
7、enumerate:
li = ['筆記本','phone','Apple']
for i in enumerate(li): # ##(0,'筆記本')
print(i) # ##(1,'phone')
# ##(2,'Apple')
for i,j in enumerate(li,1): # ## 1 '筆記本'
print(i,j) # ## 2 'phone'
# ## 3 'Apple '
8、all 與 any (注意括號們)
print(all([1,2,3,0])) # ## False
print(all([1,None,2])) # ## False
print(all([1,2,''])) # ## False
print(all([1,2,3,4,5])) # ## True
print(any([True,None,False])) # ## True
print(any((False,None))) # ## False
9、filter:(過濾) 就是一個可迭代對象,想要一個子女的內容集,是從可迭代對象中篩選出來的
①
def is_odd(x):
if x % 2 == 0:
return True
ret = filter(is_odd,[1,4,6,7,9,12,17)
print(list(ret)) # ## [4,6,12]
② 去掉所有空內容和字符串中的空格def func(x):
return x and x.strip()
li = ['test',None,'','str',' ','end']
ret = filter(func,li)
print(list(ret)) # ## ['test', 'str', 'end']
10、map(映射):ret = map(abs,[-1,-5,6,-9])
print(list(ret)) # ## [1,5,6,9]
9/10:filter 和 map
參數很相近:一個函數名 + 可迭代對象
返回值相近:返回可迭代對象
區別:
filter 做篩選,結果還是原來就在可迭代對象中的項
map是對可迭代對象中的每一項做操作的,結果不一定是原來就在可迭代對象中的項
①有一個list, L = [1,2,3,4,5,6,7,8],我們要將f(x)=x^2作用於這個list上,那麼我們可以使用map函數處理
def func(x):
return x*x
ret = map(func,[1,2,3,4,5,6,7,8])
print(list(ret)) # [1, 4, 9, 16, 25, 36, 49, 64]
11、sort 和 sortedsort 是直接修改原列表的順序,節省內存
sorted 是生成一個新列表,不改變原列表
key 的用法 666
print(sorted([-5,3,-4,2,-1],reverse=True)) # ##[3, 2, -1, -4, -5]
print(sorted([-5,3,-4,2,-1],key=abs)) # ##[-1, 2, 3, -4, -5]
按長度排序:
list2 = ['sunv',(1,2),'a',[1,2,3]]
print(sorted(list2,key=len,reverse=True)) # ## ['sunv', [1, 2, 3], (1, 2), 'a']
12、拉鍊函數
print(list(zip([0,1,2,3,4],[5,6,7,8],['a','b']))) # ## [(0, 5, 'a'), (1, 6, 'b')]
五、lambda
1、要輸出值最大鍵:
dic = {'k1':10,'k2':100,'k3':30}
# print(max(dic.values())) # 100
# print(max(dic)) # k3 # 不用 lambda 做不到
print(max(dic,key=lambda k:dic[k])) # k2
2、map、lambda
ret = map(lambda x:x*x,[1,2,3,4,5,6,7,8])
print(list(ret))
3、filter、lambda(找三位數)
ret = filter(lambda num:99<num<1000,[1,4,859,67,34])
print(list(ret))
4、面試一:
現有兩個元組(('a')('b')),(('c')('d'))
使用匿名函數生成列表[{'a':'c'},{'b':'d'}]
t1 = (('a'),('b'))
t2 = (('c'),('d'))
# print(dict(zip(t1,t2))) # 自己想的(錯的,沒有用匿名函數)
①:
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2)))) # [{'a':'c'}, {'b':'d'}]
②:
test = lambda t1,t2 : [{i,j} for i,j in zip(t1,t2)]
print(test(t1,t2))
③:print([{i,j} for i,j in zip(t1,t2)])
5、面試2,將列表推導式換成了,生成器表達式
def multipliers(): return (lambda x:i*x for i in range(4)) print([m(2) for m in multipliers()]) # ## [0,2,4,6]