python基礎概念

閉包和裝飾器


閉包:就是在一個外函數(shù)中定義了一個內(nèi)部函數(shù)先口,內(nèi)部函數(shù)引用了外函數(shù)的臨時變量泡孩,并且外函數(shù)的返回值就是內(nèi)函數(shù)的引用

裝飾器:本質(zhì)就是閉包岳服,主要作用為已經(jīng)存在的對象添加額外的功能或链,例如日志記錄兜材,數(shù)據(jù)校驗等

匿名函數(shù)


lambda? 通常用于需要一個函數(shù)错览,但是又不想費神命名一個函數(shù)的時候使用纫雁,可節(jié)約內(nèi)存空間

lambda x,y:x+y? ?

lambda 后面是傳入的參數(shù) :代表return

迭代器


基礎概念:

1.iteration:迭代?

2.iterable:可迭代對象 可重復迭代 滿足如下其中之一的都是iterable

可以for循環(huán):for i in iterable

可以按照index索引的對象:也就是定義了__getitem__ 方法 比如list str

定義了__iter__方法 可以隨意返回

可以調(diào)用iter(obj)的對象 并且返回一個iterator

3.iterator:迭代器對象 只能迭代next一次 需要滿足如下的迭代器協(xié)議

定義了__iter__方法 但是必須返回自身

定義了next方法,在python3.x中是__next__ 用來返回下一個值倾哺,并且當沒有數(shù)據(jù)了轧邪,拋出StopIteration

可以保持當前的狀態(tài)

str和list是iterable 但不是iterator

2.自定義iterator 與數(shù)據(jù)分離

自定義iterator 就是定義__iter__ 和next方法

```

class DataIter(object):

? ? def __init__(self,*args):

? ? ? ? self.data=list(args)

? ? ? ? self.ind=0

? ? def __iter__(self):

? ? ? ? return self

? ? def next(self):

? ? ? ? if self.ind==len(self.data):

? ? ? ? ? ? raise StopIteration

? ? ? ? else:

? ? ? ? ? ? data=self.data[self.ind]

? ? ? ? ? ? self.ind+=1

? ? ? ? ? ? return data

```

把iterator從數(shù)據(jù)中分離出來,分別定義一個iterable和iterator

```

class Data(object):

? ? def __init__(self,*args):

? ? ? ? self.data=list(args)

? ? def __iter__(self):#并沒有返回自身

? ? ? ? return DataIterator(self)

```

數(shù)據(jù)可以復用羞海,因為每次返回一個DataIterator忌愚,xrange的實現(xiàn)便是這種數(shù)據(jù)和迭代分離的形式,很省內(nèi)存

為什么使用for可以迭代迭代器對象却邓,因為for替我們做了next的活硕糊,以及接收stopIteration的處理

生成器


生成器是一種特殊的迭代器,生成器自動實現(xiàn)了“迭代器協(xié)議”(即__iter__和next方法)腊徙,不需要再手動實現(xiàn)兩方法简十。

與生成器不同的是生成器的實現(xiàn)方式不同,可以通過生成器表達式和生成器函數(shù)兩種方式實現(xiàn)撬腾,代碼更簡潔

1.包含yield的函數(shù)

生成器函數(shù)跟普通函數(shù)只有一點不一樣螟蝙,就是把return換成yield,內(nèi)部實現(xiàn)了迭代器協(xié)議民傻,同時保持狀態(tài)可以掛起

yield是數(shù)據(jù)的生產(chǎn)者胰默,for等是數(shù)據(jù)的消費者

```

def add():

? ? ?for i in range(10):

? ? ? ? yield i

g = add()#并沒有真實執(zhí)行函數(shù),只是返回了一個生成器對象

print(g)? # <generator object add at 0x10f6110f8>

print(next(g))? # 0 真正執(zhí)行函數(shù)漓踢,執(zhí)行到y(tǒng)ield一個返回值牵署,然后就會掛起,保持當前的名字空間等狀態(tài)喧半,然后等待下一次的調(diào)用碟刺,從yield的下一行繼續(xù)執(zhí)行

print(next(g))? # 1

```

我們可以通過yield關鍵字來定義一個生成器函數(shù),這個生成器函數(shù)返回值就是一個生成器對象薯酝;

yield可以理解為return半沽,返回后面的值給調(diào)用者爽柒。不同的是return返回后,函數(shù)會釋放者填,而生成器則不會浩村。在直接調(diào)用next方法或用for語句進行下一次迭代時,生成器會從yield下一句開始執(zhí)行占哟,直至遇到下一個yield心墅。

