9內置函數

內置函數

 

標準庫,namespace名稱空間;

 

datetime,對日期、時間、時間戳的處理:

datetime類:類方法;datetime對象;

 

類方法:

today(),返回本地時區當前時間的datetime對象;

now(tz=None),返回當前時間的datetime對象,時間到微秒,如果tzNone,返回和today()一樣;

utcnow(),沒有時區的當前時間;

fromtimestamp(timestamp,tz=None),從一個時間戳返回一個datetime對象;

 

datetime對象:

timestamp(),返回一個到微秒的時間戳;

構造方法:

In [14]: a=datetime.datetime(2018,3,26,19,12,29,79043)   #year,month,day,hour,minute,second,microsecond,取datetime對象的年月日時分秒微秒

In [15]: a

Out[15]: datetime.datetime(2018, 3, 26, 19, 12, 29, 79043)

In [16]: a=datetime.datetime(2018,3,26)   #至少要給year,month,dayhour,minute會補0

In [17]: a

Out[17]: datetime.datetime(2018, 3, 26, 0, 0)

weekday(),返回星期的天,週一0,週日6,如a.weekday()

isoweekday(),返回星期的天,週一1,週日7,如a.isoweekday()

date(),返回日期date對象,a,date()

time(),返回時間time對象,a.time()

replace(),修改並返回新的時間;

isocalendar(),返回一個三元組(年、週數、周的天),a.isocalendar()

 

注:

編程時一般都不設置時區;

時間戳,格林威治時間1970-1-10點到現在的秒數,與時區無關;

 

例:

In [1]: import datetime

In [2]: datetime.datetime.now()

Out[2]: datetime.datetime(2018, 3, 26, 19, 3, 12, 8146)

In [3]: datetime.datetime.today()

Out[3]: datetime.datetime(2018, 3, 26, 19, 3, 23, 298291)

In [4]: datetime.datetime.utcnow()

Out[4]: datetime.datetime(2018, 3, 26, 11, 3, 42, 720141)

In [5]: a=datetime.datetime.now()

In [6]: a.timestamp()

Out[6]: 1522062256.146931

In [7]: type(a)

Out[7]: datetime.datetime

In [8]: a=a.timestamp()

In [9]: type(a)

Out[9]: float

In [10]: b=datetime.datetime.fromtimestamp(a)

In [11]: b

Out[11]: datetime.datetime(2018, 3, 26, 19, 4, 16, 146931)

In [12]: b=datetime.datetime.fromtimestamp(int(a))   #微秒丟了

In [13]: b

Out[13]: datetime.datetime(2018, 3, 26, 19, 4, 16)

In [14]: a=datetime.datetime(2018,3,26,19,12,29,79043)

In [15]: a

Out[15]: datetime.datetime(2018, 3, 26, 19, 12, 29, 79043)

In [16]: a=datetime.datetime(2018,3,26)

In [17]: a

Out[17]: datetime.datetime(2018, 3, 26, 0, 0)

In [18]: a.weekday()

Out[18]: 0

In [19]: a.isoweekday()

Out[19]: 1

In [20]: a.date()

Out[20]: datetime.date(2018, 3, 26)

In [21]: a.time()

Out[21]: datetime.time(0, 0)

In [22]: a.isocalendar()

Out[22]: (2018, 13, 1)

 

日期格式化:

類方法,datetime.datetime.strptime(date_string,format),返回datetime對象,new datetime parsed from a string

對象方法,a.strftime(format),返回字符串,string format

字符串format函數格式化;

 

例:

In [37]: dt=datetime.datetime.strptime('27/3/18 9:30','%d/%m/%y %H:%M')   #類方法,返回datetime對象,%y(小寫短的),%Y(大寫長的)

In [38]: dt

Out[38]: datetime.datetime(2018, 3, 27, 9, 30)

In [39]: dt.strftime('%Y-%m-%d %H:%M:%S')   #對象方法

Out[39]: '2018-03-27 09:30:00'

In [40]: '{0:%Y}/{0:%m}/{0:%d} {0:%H}:{0:%M}:{0:%S}'.format(dt)   #要加0,否則位置對不上

Out[40]: '2018/03/27 09:30:00'

In [41]: '{}/{}/{}'.format(dt.year,dt.month,dt.day)   #常用

Out[41]: '2018/3/27'

 

timedelta對象,時間差對象:

構造方法:datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

year=datetime.timedelta(days=365)

total_seconds(),返回時間差的總秒數;

 

例:

In [44]: d=datetime.timedelta(days=1)   #構造時間差爲1

In [45]: d

Out[45]: datetime.timedelta(1)

In [46]: h=datetime.timedelta(hours=24)   #構造時間差爲1

In [47]: h

Out[47]: datetime.timedelta(1)

