1. 程式人生 > >python學習筆記(五)

python學習筆記(五)

推導式 for mod cal pos [] 類名 left 開頭

38、繼承

子類繼承父類時,如果不寫init方法,表示繼承父類的init方法。如果寫了init方法,表示重寫父類的init方法。其他方法也是同理。對於變量也是同樣的道理。

class A:

def __init__(self):

self.a=”a”

self.b=”b”

def print(self):

print(self.a)

class B(A):

def __init__(self):

super(B,self).__init__() //註意繼承書寫的格式,類名寫自己的類,self不能缺少。

self.c=”c”

def print_b(self):

print(self.b)

39、日期運算

import datetime,time

計算兩個日期之間的差值:

date5 = datetime.datetime.strptime(‘2012-9-22 12:35:40‘,‘%Y-%m-%d %H:%M:%S‘)
date6 = datetime.datetime.strptime(‘2015-9-22 10:35:40‘,‘%Y-%m-%d %H:%M:%S‘)

sep = date6 - date5

print(sep)

計算三天之後的日期:

now = datetime.datetime.now()
delta = datetime.timedelta(days=3)
n_days = now + delta


print(n_days.strftime(‘%Y-%m-%d %H:%M:%S‘))

其中strptime的類型是時間類,不是字符串格式。

date1 = time.ctime() #為字符串,不能進行加減運算

date2 = datetime.date.today() #date類,能與timedelta進行運算

date3 = datetime.datetime.now() #datetime類,能與timedelta進行運算

雖然都能與timedelta進行運算,但是不能的類之間不能進行運算,如date2-date3

time.strptime(),datetime.datetime.strptime()

,兩者都是將字符串轉換為時間類,但屬於不同的類。

向一個開始輸入框和結束輸入框裏輸入時間,需要轉換為string類型:

startTime = datetime.date.today()

startTimeStr = startTime.strftime()

endTime = startTime - datetime.tiemdelta(days=3)

endTimeStr = endTime.strftime()

40、日誌模塊

import logging

logging.basicConfig(filename="config.log",filemode="a",
format="%(asctime)s--%(name)s--%(levelname)s:%(message)s",level=logging.INFO)

console = logging.StreamHandler()
logging.getLogger().addHandler(console)

# 上面兩行是將日誌同時輸出到console,方便調試。
logging.error("This is a error log.")
logging.info("This is a info log.")

41、python中的私有變量

(1)_xx,以單下劃線開頭的標識的protected類型的變量。即保護類型只能允許其本身與子類進行訪問。若內部變量標識為,如當使用 from M import * 時,不會將一個下劃線開頭的對象引入。

(2)__xx,雙下劃線的表示的是私有類型的變量。只能允許這個類本身進行訪問,連子類也不可以用於命名一個類屬性(類變量),調用時名字被改變(在類FooBar內部,__boo變成_FooBar__boo,如self._FooBar__boo

(3)__xx__是定義特殊方法。用戶控制的命名空間內的變量或是屬性,如__init__,__import__或是__file__。只有當文檔有說明時使用,不要自己定義這類變量。(就是說這些是python內部定義的變量名)

在這裏強調一下私有變量,python默認的成員函數和成員變量都是公開的,沒有像其他類似語言的publicprivate等關鍵字修飾,但是可以在變量前面加上兩個下劃線“__”,這樣的話,函數或變量就變成私有的,這是python的已有變量軋壓(這個翻譯好拗口,英文名稱是private name mangling

42、列表表達式和列表生成器

列表推導式有包含一個表達式的括號組成,表達式後面跟隨一個for字句,之後可以有零個或多個forif字句,結果是一個列表,由表達式依據其後面的forif字句上下文計算而來的結果構成

a = [(x,y) for x in [1,2,3] for y in [2,3,5] if x!=y]

這樣,a就生成了一個列表,每個元素是由xy構成的元組。

生成器表達式與列表表達式很像:m = ((x,y) for x in [1,2,3] for y in [2,3,5])

引用生成器表達式中的值:

print(m.__next__())

print(m.__next__())

總結:(1)把列表表達式的[]換成()得到的就是生成器表達式;(2)列表解析與生成器表達式都是一種便利的編程方式,只不過生成器表達式更節省內存。

43、列表中元素去重

列表有刪除元素的方法,如list.pop(i)list.remove(value)del list[i]。有一點需要註意,每刪除一個元素,後面的元素會自動前移一位,導致用for遍歷的時候,每刪除一個,後面的一個元素下標自動減1,使這個元素沒被遍歷到,從而出現遺漏。

要想刪除列表中所有的重復元素,就不能簡單的用for,而是用遞歸。如下:

list1 = [1,2,3,3,3,2,2,5,6,5,6]
def delDupli(list1):
for i in list1:
if list1.count(i) != 1:
list1.remove(i)
delDupli(list1)
delDupli(list1)
print(list1)

python學習筆記(五)