2.生成器表達式

語法:(返回值 for 元素 in 可迭代對象 if 條件)

列表解析式的中括號換成小括號

返回一個生成器 生成器也是一個對象 屬于中間值

```

g=(i **2 for iin range(5))

print(g) #<generator object <genexpr> at 0x01167C30>

print(g.__next__()) #0

print(g.__next__()) #1

print(g.__next__()) #4

```

生成器表達式和列表解析式的區(qū)別

上下文管理器

>定義:在使用python編程中,有一個特殊的語句塊榨乎,執(zhí)行這個語句塊之前需要先執(zhí)行一些準備動作怎燥,當語句塊執(zhí)行完成后,需要繼續(xù)執(zhí)行一些收尾動作蜜暑。如操作文件時铐姚,操作前打開文件,操作后關閉文件肛捍,對于這些情況隐绵,python提供了上下文管理器概念,可以通過上下文管理器來定義控制代碼塊執(zhí)行前的準備動作以及執(zhí)行后的收尾動作

原理:創(chuàng)建一個上下文管理器類型的時候拙毫,就需要實現(xiàn)__enter__和__exit__方法依许,在python中,可以通過with語句來方便的使用上下文管理器缀蹄,with語句可以在代碼塊運行前進入一個運行時上下文(執(zhí)行__enter__方法)峭跳,并在代碼塊結(jié)束后退出該上下文(執(zhí)行__exit__方法)

```

with open ("1.txt",mode='w',encoding='utf-8) as file:

? ? file.write('hello world')

```

應用場景

文件操作缺前、進程線程之間互斥對象蛀醉、支持上下文其他對象

自定義類實現(xiàn)

```

class Sample():

? ? def __enter__(self):

? ? ? ? return self

#exc_type:錯誤的類型? exc_val:代碼類型對應的值 exc_tb:代碼中錯誤發(fā)生的位置

? ? def __exit__(self,exc_type,exc_val,exc_tb):

? ? ? ? print(exc_type,exc_value)

```

參數(shù)傳遞


參數(shù)傳遞類似于淺拷貝,傳遞的是值诡延,對于不可變對象滞欠,他的引用是不可變的古胆,所以傳值之后肆良,相當于新建了一個不可變對象 對于可變對象,傳遞的值逸绎,相當于副本惹恃,改變的時候引用里的值也會發(fā)生變化

深拷貝、淺拷貝

深拷貝:copy 模塊的 deepcopy 方法棺牧,完全拷貝了父對象及其子對象巫糙,包括值與內(nèi)存地址

淺拷貝:拷貝父對象,不會拷貝對象的內(nèi)部的子對象颊乘。修改父對象的時候参淹,不相互影響醉锄,修改子對象的時候,影響

????????????三種形式浙值,1:切片 a=b[:]? 2:copy函數(shù) a=copy.copy(b) 3恳不、工廠函數(shù) a=list(b)?

? ? ? ? ? ? 比如a=[1,2,3,[4,5]] b=a.copy() 修改b.append(5) a的值不會變? 修改b[3].append(6) a的值會變,因為[4,5]已經(jīng)是子對象了开呐,未被拷貝烟勋,a和b是指向同樣的地址的

=: 引用賦值 a=b? 修改a,b也會受影響 a相當于b的別名

is:比較兩邊的內(nèi)存地址是否相同

==:比較兩邊的值是否相等


內(nèi)存管理


三個方面:1筐付、對象的引用計數(shù)機制卵惦,2、垃圾回收機制瓦戚,3沮尿、內(nèi)存池機制

1、對象引用計數(shù)機制

python使用計數(shù)機制伤极,來追蹤內(nèi)存中的對象蛹找,所有對象都要引用計數(shù)

引用計數(shù)增加的情況

1:一個對象分配一個新的名稱

2:將其放入一個容器中,如列表哨坪、元組庸疾、字典

引用計數(shù)減少的情況

1:使用del語句對對象別名顯示的銷毀

2:引用超出作用域或被重新賦值

對于不可變的數(shù)據(jù)類型,如字符串当编,數(shù)字届慈,解釋器會在程序中的不同部分共享內(nèi)存,以便簡約內(nèi)存

2忿偷、垃圾回收機制

1:當一個對象的引用計數(shù)歸零的時候金顿,它將被垃圾收集機制處理掉

