python高級編程3

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#

m.update('test')#更新哈希對象以字符串參數

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á)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • --< > 令人討厭的小人物身上有著愚蠢的一致性 --(A Foolish Consistency is the ...
    LittleWizard閱讀 3,263評論 0 4
  • 1.1.1類也是對象 在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段。在Python中這一點仍然成...
    PythonMaO閱讀 678評論 0 1
  • 參考 --Google Python Style Guide --Google Python 風格指南 - 中文版...
    LittleWizard閱讀 2,749評論 0 4
  • 源地址:http://www.runoob.com/w3cnote/google-python-styleguid...
    skaiger閱讀 513評論 0 0
  • 1、python模塊(module) 在計算機實際的開發過程中,隨著代碼量的不斷增加,如果放在一個文件中會變得越來...
    轉身后的那一回眸閱讀 257評論 0 0