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 ...