2:當兩個對象a和b相互引用的時候,del語句可以減少a b的引用計數(shù)鲤桥,并銷毀用于引用底層對象的名稱揍拆,然而由于每個對象都包含一個對其他對象的引用,因此引用計數(shù)不會歸零茶凳,對象也不會銷毀嫂拴。(從而導致內(nèi)存泄露)。為解決這一問題贮喧,解釋器會定期執(zhí)行一個循環(huán)檢測器筒狠,搜索不可訪問對象的循環(huán)并刪除它們。

3箱沦、內(nèi)存池機制

Python提供了對內(nèi)存的垃圾收集機制辩恼,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。

1,Pymalloc機制灶伊。為了加速Python的執(zhí)行效率疆前,Python引入了一個內(nèi)存池機制,用于管理對小塊內(nèi)存的申請和釋放聘萨。

2峡继,Python中所有小于256個字節(jié)的對象都使用pymalloc實現(xiàn)的分配器,而大的對象則使用系統(tǒng)的malloc匈挖。

3碾牌,對于Python對象,如整數(shù)儡循,浮點數(shù)和List舶吗,都有其獨立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池择膝。也就是說如果你分配又釋放了大量的整數(shù)誓琼,用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點數(shù)。


內(nèi)存泄露

如果存在循環(huán)引用肴捉,并且被循環(huán)引用的對象定義了__del__方法腹侣,就會發(fā)生內(nèi)存泄露,對象定義了__del__方法齿穗,這些對象變?yōu)閡ncollectable傲隶,垃圾回收機制無法收集這些對象

創(chuàng)建對象后,Python解釋器默認調(diào)用__init__()方法窃页。

當刪除一個對象時跺株,Python解釋器也會默認調(diào)用一個方法,這個方法為__del__()方法,手動調(diào)用del還是由Python自動回收都會觸發(fā)__del__方法執(zhí)行脖卖。

當使用del刪除變量指向的對象時乒省,如果對象的引用計數(shù)不會1,比如3畦木,那么此時只會讓這個引用計數(shù)減1袖扛,即變?yōu)?,當再次調(diào)用del時十籍,變?yōu)?蛆封,如果再調(diào)用1次del,此時會真的把對象進行刪除,

但是del xxx?不會主動調(diào)用__del__方法妓雾,只有引用計數(shù) == 0時娶吞,__del__()才會被執(zhí)行垒迂,并且定義了__del_()的實例無法被Python的循環(huán)垃圾收集器收集械姻,所以盡量不要自定義__del__()。一般情況下,__del__()?不會破壞垃圾處理器楷拳。


python2和python3的區(qū)別

? ?1绣夺、Python3 使用 print 必須要以小括號包裹打印內(nèi)容,比如 print('hi')

? ? ? ?Python2 既可以使用帶小括號的方式欢揖,也可以使用一個空格來分隔打印內(nèi)容陶耍,比? ? ? ? 如 print 'hi'

? ? 2、python2 range(1,10)返回列表她混,python3中返回迭代器烈钞,節(jié)約內(nèi)存

? ? 3、python2中使用ascii編碼坤按,python中使用utf-8編碼

? ? 4毯欣、python2中unicode表示字符串序列,str表示字節(jié)序列

? ? ? python3中str表示字符串序列臭脓,byte表示字節(jié)序列

多態(tài)


作用:讓具有不同功能的函數(shù)可以使用相同的函數(shù)名酗钞,這樣就可以用一個函數(shù)名調(diào)用不同內(nèi)容(功能)的函數(shù)

特點:

1来累、只關心對象的實例方法是否同名砚作,不關心對象所屬的類型;

2嘹锁、對象所屬的類之間葫录,繼承關系可有可無;

3领猾、多態(tài)的好處可以增加代碼的外部調(diào)用靈活度压昼,讓代碼更加通用,兼容性比較強瘤运;

4窍霞、多態(tài)是調(diào)用方法的技巧,不會影響到類的內(nèi)部設計拯坟。

字典的實現(xiàn)原理


python中的字典底層依靠哈希表(hash table)實現(xiàn)

哈希表是key-value類型的數(shù)據(jù)結(jié)構(gòu), 可以理解為一個鍵值需要按照一定規(guī)則存放的數(shù)組, 而哈希函數(shù)就是這個規(guī)則

字典本質(zhì)上是一個散列表(總有空白元素的數(shù)組, python至少保證1/3的數(shù)組是空的), 字典中的每個鍵都占用一個單元, 一個單元分為兩部分, 分別是對鍵的引用和對值的引用, 使用hash函數(shù)獲得鍵的散列值, 散列值對數(shù)組長度取余, 取得的值就是存放位置的索引