In [48]: datetime.datetime.now()-d

Out[48]: datetime.datetime(2018, 3, 26, 10, 4, 0, 842544)

In [49]: d1=datetime.datetime.now()

In [50]: d2=datetime.datetime.now()

In [51]: td=d2-d1

In [52]: td.total_seconds()

Out[52]: 8.391767

In [53]: (datetime.datetime.now()-d1).total_seconds()

Out[53]: 72.024944

 

 

 

標準庫,time

 

 

 

id(),標識,返回對象的唯一標識,cpython返回內存地址;

hash(),哈希,返回一個對象的哈希值,散列值(定義域、值域、哈希空間、散列空間、根據哈希算法,哈希衝突少的算法好);

type(),類型,返回對象的類型;

float(),int(),bin(),hex(),oct(),bool(),list(),tuple(),dict(),set(),complex(),bytes(),bytearray(),類型轉換;

input([prompt]),輸入,接收用戶輸入,返回一個字符串;

print(*objects,sep=' ',end='\n',file=sys.stdout,flush=False),打印,打印輸出,默認使用空格分割,換行結尾,輸出到控制檯;

len(),對象長度,返回一個集合類型的元素個數;

isinstance(obj,class_or_tuple),判斷對象是否屬於某種類型或元組中列出某個類型;

issubclass(cls,class_or_tuple),判斷類型cls是否是某種類型的子類或元組中列出的某個類型的子類;

In [4]: issubclass(bool,int)

Out[4]: True

abs(num),絕對值,num爲數值;

max(),min(),返回可迭代對象中最大值和最小值,返回多個參數中最大值和最小值;

round(num),四捨六入五取偶,銀行家算法;

pow(x,y),等價於x**y

range(stop),從0開始到stop-1的可迭代對象,不是迭代器;

range(start,stop[,step]),從start開始到stop-1結束步長爲step的可迭代對象;

