python學習筆記(五)

來源:互聯網
上載者:User

標籤:config   inf   __file__   調試   遍曆   prot   語言   evel   oob   

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預設的成員函數和成員變數都是公開的,沒有像其他類似語言的public,private等關鍵字修飾,但是可以在變數前面加上兩個底線“__”,這樣的話,函數或變數就變成私人的,這是python的已有變數軋壓(這個翻譯好拗口,英文名稱是private name mangling)

42、 列表運算式和清單產生器

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

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

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

 

產生器運算式與列表運算式很像: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學習筆記(五)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.