哈希沖突(數(shù)組的索引相同), 使用開放尋址法解決

由于哈希算法被計算的數(shù)據(jù)是無限的但金,而計算后的結(jié)果范圍有限,因此總會存在不同的數(shù)據(jù)經(jīng)過計算后得到的值相同郁季,這就是哈希沖突冷溃。

從發(fā)生沖突的那個單元起,按照一定的次序梦裂,從哈希表中找到一個空閑的單元似枕。然后把發(fā)生沖突的元素存入到該單元的一種方法。開放定址法需要的表長度要大于等于所需要存放的元素年柠。

JSON和字典的區(qū)別


json是一種數(shù)據(jù)格式凿歼,是純字符串

dict是一個完整的數(shù)據(jù)結(jié)構(gòu)

json的key可以是有序、重復的;dict的key不可以重復

json的value只能是字符串答憔、浮點數(shù)味赃、布爾值或者null,或者它們構(gòu)成的數(shù)組或者對象虐拓。

json任意key存在默認值undefined心俗,dict默認沒有默認值

格式就會有一些形式上的限制,比如json的格式要求必須且只能使用雙引號作為key或者值的邊界符號(值如果是數(shù)字可以不用加雙引號)蓉驹,不能使用單引號城榛,用單引號或者不用引號會導致讀取數(shù)據(jù)錯誤,而且“key”必須使用邊界符(雙引號)态兴,但字典就無所謂了,可以使用單引號吠谢,也可以使用雙引號。

重載和重寫

答:重載是指函數(shù)名相同诗茎,參數(shù)列表不同的函數(shù)實現(xiàn)方法工坊。它們的返回值可以不同,但返回值不可以作為區(qū)分不同重載函數(shù)的標志敢订。