divmod(x,y),等價於tuple(x//y,x%y)divmod(3,5)

sum(iterable[,start]),對可迭代對象的所有數值元素求和,sum(range(1,100,2),累加;

chr(i),給一個一定範圍的整數返回對應的字符,Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.

ord(c),返回字符對應的整數,Return the Unicode code point for a one-character string.

str(),呈現字符串的表達形式,__str__()魔術方法;

repr(),ascii()

 

例:

In [1]: isinstance(False,(bool,int,str))

Out[1]: True

In [2]: isinstance(False,int)

Out[2]: True

In [3]: isinstance(True,int)

Out[3]: True

In [5]: round(-0.5)

Out[5]: 0

In [6]: round(-0.6)

Out[6]: -1

In [7]: round(-0.4)

Out[7]: 0

In [8]: divmod(3,5)

Out[8]: (0, 3)

In [9]: sum(range(1,100,2))

Out[9]: 2500

In [10]: sum(range(1,100,2),50)   #起始數先加進來

Out[10]: 2550

In [14]: chr(97)

Out[14]: 'a'

In [15]: chr(20013)

Out[15]: ''

In [16]: ord('a')

Out[16]: 97

In [17]: ord('')

Out[17]: 20013

In [18]: ord('')

Out[18]: 22269

In [19]: hex(ord(''))

Out[19]: '0x56fd'

In [20]: str(5)

Out[20]: '5'

In [21]: repr(5)

Out[21]: '5'

In [22]: ascii(5)

Out[22]: '5'

In [23]: ascii('a')

Out[23]: "'a'"

In [24]: str('a')

Out[24]: 'a'

In [25]: repr('a')

Out[25]: "'a'"

 

sorted(iterable[,key][,reverse])-->list,排序,返回一個新列表,默認升序,reverse反轉;如果lst.sort()在列表上用sort()方法是就地修改,返回值爲Nonea=lst.sort()相當於a=None這樣寫沒意義;

reversed(seq)-->list_reverseiterator返回一個翻轉元素的迭代器

enumerate(seq,start=0)-->iterator for index,iterator for value,迭代一個序列,返回索引數字和元素構成的二元組start索引開始的數字,默認0

iter(iterable),將一個可迭代對象封裝成一個迭代器;

next(iterator),取元素,對一個迭代器取下一個元素,如果元素全部取完,再next()會拋StopIteration異常;

zip(*iterables),拉鍊函數,像拉鍊一樣,把多個可迭代對象合併在一起,返回一個迭代器,將每次從不同對象中取到的元素合併成元組,一般用於dictdict(zip('abcde',range(5)))木桶原理;

 

可迭代對象:

能夠通過迭代一次次返回不同元素的對象,所謂相同不是指值是否相同,而是元素在容器中是否是同一個,如list中值可重複;

可以迭代,但是未必有序,未必可索引;

可迭代對象有,list,tuple,string,bytes,bytearray,range,set,dict,iterator等;

可用成員運算符in,not inin本質上就是在遍歷對象;

 

迭代器:

特殊的對象,一定是可迭代對象,具備可迭代對象的特徵;

通過iter(iterable)把一個可迭代對象封裝成迭代器;

通過next()迭代迭代器對象;

生成器對象,就是迭代器對象;

迭代器不一定是生成器;

 

例:

In [30]: lst=[3,1,5]

In [31]: sorted(lst)

Out[31]: [1, 3, 5]

In [32]: sorted(lst,reverse=True)

Out[32]: [5, 3, 1]

In [33]: a=sorted(lst,reverse=True)

In [34]: a

Out[34]: [5, 3, 1]

In [36]: sorted({'b':2,'a':1})   #只對dictkey排序

Out[36]: ['a', 'b']

In [37]: a=reversed([3,5,1])

In [38]: a

Out[38]: <list_reverseiterator at 0x7fa0dd064c50>

In [39]: next(a)

Out[39]: 1

In [40]: next(a)

Out[40]: 5

In [41]: next(a)

Out[41]: 3

In [42]: [reversed([3,5,1])]   #不是列表解析,是list_reverseiterator

Out[42]: [<list_reverseiterator at 0x7fa0dd061518>]

In [43]: [i for i in reversed([3,5,1])]   #列表解析

Out[43]: [1, 5, 3]

In [44]: {reversed((2,4))}   #該集合元素幾個?1個,僅list_reverseiterator對象本身

Out[44]: {<reversed at 0x7fa0dd064668>}

In [45]: (reversed(['c','b','a']))   #最外層()沒用,reversed(seq)本身返回的就是迭代器對象

Out[45]: <list_reverseiterator at 0x7fa0dcfe9eb8>

In [49]: for i in reversed(sorted({1,5,9})):   #反轉中間結果

    ...:     print(i)

    ...:    

9

5

1

In [50]: for i in enumerate([2,4,6]):

    ...:     print(i)

    ...:    

(0, 2)

(1, 4)

(2, 6)

In [52]: for k,v in enumerate('mno'):   #解構

    ...:     print(k,v)

    ...:    

    ...:    

0 m

1 n

2 o

In [61]: it=iter(range(2))

In [62]: next(it)

Out[62]: 0

In [63]: next(it)

Out[63]: 1

In [64]: next(it)

---------------------------------------------------------------------------

StopIteration                             Traceback (most recent call last)

<ipython-input-64-bc1ab118995a> in <module>()

----> 1 next(it)

StopIteration:

In [65]: 3 in range(10)

Out[65]: True

In [66]: 3 in (x for x in range(10))

Out[66]: True

In [67]: 3 in {x:y for x,y in zip(range(4),range(4,10))}   #匹配key

Out[67]: True

In [71]: {x:y for x,y in zip('abcd',range(4))}

Out[71]: {'a': 0, 'b': 1, 'c': 2, 'd': 3}

In [72]: {x:y for x,y in zip('abcd',range(5,20))}   #zip(),木桶原理

Out[72]: {'a': 5, 'b': 6, 'c': 7, 'd': 8}

In [73]: for i in iter(range(3)):   #可這樣用

    ...:     print(i)

    ...:    

0

1

2

In [74]: g=(i for i in range(4))

In [75]: g

Out[75]: <generator object <genexpr> at 0x7fa0dda6dfc0>

In [76]: print(type(g))

<class 'generator'>

In [77]: list(zip('abcd',range(4)))

Out[77]: [('a', 0), ('b', 1), ('c', 2), ('d', 3)]

In [78]: list(zip('abcd',range(4),'efgh',range(5,9)))

Out[78]: [('a', 0, 'e', 5), ('b', 1, 'f', 6), ('c', 2, 'g', 7), ('d', 3, 'h', 8)]

In [79]: dict(zip('abcde',range(5)))

Out[79]: {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

In [86]: {str(x):y for x,_,y in zip(range(10),range(10),range(10,20))}

Out[86]:

{'0': 10,

 '1': 11,

 '2': 12,

 '3': 13,

 '4': 14,

 '5': 15,

 '6': 16,

 '7': 17,

 '8': 18,

 '9': 19}

In [87]: d=dict(zip('abcd',range(4)))

In [88]: d

Out[88]: {'a': 0, 'b': 1, 'c': 2, 'd': 3}

In [89]: d1=sorted(d.items(),reverse=True)   #對二元組排序

In [90]: d1

Out[90]: [('d', 3), ('c', 2), ('b', 1), ('a', 0)]

 

 

 

注:

內置函數:mapfilterreversedenumerate

decorator

generator

mro中的mixin

以上用的出神入化,中級水平;

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章