python 是一種代表簡單思想的語言,其語法相對簡單,很容易上手。不過,如果就此小視 python 語法的精妙和深邃,那就大錯特錯了。本文精心篩選了最能展現 python 語法之精妙的十個知識點,並附上詳細的例項**。如能在實戰中融會貫通、靈活使用,必將使**更為精煉、高效,同時也會極大提公升**b格,使之看上去更老練,讀起來更優雅
yield 則是用於構造生成器的。比如,我們要寫乙個函式,返回從0到某正整數的所有整數的平方,傳統的**寫法是這樣的。請看:
>>
>
defget_square
(n):
result =
list()
for i in
range
(n):
pow(i,2)
)return result
>>
>
print
(get_square(5)
)[0,
1,4,
9,16]
在各種稀奇古怪的語法中,列表推導式的使用頻率應該時最高的,對於**的簡化效果也非常明顯。比如,求列表各元素的平方,通常應該這樣寫(當然也有其他寫法,比如使用map函式)
a =[1
,2,3
,4,5
]result =
list()
for i in a:
result[1
,4,9
,16,25
]
但是如果計算1億以內的所有整數的平方,這個函式的記憶體開銷會非常大,這是 yield 就可以大顯身手了:
>>
>
defget_square
(n):
for i in
range
(n):
yield
(pow
(i,2))
>>
> a = get_square(5)
>>
> a
>
>>
>
for i in a:
print
(i, end=
', ')0
,1,4
,9,16
,
裝飾器很強大,我在這裡嘗試從需求的角度,用乙個簡單的例子,說明裝飾器的使用方法和製造工藝。假如我們需要定義很多個函式,在每個函式執行的時候要顯示這個函式的執行時長,裝飾器那麼簡單、優雅。下面的例子,很好地展示了這一點。
>>
>
import time
>>
>
deftimer
(func)
:def
(*args,
**kwds)
: t0 = time.time(
) func(
*args,
**kwds)
t1 = time.time(
)print
('耗時%0.3f'
%(t1-t0,))
>>
> @timer
defdo_something
(delay)
:print
('函式do_something開始'
) time.sleep(delay)
print
('函式do_something結束'
)>>
> do_something(3)
函式do_something開始
函式do_something結束
耗時3.077
所謂斷言,就是宣告表示式的布林值必須為真的判定,否則將觸發 assertionerror 異常。嚴格來講,assert是除錯手段,不宜使用在生產環境中,但這不影響我們用斷言來實現一些特定功能,比如,輸入引數的格式、型別驗證等。
>>
>
defi_want_to_sleep
(delay)
:assert
(isinstance
(delay,
(int
,float))
),'函式引數必須為整數或浮點數'
print
('開始睡覺'
) time.sleep(delay)
print
('睡醒了'
)>>
> i_want_to_sleep(
1.1)
開始睡覺
睡> i_want_to_sleep(2)
開始睡覺
睡> i_want_to_sleep(
'2')
traceback (most recent call last)
: file ""
, line 1,in
i_want_to_sleep(
'2')
file ""
, line 2
,in i_want_to_sleep
assert
(isinstance
(delay,
(int
,float))
),'函式引數必須為整數或浮點數'
assertionerror: 函式引數必須為整數或浮點數
提公升Python逼格的10個語法 上
python 是一種代表簡單思想的語言,其語法相對簡單,很容易上手。不過,如果就此小視 python 語法的精妙和深邃,那就大錯特錯了。本文精心篩選了最能展現 python 語法之精妙的十個知識點,並附上詳細的例項 如能在實戰中融會貫通 靈活使用,必將使 更為精煉 高效,同時也會極大提公升 b格,使...
Python提公升「技術逼格」的6個方法
from numpy import random a random.random 10000 lst for i in a lst i i for i in a 使用列表生成式 gen i i for i in a 生成器更節省記憶體da from operator import itemgette...
經驗分享 提公升Python基礎技術逼格的6個方法
在學習過程中有什麼不懂得可以加我的 python學習資源qun,855408893 與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容 from operator import itemgettera a.sort key itemgetter weather da...