重寫是指函數(shù)名相同王污,參數(shù)列表相同,只有方法體不同的實現(xiàn)方法楚午,即函數(shù)花括號里面不一樣昭齐,一般用于子類繼承父類時對父類方法的重寫,父類函數(shù)中必須要有virtual關鍵字矾柜。(子類的同名方法屏蔽了父類方法的現(xiàn)象稱為隱藏阱驾。

python多線程

1.線程概念:

線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體.

與進程的區(qū)別:

(1) 地址空間:進程內(nèi)的一個執(zhí)行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;

(2) 資源擁有:進程是資源分配和擁有的單位,同一個進程內(nèi)的線程共享進程的資源

(3) 線程是處理器調(diào)度的基本單位,但進程不是.

(4) 二者均可并發(fā)執(zhí)行.

簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.

線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高怪蔑。

另外里覆,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存缆瓣,從而極大地提高了程序的運行效率喧枷。

2.線程和進程間的區(qū)別

進程就是一個應用程序在處理機上的一次執(zhí)行過程,它是一個動態(tài)的概念弓坞,而線程是進程中的一部分隧甚,進程包含多個線程在運行。

多線程可以共享全局變量渡冻,多進程不能戚扳。多線程中,所有子線程的進程號相同族吻;多進程中帽借,不同的子進程進程號不同珠增。

進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.

線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.

一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行.

3.python線程模塊

?python主要是通過thread和threading這兩個模塊來實現(xiàn)多線程支持。

python的thread模塊是比較底層的模塊宜雀,python的threading模塊是對thread做了一些封裝,可以更加方便的被使用握础。

但是python(cpython)由于GIL的存在無法使用threading充分利用CPU資源辐董,如果想充分發(fā)揮多核CPU的計算能力需要使用multiprocessing模塊(Windows下使用會有諸多問題)。

3.1創(chuàng)建線程

?python3.x中通過threading模塊創(chuàng)建新的線程有兩種方法:

一種是通過threading.Thread(Target=executable Method)-即傳遞給Thread對象一個可執(zhí)行方法(或?qū)ο螅?/p>

第二種是繼承threading.Thread定義子類并重寫run()方法禀综。第二種方法中简烘,唯一必須重寫的方法是run()

3.2線程同步

線程執(zhí)行是亂序的,要使之有序定枷,需要進行線程同步

如果多個線程共同對某個數(shù)據(jù)修改孤澎,則可能出現(xiàn)不可預料的結(jié)果,為了保證數(shù)據(jù)的正確性欠窒,需要對多個線程進行同步覆旭。

使用Thread對象的Lock和Rlock可以實現(xiàn)簡單的線程同步亡笑,這兩個對象都有acquire方法和release方法诞丽,對于那些需要每次只允許一個線程操作的數(shù)據(jù),可以將其操作放到acquire和release方法之間顷啼。

需要注意的是荐虐,Python有一個GIL(Global Interpreter Lock)機制七兜,任何線程在運行之前必須獲取這個全局鎖才能執(zhí)行,每當執(zhí)行完100條字節(jié)碼福扬,全局鎖才會釋放腕铸,切換到其他線程執(zhí)行。

多線程實現(xiàn)同步有四種方式:鎖機制铛碑,信號量狠裹,條件判斷和同步隊列。

3.2.1鎖機制

threading的Lock類汽烦,用該類的acquire函數(shù)進行加鎖酪耳,用realease函數(shù)進行解鎖

3.2.2線程同步隊列queue

Python的queue模塊中提供了同步的、線程安全的隊列類刹缝,包括FIFO(先入先出)隊列Queue碗暗,LIFO(后入先出)隊列LifoQueue,和優(yōu)先級隊列PriorityQueue梢夯。這些隊列都實現(xiàn)了鎖原語言疗,能夠在多線程中直接使用∷淘遥可以使用隊列來實現(xiàn)線程間的同步噪奄。

queue模塊中的常用方法:

queue.qsize() 返回隊列的大小

queue.empty() 如果隊列為空死姚,返回True,反之False

queue.full() 如果隊列滿了,返回True,反之False

queue.full 與 maxsize 大小對應

queue.get([block[, timeout]])獲取隊列勤篮,timeout等待時間

queue.get_nowait() 相當Queue.get(False)

queue.put(item) 寫入隊列都毒,timeout等待時間

queue.put_nowait(item) 相當Queue.put(item, False)

queue.task_done() 在完成一項工作之后,Queue.task_done()函數(shù)向任務已經(jīng)完成的隊列發(fā)送一個信號

queue.join() 實際上意味著等到隊列為空碰缔,再執(zhí)行別的操作

3.3 線程池

我們把任務放進隊列中去账劲,然后開N個線程,每個線程都去隊列中取一個任務金抡,執(zhí)行完了之后告訴系統(tǒng)說我執(zhí)行完了瀑焦,然后接著去隊列中取下一個任務,直至隊列中所有任務取空梗肝,退出線程榛瓮。

使用線程池:

由于線程預先被創(chuàng)建并放入線程池中,同時處理完當前任務之后并不銷毀而是被安排處理下一個任務巫击,因此能夠避免多次創(chuàng)建線程禀晓,從而節(jié)省線程創(chuàng)建和銷毀的開銷,能帶來更好的性能和系統(tǒng)穩(wěn)定性坝锰。

服務器CPU核數(shù)有限匆绣,能夠同時并發(fā)的線程數(shù)有限,并不是開得越多越好什黑,以及線程切換是有開銷的崎淳,如果線程切換過于頻繁,反而會使性能降低

線程執(zhí)行過程中愕把,計算時間分為兩部分:

CPU計算拣凹,占用CPU

不需要CPU計算,不占用CPU恨豁,等待IO返回嚣镜,比如recv(), accept(), sleep()等操作,具體操作就是比如

訪問cache橘蜜、RPC調(diào)用下游service菊匿、訪問DB,等需要網(wǎng)絡調(diào)用的操作

https://blog.csdn.net/daiyu__zz/article/details/81912018

在Python中如何實現(xiàn)多線程计福?

一個線程就是一個輕量級進程跌捆,多線程能讓我們一次執(zhí)行多個線程。我們都知道佩厚,Python是多線程語言,其內(nèi)置有多線程工具包说订。

Python中的GIL(全局解釋器鎖)確保一次執(zhí)行單個線程抄瓦。一個線程保存GIL并在將其傳遞給下個線程之前執(zhí)行一些操作潮瓶,這會讓我們產(chǎn)生并行運行的錯覺。但實際上钙姊,只是線程在CPU上輪流運行毯辅。當然,所有的傳遞會增加程序執(zhí)行的內(nèi)存壓力煞额。

多進程

通過multiprocessing 實現(xiàn)多進程

```

from multiprocessingimport Process

import time,random

def Test(name):

print("welcome to my house %s" % name)

time.sleep(random.randint(1,3))

print("see you next time %s" % name)

if __name__ =='__main__':

p1 = Process(target=Test,args=('鳴人',))

p2 = Process(target=Test,args=('佐助',))

p3 = Process(target=Test,args=('小櫻',))

p1.start()

p2.start()

```

運行效果

python數(shù)據(jù)庫處理

https://www.liaoxuefeng.com/wiki/1016959663602400/1017803857459008

python常用方法


a[::-1]和a[i:j]

https://blog.csdn.net/mingyuli/article/details/81604795

b = a[i:j] ? 表示復制a[i]到a[j-1]思恐,以生成新的list對象

a = [0,1,2,3,4,5,6,7,8,9]

b = a[1:3] ? #?[1,2]

b = a[i:j:s]表示:i,j與上面的一樣,但s表示步進立镶,缺省為1.

所以a[i:j:1]相當于a[i:j]

當s<0時壁袄,i缺省時类早,默認為-1. j缺省時媚媒,默認為-len(a)-1

所以a[::-1]相當于 a[-1:-len(a)-1:-1],也就是從最后一個元素到第一個元素復制一遍涩僻,即倒序缭召。

a='python'

b=a[::-1]

print(b) #nohtyp

c=a[::-2]

print(c) #nhy

#從后往前數(shù)的話,最后一個位置為-1

d=a[:-1]? #從位置0到位置-1之前的數(shù)

print(d)? #pytho

e=a[:-2]? #從位置0到位置-2之前的數(shù)

print(e)? #pyth

reverse

a = [1,2,3]

a.reverse()?

a=[3,2,1]

返回值為NA逆日,作用于自身

list

當數(shù)組不為空時:

if len(list_temp)

if list_temp:


字符串操作

https://www.cnblogs.com/yaxin1989/p/6129188.html

join

l1=['a','b','c','d']

s1=''.join(l1)? ? abcd

s2='a'.join(l1)? aabacada

s3='4'.join(l1) a4b4c4d4

split

s2.split('a')? ['a','b','c','d']

s3.split('4')?['a','b','c','d']

strip??

lstrip rstrip 去掉字符串兩端字符嵌巷,默認空格

s='222abc22222'

s.strip('2')? 'abc'

s.lstrip('2') 'abc22222'

s.rstrip('2') '222abc'


bin函數(shù)

https://www.runoob.com/python/python-func-bin.html

判斷二進制中有多少個1

bin(n).count('1')#將n轉(zhuǎn)換成二進制,然后數(shù)里面的1的個數(shù)

format(n,'b') #將n轉(zhuǎn)換成二進制


判斷是否是數(shù)字室抽、字母

str1="123"

str2="ABC"

str3="1AB"

str1.isdigit()#判斷是否是數(shù)字

str2.isalpha()#判斷是否是字母

str3.isalnum()#判斷是否是字母和數(shù)字組合


python的次方

10的2次方 10**2?

import math

math.pow(10,2)

2**31表示2的31次冪

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搪哪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坪圾,更是在濱河造成了極大的恐慌晓折,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兽泄,死亡現(xiàn)場離奇詭異漓概,居然都是意外死亡,警方通過查閱死者的電腦和手機病梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門胃珍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜓陌,你說我怎么就攤上這事觅彰。” “怎么了钮热?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵缔莲,是天一觀的道長。 經(jīng)常有香客問我霉旗,道長痴奏,這世上最難降的妖魔是什么蛀骇? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮读拆,結(jié)果婚禮上擅憔,老公的妹妹穿的比我還像新娘。我一直安慰自己檐晕,他們只是感情好暑诸,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辟灰,像睡著了一般个榕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芥喇,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天西采,我揣著相機與錄音,去河邊找鬼继控。 笑死械馆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的武通。 我是一名探鬼主播霹崎,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冶忱!你這毒婦竟也來了尾菇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤囚枪,失蹤者是張志新(化名)和其女友劉穎派诬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眶拉,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡千埃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆植。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片放可。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朝刊,靈堂內(nèi)的尸體忽然破棺而出耀里,到底是詐尸還是另有隱情,我是刑警寧澤拾氓,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布冯挎,位于F島的核電站,受9級特大地震影響咙鞍,放射性物質(zhì)發(fā)生泄漏房官。R本人自食惡果不足惜趾徽,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翰守。 院中可真熱鬧孵奶,春花似錦、人聲如沸蜡峰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湿颅。三九已至载绿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間油航,已是汗流浹背崭庸。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劝堪,地道東北人冀自。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓揉稚,卻偏偏與公主長得像秒啦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搀玖,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容