1.模塊進階
Python有一套很有用的標準庫(standard library)。標準庫會隨著Python解釋器,一起安裝在你的電腦中的。 它是Python的一個組成部分。這些標準庫是Python為你準備好的利器,可以讓編程事半功倍。
1.1 time
1、help(time)之后可以知道time有2種時間表示形式:
1、時間戳表示法,即以整型或浮點型表示的是一個以秒為單位的時間間隔。這個時間的基礎值是從1970年的1月1號零點開始算起。
2、元組格式表示法,即一種Python的數據結構表示。這個元組有9個整型內容。分別表示不同的時間含義。
1.2 名詞解釋
UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標準時間。在中國為UTC+8。
DST(Daylight Saving Time)即夏令時。是一種為節約能源而人為規定地方時間的制度,一般在天亮早的夏季人為將時間提前一小時。
1.3 包含的變量
timezone --當地時間與標準UTC時間的誤差,以秒計
altzone --當地夏令時時間與標準UTC時間的誤差,以秒計
daylight --當地時間是否反映夏令時,默認為0
zname --關于(標準時區名稱,夏令時時區名稱)的元組
1.4 包含的函數
time() --返回當前時間戳,浮點數形式。不接受參數
clock() --返回當前程序的cpu執行時間。unix系統始終返回全部運行時間;而windows從第二次開始都是以第一次調用此函數時的時間戳作為基準,而不是程序開始時間為基準。不接受參數。
sleep() --延遲一個時間段,接受整型、浮點型。
gmtime() --將時間戳轉換為UTC時間元組格式。接受一個浮點型時間戳參數,其默認值為當前時間戳。
localtime() --將時間戳轉換為本地時間元組格式。接受一個浮點型時間戳參數,其默認值為當前時間戳。
asctime() --將時間元組格式轉換為字符串形式。接受一個時間元組,其默認值為localtime()返回值
ctime() --將時間戳轉換為字符串。接受一個時間戳,其默認值為當前時間戳。等價于asctime(localtime(seconds))
mktime() --將本地時間元組轉換為時間戳。接受一個時間元組,必選。
strftime() --將時間元組以指定的格式轉換為字符串形式。接受字符串格式化串、時間元組。時間元組為可選,默認為localtime()
strptime() --將指定格式的時間字符串解析為時間元組,strftime()的逆向過程。接受字符串,時間格式2個參數,都是必選。
tzset() --改變本地時區。
1.5 時間字符串支持的格式
格式含義備注
%a本地(locale)簡化星期名稱
%A本地完整星期名稱
%b本地簡化月份名稱
%B本地完整月份名稱
%c本地相應的日期和時間表示
%d一個月中的第幾天(01 - 31)
%H一天中的第幾個小時(24小時制,00 - 23)
%I第幾個小時(12小時制,01 - 12)
%j一年中的第幾天(001 - 366)
%m月份(01 - 12)
%M分鐘數(00 - 59)
%p本地am或者pm的相應符
%S秒(01 - 61)
%U一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。
%w一個星期中的第幾天(0 - 6,0是星期天)
%W和%U基本相同,不同的是%W以星期一為一個星期的開始。
%x本地相應日期
%X本地相應時間
%y去掉世紀的年份(00 - 99)
%Y完整的年份
%Z時區的名字(如果不存在為空字符)
%%‘%’字符
1.6 hashlib
importhashlib
m = hashlib.md5()#創建hash對象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一個128位的密文
printm#
printm.hexdigest()#返回十六進制數字字符串
應用實例
用于注冊、登錄....
importhashlib
importdatetime
KEY_VALUE ='test'
now = datetime.datetime.now()
m = hashlib.md5()
str ='%s%s'% (KEY_VALUE,now.strftime("%Y%m%d"))
m.update(str.encode('utf-8'))
value = m.hexdigest()
print(value)
運行結果:
8ad2d682e3529dac50e586fee8dc05c0
更多標準庫
http://python.usyiyi.cn/translate/python_352/library/index.html
2 常用擴展庫
3 編碼風格
錯誤認知
·這很浪費時間
·我是個藝術家
·所有人都能穿的鞋不會合任何人的腳
·我善長制定編碼規范
正確認知
·促進團隊合作
·減少bug處理
·提高可讀性,降低維護成本
·有助于代碼審查
·養成習慣,有助于程序員自身的成長
pep8編碼規范
Python Enhancement Proposals:python改進方案
https://www.python.org/dev/peps/
3.1 每級縮進用四個空格
括號中使用垂直隱式縮進或使用懸掛縮進。后者應該注意第一行要沒有參數,后續行要有縮進。
·Yes
#對準左括號
foo = long_function_name(var_one, var_two,
var_three, var_four)
#不對準左括號,但加多一層縮進,以和后面內容區別。
deflong_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
#懸掛縮進必須加多一層縮進.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
·No
#不使用垂直對齊時,第一行不能有參數。
foo = long_function_name(var_one, var_two,
var_three, var_four)
#參數的縮進和后續內容縮進不能區別。
deflong_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
4個空格的規則是對續行可選的。
#懸掛縮進不一定是4個空格
foo = long_function_name(
var_one, var_two,
var_three, var_four)
if語句跨行時,兩個字符關鍵字(比如if)加上一個空格,再加上左括號構成了很好的縮進。后續行暫時沒有規定,至少有如下三種格式,建議使用第3種。
#沒有額外縮進,不是很好看,個人不推薦.
if(this_is_one_thingand
that_is_another_thing):
do_something()
#添加注釋
if(this_is_one_thingand
that_is_another_thing):
# Since both conditions are true, we can frobnicate.
do_something()
#額外添加縮進,推薦。
# Add some extra indentation on the conditional continuation line.
if(this_is_one_thing
andthat_is_another_thing):
do_something()
3.2 右邊括號也可以另起一行,有兩種格式,建議第二種
右括號不回退,個人不推薦
my_list = [
1,2,3,
4,5,6,
]
result = some_function_that_takes_arguments(
'a','b','c',
'd','e','f',
)
#右括號回退
my_list = [
1,2,3,
4,5,6,
]
result = some_function_that_takes_arguments(
'a','b','c',
'd','e','f',
)
3.3 空格或tab
·空格是首選的縮進方法。
·Tab僅僅在已經使用tab縮進的代碼中為了保持一致性而使用。
·Python 3中不允許混合使用Tab和空格縮進。
·Python 2的包含空格與Tab和空格縮進的應該全部轉為空格縮進。
3.4 最大行寬
·限制所有行的最大行寬為79字符。
文本長塊,比如文檔字符串或注釋,行長度應限制為72個字符
3.5空行
·兩行空行分割頂層函數和類的定義。
·類的方法定義用單個空行分割。
·額外的空行可以必要的時候用于分割不同的函數組,但是要盡量節約使用。
額外的空行可以必要的時候在函數中用于分割不同的邏輯塊,但是要盡量節約使用
3.6源文件編碼
·在核心Python發布的代碼應該總是使用UTF-8(ASCII在Python 2)。
Python 3(默認UTF-8)不應有編碼聲明
3.7導入在單獨行
·Yes:
·importos
·importsys
·fromsubprocessimportPopen, PIPE
·No:
·importsys, os
·導入始終在文件的頂部,在模塊注釋和文檔字符串之后,在模塊全局變量和常量之前。
導入順序如下:標準庫進口,相關的第三方庫,本地庫。各組的導入之間要有空行。
3.8 禁止使用通配符導入
通配符導入(fromimport *)應該避免,因為它不清楚命名空間有哪些名稱存,混淆讀者和許多自動化的工具。
3.9字符串引用
·Python中單引號字符串和雙引號字符串都是相同的。注意盡量避免在字符串中的反斜杠以提高可讀性。
·根據PEP 257,三個引號都使用雙引號。
3.10括號里邊避免空格
括號里邊避免空格
# Yes
spam(ham[1], {eggs:2})
# No
spam( ham[1], { eggs:2} )
3.11逗號,冒號,分號之前避免空格
逗號,冒號,分號之前避免空格
# Yes
ifx ==4:printx, y; x, y = y, x
# No
ifx ==4:printx , y ; x , y = y , x
3.12索引操作中的冒號
當作操作符處理前后要有同樣的空格(一個空格或者沒有空格,個人建議是沒有。
# Yes
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
# No
ham[lower + offset:upper + offset]
ham[1:9], ham[1:9], ham[1:9:3]
ham[lower : : upper]
ham[ : upper]
3.13函數調用的左括號前不能有空格
Yes
spam(1)
dct['key'] = lst[index]
# No
spam (1)
dct ['key'] = lst [index]
3.14賦值等操作符前后
賦值等操作符前后不能因為對齊而添加多個空格
# Yes
x =1
y =2
long_variable =3
# No
x ????????????=1
y ????????????=2
long_variable =3
3.15二元運算符兩邊放置一個空格
涉及=、符合操作符( += , -=等)、比較( == , < , > , != , <> , <= , >= , in , not in , is , is not )、布爾( and , or , not )。
優先級高的運算符或操作符的前后不建議有空格。
# Yes
i = i +1
submitted +=1
x = x*2-1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
# No
i=i+1
submitted +=1
x = x *2-1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
3.16關鍵字參數和默認值參數前后不加空格
# Yes
defcomplex(real, imag=0.0):
returnmagic(r=real, i=imag)
# No
defcomplex(real, imag =0.0):
returnmagic(r = real, i = imag)
3.17通常不推薦復合語句
Compound statements:多條語句寫在同一行
# Yes
iffoo =='blah':
do_blah_thing()
do_one()
do_two()
do_three()
# No
iffoo =='blah': do_blah_thing()
do_one(); do_two(); do_three()
盡管有時可以在if/for/while的同一行跟一小段代碼,但絕不要跟多個子句,并盡量避免換行。
# No
iffoo =='blah': do_blah_thing()
forxinlst: total += x
whilet <10: t = delay()
更不是:
# No
iffoo =='blah': do_blah_thing()
else: do_non_blah_thing()
try: something()
finally: cleanup()
do_one(); do_two(); do_three(long, argument,
list, like, this)
iffoo =='blah': one(); two(); three()
3.18避免采用的名字
決不要用字符'l'(小寫字母el),'O'(大寫字母oh),或'I'(大寫字母eye)作為單個字符的變量名。一些字體中,這些字符不能與數字1和0區別。用'L'代替'l'時。
3.19包和模塊名
模塊名要簡短,全部用小寫字母,可使用下劃線以提高可讀性。包名和模塊名類似,但不推薦使用下劃線。
m???l????Aá)