python高階 解析式 生成器

2021-08-09 01:43:59 字數 4786 閱讀 4602

datetime

datetime.datetime.today()    -> 返回本地時區當前時間的datetime物件

datetime.datetime.now(tz=none)

-> 返回當前時間的datetime物件,微秒; 如果tz為none返回和today()一樣

datetime.datetime.utcnow() -> 沒有時區的當前時間

datetime.datetime.fromtimestamp(timestamp, tz=none)

-> 從乙個時間戳返回乙個datetime物件

datetime物件

datetime.datetime.now().timestamp()

時間戳:格式威治時間19700101 00:00到現在的秒數

c = datetime.datetime.now() -> datetime物件

c.timestamp()

timedelta物件

datetime2 = datetime1 + timedelta

datetime2 = datetime1 - timedelta

timedelta = datetime1 - datetime2

構造方法

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,minutes=0, hours=0, weeks=0)

year = datetime.timedelta(days=365)

timedelta.total_seconds() -> 返回時間差的總秒數

日期格式化

類方法

strptime(date_string, format)   -> datetime object
物件方法

strftime(format)   -> str object
字串format方法

import datetime

dt = datetime.datetime.strptime("21/11/06 14:30", "%d/%m/%y %h:%m")

print(dt.strftime("%y-%m-%d %h:%m:%s"))

print('-- ::'.format(dt))

print('time is {}'.format(dt))

time

time.sleep(secs)    # 將程序掛起指定的秒數
bookmark: 第二個需要掌握的python特性

bookmark: just do it

bookmark: 解析式、生成器

列表解析式是一種語法糖,編譯器會優化,不會因為簡寫而影響效率,反而因優化提高了效率。

[返回值 for 元素 in 可迭代物件 if 條件] -> list

[(i+1)**2 for i in range(10)]

even = # even = [x for x in range(10) if x%2==0]

for x in range(10):

if x % 2 == 0:

[expr for item in iterable if cond1 if cond2]

ret =

for item in iterable:

if cond1:

if cond2:

[i for i in range(20) if i % 2 == 0 and i%3==0]

[expr for i in iterable for j in iterable2]

ret =

for i in iterable1:

for j in iterable2:

[(x, y) for x in 'abcde' for y in range(3)]

[[x, y] for x in 'abcde' for y in range(3)]

[ for x in 'abcde' for y in range(3)]

(返回值 for 元素 in 可迭代物件 if 條件) -> generator

生成器表示式是按需計算(惰性求值、延遲計算), 需要的時候才計算值

列表解析式是立即求值

生成器 可迭代物件

迭代器g = (''.format(i) for i in range(1, 11))

next(g) # next函式獲取生成器下乙個數

for x in g:

print(x)

print('~'*20)

for x in g:

print(x)

g = [''.format(i) for i in range(1, 11)]

for x in g:

print(x)

print('~'*20)

for x in g:

print(x)

it = (print('{}'.format(i+1)) for i in range(2)) # print語句返回none

first = next(it) # 返回了none

second = next(it)

val = first + second

# typeerror: unsupported operand type(s) for +: 'nonetype' and 'nonetype'

it = (x for x in range(10) if x % 2)

first = next(it)

second = next(it)

val = first + second

next(it)

計算方式

生成器表示式延遲計算,列表解析式立即計算
記憶體占用

從返回值來說,生成器省記憶體,列表解析式返回新的列表

生成器沒有資料,記憶體占用極少,但是使用的時候,雖然乙個個返回資料,但是合起來占用的記憶體也差不多

列表解析式構造新的列表需要占用記憶體

計算速度

單看計算時間,生成器表示式耗時非常短,列表解析式耗時長

但是生成器本身並沒有返回任何值,只返回了乙個生成器物件

列表解析式構造並返回了乙個新的列表

in [14]: %timeit [x for x in range(50000)]

2.03 ms ± 37.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

in [15]: %timeit (x for x in range(50000))

712 ns ± 13.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

-> set()

# typeerror: unhashable type: 'list' 列表不可hash, 不可以做key

-> dict

注意:使用key:value

# typeerror: unhashable type: 'list'

ret = {}

for x in range(3):

for y in range(4):

ret[str(x)] =y

python2 引入列表解析式

python2.4 引入生成器表示式

pytohn3 引入集合、字典解析式,並遷移到2.7

生成器和迭代器是不同的物件,但是都是可迭代的物件

列表解析式       [返回值 for 元素 in 可迭代物件 if 條件] -> list         python2+

生成器表示式 (返回值 for 元素 in 可迭代物件 if 條件) -> generator python2.4+

集合解析式 -> set() python2.7+

字典解析式 -> dict python2.7+

isinstance(obj, class_or_tuple)         isinstance(true, int)

issubclass(cls, class_or_tuple) issubclass(bool, int)

abs(x)

max()

min()

round(x) 四捨六入五取最近的偶數

divmod(x, y) 等價 tuple(x//y, x%y)

sum(iterable[, start]) 返回start起始的iterable物件的和

chr(97) -> 'a' 返回指定數的對應的字元

ord('c') -> 99 返回對應字元的整數 ordinal 序數

str()

repr()

ascii()

random.sample(population, k) 從樣本空間或者總體(序列或者集合型別)中隨機取出k個不同的元素,返回乙個新的列表

Python 解析式 生成器

datetime模組 datetime物件 datetime物件 日期格式化 import datetime dt datetime.datetime.strptime 21 11 06 16 30 d m y h m print dt.strftime y m d h m s print form...

Python學習 解析式 生成器

datetime模組,對日期 時間 時間戳的處理 datetime類 類方法 today 返回本地時區當前時間的datetime物件 now tz none 返回當前時間的datetime物件,時間到微秒,如果tz為none,返回 和today 一樣 utcnow 沒有時區的當前時間 fromtim...

python 函式高階 列表生成式,生成器,

列表生成式 需求 迴圈0 10,把其中每個值加一並列印 文藝青年版 n list range 10 for index,i in enumerate n n i 1 print n 1,2,3,4,5,6,7,8,9,10 執行結果 裝逼青年版 n list range 10 print list ...