盒子
盒子
文章目录
  1. 字符串
  2. 时间
    1. 格式转换
    2. 程序运行时间
    3. 时差
    4. 计时
  3. 数组
  4. 字典
  5. 常用函数
  6. 转码

基础

  • pycharm
    • 见PHP -> PHPStorm
  • 快捷键
    • 关闭 close: Ctrl+F4, 补充Ctrl+W
    • 运行 run: Ctrl+Shift+F10 + Shift+F10
    • Editor->Inspections->Python
      • 取消选中Method may be static, 静态函数
      • 取消选中Shadowing names from outer scopes, 重复定义(外定义)
      • 取消选中Too broad exception clauses, 模糊的exception
  • 新建文件
    • File and Code Templates->Python Script->清空
# -*- coding: gbk -*-
import os,sys,traceback
"""
"""
version = ""


def test():
pass


if __name__ == "__main__":
test()

字符串

时间

import time, datetime
# 当前时间
time.time() # 1574157735.59
time.localtime() # time:struct_time(tm_year=2019, ..., tm_hour=18, ...)
datetime.datetime.now() # datetime.datetime(2019, 11, 19, 18, 3, 6, 764000)
# 指定时间
d1 = datetime.datetime(1970,1,1,0,0,0) # 默认本地时间
d2 = datetime.datetime(2016,3,18,0,0,0,pytz.utc) # 指明是格林时间
# 延迟
time.sleep(1) # 休眠1秒
time.sleep(0.1) # 休眠0.1秒

格式转换

# datetime -> str
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
# str -> datetime
datetime.datetime.strptime("2016-05-05 05:05:05", "%Y-%m-%d %H:%M:%S")

# time -> struct_time
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(time.time()))
# struct_time -> time
time.mktime(t)
# str -> struct_time
time.strptime("time:2009-08-08", "time:%Y-%m-%d")
time.strptime("2016-05-05 05:05:05", "%Y-%m-%d %H:%M:%S")

# datetime -> struct_time
print time.strftime('%Y-%m-%d %H:%M:%S', datetime.datetime.utcnow().timetuple()) # utc才是时间戳
print time.strftime('%Y-%m-%d %H:%M:%S', datetime.datetime.now().utctimetuple())

# time -> datetime
datetime.datetime.fromtimestamp(time.time())
datetime.datetime.utcfromtimestamp(time.time())
# datetime -> struct_time -> time
time.mktime(datetime.datetime.now().timetuple())
time.mktime(datetime.datetime.now().utctimetuple()) # 指明格林时间

# gmtime 只支持UTC时间, struct_time中指定tm_isdst=0
# mktime 忽略tm_isdst参数, 只支持本地时间, 使用(- time.altzone)调整为UTC时间戳

程序运行时间

import time
def timer(func, *pargs):
start = time.clock()
ret = func(*pargs)
elapsed = time.clock() - start
return (elapsed, ret)

时差

# datetime.timedelta: 内部存储days,seconds,microseconds, 可直接访问变量
import datetime
ti1 = datetime.datetime.now()
ti2 = datetime.datetime.now()
# 当日0点
now = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
# 时差
t=ti2-ti1 # datetime.timedelta(0, 0, 1000)
t.total_seconds() # ==> (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
str(t) # 返回字符串,格式为: [D day[s], ][H]H:MM:SS[.UUUUUU]
repr(t) # 返回字符串,格式为: datetime.timedelta(D[, S[, U]])

now = datetime.now()
now + datetime.timedelta(seconds=11)
yestoday = now - datetime.timedelta(days=1)
tommorow = now + datetime.timedelta(days=1)
next_year = now + timedelta(days = 365)

# datetime.date也可以使用timedelta时间差
t = datetime.date.today() - datetime.timedelta(days=30)
print t.strftime('%Y-%m-%d')

计时

import datetime, time

class TimeSheet:
# time_sheet = dict()
def __init__(self, time_sheet, flag, reset=False):
if reset or (flag not in time_sheet):
time_sheet[flag] = datetime.timedelta()
self.time_sheet = time_sheet
self.flag = flag
self.t = datetime.datetime.now()

def __enter__(self):
# 创建时开始计时
self.t = datetime.datetime.now()

def __exit__(self, _, __, ___):
# 释放时,计算时差
self.time_sheet[self.flag] += datetime.datetime.now() - self.t

def get_time_sheet(time_sheet):
re = []
for flag in time_sheet:
re.append('%s: %s' % (flag, time_sheet[flag]))
return ','.join(re)

time_sheet = {}
with TimeSheet(time_sheet, "test", True) as t:
time.sleep(1)
print get_time_sheet(time_sheet)

数组

# 随机序列
d = [random.randint(0,20) for _ in range(20)]

# 列表推导式
[i for i in d if i >= 0]
# 过滤:只保留lambda式返回True的项
filter(lambda x: x>= 0, d)
# 排序
sorted(d)
sorted(d, reverse=True) # 反序
# 数组中指定元素出现的次数
from collections import Counter
Counter(['a', 'b', 'a'])
# 交集
set('abcde').intersection(set('cdefg'))
# 并集
set('abcde').union(set('cdefg'))
# 差集
set('abcde').difference(set('cdefg'))

from functools import reduce
# 累积
reduce(lambda x, y: x+y, [1,2,3,4,5])

字典

# 基础数据
d = {'c':2, 'b':1 , 'a':3}
d.keys()
d.values()
d.items() # [('a', 2), ('b', 1)]

# 遍历,过滤
{k: v for k, v in d.items() if v > 1}

# key 排序
{k:d[k] for k in sorted(d.keys())}
# value 自定义排序: 注意 d.items() 返回的是数组,其实用的是数组排序
# 返回值也是 [(k,v),(k,v)] 模式, 转化成 dict 即可
dict(sorted(d.items(), key=lambda x: x[1]))

# 数组 -> 元组列表 -> 字典
dict(zip(['a','b','c'], [1,2,3]))
# 默认值
from collections import defaultdict
d = defaultdict(int) # 默认0
for k in range(10):
d[k] += 1

# 参数可以是任意对象创建工厂
defaultdict(list)
# 也可以是 无参数函数对象,设定值时函数被调用,并使用函数返回值作为默认值
defaultdict(lambda: 10)

# 有序字典: python3.6 以后字典默认就是有序的
from collections import OrderedDict
print list(OrderedDict.fromkeys([10, 2, 3, 21, 10, 3]).keys()) # [10, 2, 3, 21]

常用函数

  • 随机数
# 随机小数: (0-1)
random.random()
# 随机小数: (1-9)
random.uniform(1,9)
# 随机整数: [1,5]
random.randint(1,5)
# 随机奇数,第三个参数代表递增基数
random.randrange(1,10,2)
# 随机选择
random.choice(['1','a'])
# 随机选择多个
random.sample(['1','a', 1, 2], 2)
# 乱序: 直接改变列表
random.shuffle(a)

# 随机码
''.join([random.choice('0123456789abcdef') for _ in range(64)])

转码

# 快速查看转码结果
print u'\u670d\u52a1\u5f02\u5e38'
支持一下
扫一扫,支持一下
  • 微信扫一扫
  • 支付宝扫一扫