「Python 基础」常用模块
创始人
2024-06-01 18:04:41
0

文章目录

  • 1. 内建模块
    • datetime
    • collections
      • namedtuple()
      • deque
      • defaultdict
      • OrderedDict
      • ChainMap
      • Counter
    • base64
    • struct
    • hashlib
      • 摘要算法
      • 摘要的应用
    • hmac
    • itertools
    • contextlib
      • \_\_enter\_\_ 和 \_\_exit\_\_
      • @contextmanager
      • closing
    • urllib
      • GET
      • POST
      • Handler
    • XML
      • DOM
      • SAX
    • HTMLParser
  • 2. 第三方模块
    • Pillow
    • requests
    • chardet
    • psutil
  • 3. 图形界面模块
    • Tkinter
    • turtle

1. 内建模块

  • 内建模块,无需安装和配置即可使用;

datetime

处理日期和时间的模块;

# 前一个 datetime 是模块,后一个是类
from datetime import datetime

now()

>>> datetime.now()
datetime.datetime(2020, 11, 22, 10, 42, 2, 59763)

datetime()

>>> dt = datetime(2020, 11, 22, 10, 30)
>>> dt
datetime.datetime(2020, 11, 22, 10, 30)

timestamp

1970 年 1 月 1 日 00:00:00 UTC+00:00 时区的时刻为epoch time(新纪元时间),当前时间是相对于epoch time的秒数,称为timestamp

timestamp的值与时区无关;

>>> dt = datetime(2020, 11, 22, 10, 30)
# datetime 转 timestamp
>>> t = dt.timestamp()
# timestamp 转 datetime 本地时间
>>> dt = datetime.fromtimestamp(t)
# timestamp 转 datetime utc 时间
>>> dt_utc = datetime.utcfromtimestamp(t)

strptime()

strdatetime 时间格式;

>>> cday = datetime.strptime('2020-11-22 10:20:20', '%Y-%m-%d %H:%M:%S')

strftime()

datetimestr

>>> datetime.now().strftime('%a,%b %d %H:%M')
'Sun,Nov 22 11:38'

timedelta

>>> from datetime import timedelta
# 减 2天 2 小时
>>> datetime.now() - timedelta(days=2, hours=2)
datetime.datetime(2020, 11, 20, 9, 41, 8, 544137)

timezone

通过 timedelta 创建 timezone

>>> from datetime import timezone
# 创建时区 UTC+8:00
>>> tz_utc_8 = timezone(timedelta(hours=8))
>>> dt = datetime.now()
# 强制设置时区 为 UTC+8
>>> dt = dt.replace(tzinfo=tz_utc_8)
datetime.datetime(2020, 11, 22, 12, 4, 41, 559771, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

时区转换

utcnow() 可以获得当前 UTC 时间,给 UTC 时间设置好时区后,利用 astimezone() 可以转换任意时区的时间;

>>> utc_now = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> utc_8_now = utc_now.astimezone(timezone(timedelta(hours=8)))
>>> utc_9_now = utc_8_now.astimezone(timezone(timedelta(hours=9)))

不是必须从 UTC+0:00 时区转换到其他时区,任何带有时区的时间都可以正确的转换;

collections

内建模块集合;

namedtuple()

namedtuple() 可以用来创建一个 tuple 对象,并规定 tuple 元素的个数,从而使用属性而不是索引的方式应用元素;

>>> rom collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p[0]
1

Point 对象是 tuple 对象的子类;

deque

实现来高效插入和删除(相对 list,list 是线性存储)的双向列表;

>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])

append 和 pop 操作列表的末尾;
appendleft 和 popleft 操作列表的开头;

defaultdict

含默认值的dict,与dict的使用相同;

>>> from collections import defaultdict
# 默认值使用函数设置
>>> dd = defaultdict(lambda :'N/A')
>>> dd['key']
'N/A'

OrderedDict

Key插入的顺序排序的dict

>>> OrderedDict(a=1, b=2, c=3)
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

FIFO

from collections import OrderedDictclass LastUpdatedOrderedDict(OrderedDict):def __init__(self, capacity):super(LastUpdatedOrderedDict, self).__init__()self._capacity = capacitydef __setitem__(self, key, value):containKey = 1 if key in self else 0print(len(self))if len(self) - containKey >= self._capacity:last = self.popitem(last=False)print('remove:', last)if containKey:del self[key]print('set:', (key, value))else:print('add:', (key, value))OrderedDict.__setitem__(self, key, value)

ChainMap

将多个dict对象串起来,在查找的时候,实际按照内部dict顺序一次查找;

from argparse import Namespace
from collections import ChainMap
import os, argparsedefauts = {'user': 'guest', 'color': 'red'}parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v}
# 查找时,现在 command_line_args 中查找,如果没有,再在 os.environ 查找,最后时 defaults
combined_args = ChainMap(command_line_args, os.environ, defauts)print('color=%s' % combined_args['color'])
print('user=%s' % combined_args['user'])

Counter

计数器,实际也是一个dict子类;

from collections import Counter
c = Counter# 手动统计
for ch in 'programing':c[ch]=c[ch]+1# 自动添加
c.update('hello')

base64

Base64是一种任意二进制到文本字符串的编码方法,常用于小段URLCookie,数字签名等;

对二进制数据,每 3 字节一组,按没 6 bit 分为 4 组,从 64 个预设好的字符找到对应编码,不足 3 字节的末尾加一个或两个\x00,再在编码后的末尾加上 1 或 2 个=标记,解码时自动去掉;

>>> import base64
>>> base64.b64encode(b'binary\x00string')
b'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
b'binary\x00string'
# 对比 urlsafe,将 + 和 / 分别变成 - 和 _
>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd++//'
>>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd--__'
>>> base64.urlsafe_b64decode(b'abcd--__')
b'i\xb7\x1d\xfb\xef\xff'

url=也需要去掉;

struct

用来处理bytes与其他二进制数据的转换;

>>> n = 10240099
>>> b1 = (n & 0xff000000) >> 24
>>> b2 = (n & 0xff0000) >> 16
>>> b3 = (n & 0xff00) >> 8
>>> b1 = (n & 0xff)
>>> bs = bytes([b1, b2, b3, b4])
>>> bs
b'\x00\x9c@c'
>>> import struct
>>> struct.pack('>I', 10240099)
b'\x00\x9c@c'
>>> struct.unpack('>I', b'\x00\x9c@c')
10240099
  • >,表示字节顺序是 big-endian,即网络序,I表示 4 字节无符号整数;

  • struct 模块定义的数据类型

hashlib

摘要算法

又叫哈希算法,散列算法,通过一个函数,把任意长度的数据转换成一个长度固定的数据串(通常是 16 进制字符串);

>>> import hashlib
>>> md5 = hashlib.md5()
# 可分多次调用 update
>>> md5.update('how to use md5 in '.encode('utf-8'))
>>> md5.update('python hashlib?'.encode('utf-8'))
# 提取 16 进制摘要
>>> print(md5.hexdigest())
d26a53750bc40b38b65a520292f69306

sha1sha256sha512的调用方式与md5完全一致,它们更加安全,但更慢,所得摘要更长;

碰撞

两个不同的数据通过某个摘要算法得到了相同的摘要,叫做碰撞,这是有可能的(因为任何摘要算法都是把无限的数据集合映射到有限的集合中);

摘要的应用

用于生成密文的口令存储于数据库;

经过混入salt和唯一且不可修改的ID,再求哈希值,这样存储会更安全;

摘要算法不是用来加密的,因为无法反推明文,只是用于防篡改的;

hmac

Keyed-Hashing for Message Authentication;

通过标准的算法,把key混入计算过程;

>>> import hmac
>>> message = b'hello world'
>>> key = b'secret'
>>> h = hmac.new(key, message, digestmod='MD5')
# 如果 message 很长,可以分多次调用 h.update(msg)
>>> h.hexdigest()
'78d6997b1230f38e59b6d1642dfaa3a4'

itertools

用于操作迭代对象的函数;

count(n)

创建一个无限迭代器,起始于n,每次加 1;

import itertools
# 自然数
natuals = itertools.count(1)

cycle(list)

创建一个无限迭代器,无限重复传入的序列;

# 无限重复'A','B','C'
cs = itertools.cycle('ABC')

repeat(item)

创建一个无限迭代器,无限重复传入的一个元素,第二个参数可以限定重复的次数;

ns = itertools.repeat(123, 3)

takewhile()

传入一个筛选函数,用来截取子序列;

filter不同,当函数条件第一次不满足后,不再继续迭代;

调用所得是一个 itertools.takewhile 迭代对象;

>>> ns = itertools.takewhile(lambda x: x<=10, natuals)
>>> list(ns)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

chain()

将一组迭代对象串联起来;

cn = itertools.chain('ABC', 'XYZ')

groupby()

把相邻的重复元素调出分到一组,groupitertools._grouper迭代对象;

>>> for key, group in itertools.groupby('aaabbbccaaa', lambda c: c.upper()):
...     print(key, list(group))
...
A ['a', 'a', 'a']
B ['b', 'b', 'b']
C ['c', 'c']
A ['a', 'a', 'a']

可以传入一个函数座位第二参数,元素通过函数处理后再作用于groupby

圆周率

def pi(N):' 计算pi的值 '# step 1: 创建一个奇数序列: 1, 3, 5, 7, 9, ...natuals = itertools.count(1)odd = filter(lambda x: x % 2 > 0, natuals)# step 2: 取该序列的前N项: 1, 3, 5, 7, 9, ..., 2*N-1.odd = itertools.takewhile(lambda x: (x + 1) // 2 <= N, odd)# step 3: 添加正负符号并用4除: 4/1, -4/3, 4/5, -4/7, 4/9, ...items = map(lambda x: (4 / (x if (((x + 1) // 2) % 2 > 0) else (0 - x))),odd)# step 4: 求和:return sum(items)

contextlib

只要实现了上下文管理,任何对象都可以使用with语句;

__enter__ 和 __exit__

class Query(object):def __init__(self, name):self.name = namedef __enter__(self):print('begin')return selfdef __exit__(self, exc_type, exc_value, traceback):if exc_type:print('Error')else:print('End')def query(self):print('query info about %s...' % self.name)with Query('bob') as q:q.query()

使用with语句时,自动调用 __enter__ 和 __exit__;

@contextmanager

class Query2(object):def __init__(self, name):self.name = namedef query(self):print('query info about %s...' % self.name)@contextmanager
def create_query(name):print('begin')q = Query2(name)yield qprint('end')with create_query('bob') as q:q.query()

with语句会先执行yield之前的语句,yield调用会执行with语句内部的语句,最后执行yield之后的语句;

closing

closing是一个经过@contextmanager装饰的generator

@contextmanager
def closing(thing):try:yield thingfinally:thing.close()

针对 Python 中读写资源使用完一定要正确关闭的问题,更简单的方式是使用 closing

from contextlib import closing
from urllib.request import urlopen
# closing 将 没有实现上下文管理的对象变为上下文对象
with closing(urlopen('https://www.python.org')) as page:for line in page:print(line)

urllib

用于操作URL

GET

from urllib import requestreq = request.Request('http://dict.youdao.com/w/odd/#keyfrom=dict2.top')
# 模拟 iphone OS 8.0 发起请求
req.add_header('User-Agent','Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25'
)
with request.urlopen(req) as f:data = f.read()print('status:', f.status, f.reason)for k, v in f.getheaders():print(f'{k}: {v}')print('data:'.data.decode('utf-8'))

POST

email = 'aaa.foxmail.com'
pwd = 'xxxxxx'
login_data = parse.urlencode([('username', email), ('password', pwd), ('entry', 'mweibo'),('client_id', ''), ('savestate', '1'), ('ec', ''),('pagerefer','https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')
])req = request.Request('https://passport.weibo.cn/sso/login')
# Origin 说明请求从哪里发起的,包括,且仅仅包括协议和域名
req.add_header('Origin', 'https://passport.weibo.cn')
# User-Agent 表示 HTTP 客户端程序的信息
req.add_header('User-Agent','Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25'
)
# Referer 表示 请求中 URI 的原始获取方
req.add_header('Referer','https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F'
)# data 参数以 bytes 传入
with request.urlopen(req, data=login_data.encode('utf-8')) as f:print('Status:', f.status, f.reason)for k, v in f.getheaders():print('%s: %s' % (k, v))print('Data:', f.read().decode('utf-8'))

Handler

通过代理访问;

proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
with opener.open('http://www.example.com/login.html') as f:pass

XML

DOM

把整个XML读入内存,解析为树,占内存大,解析慢;

SAX

流模式,占内存小,解析块,需要自己处理事务;

from xml.parsers.expat import ParserCreateclass DefaultSaxHandler(object):def start_element(self, name, attrs):print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))def end_element(self, name):print('sax:end_element: %s' % name)def char_data(self, text):print('sax:char_data: %s' % text)xml = r'''
  1. Python
  2. Ruby
'''handler = DefaultSaxHandler() parser = ParserCreate() parser.StartElementHandler = handler.start_element parser.EndElementHandler = handler.end_element # 可能会被分为多次调用,需要在 EndElementHandler 处合并 parser.CharacterDataHandler = handler.char_data parser.Parse(xml)

通过 start 找到需要的节点,把节点数据保存起来,在 end 处对数据合并并做处理;

HTMLParser

编写搜索引擎,先爬取目标网页,然后解析页面,获取内容;

HTMLXML的子集,是不严谨的XML

解析HTML的方式与SAX解析XML类似,自定义继承自HTMLParser的类,实现相关事件的相应;

from html.parser import HTMLParserclass MyHTMLParser(HTMLParser):def handle_starttag(self, tag, attrs):print('<%s>' % tag)def handle_endtag(self, tag):print('' % tag)def handle_startendtag(self, tag, attrs):print('<%s/>' % tag)def handle_data(self, data):print(data)def handle_comment(self, data):print('')def handle_entityref(self, name):print('&%s;' % name)def handle_charref(self, name):print('&#%s;' % name)parser = MyHTMLParser()
parser.feed('''


Some html HTML tutorial...
END

''')

feed()可以分多次调用;

2. 第三方模块

PyPI

the Python Package Index,所有第三方模块都会在此注册;

Pillow

官方文档

$ pip install pillow

操作图片

from PIL import Image, ImageFilter# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

绘图

from PIL import Image, ImageDraw, ImageFont, ImageFilterimport random# 随机字母:
def rndChar():return chr(random.randint(65, 90))# 随机颜色1:
def rndColor():return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 随机颜色2:
def rndColor2():return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象,可以根据操作系统提供绝对路径
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):for y in range(height):draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

requests

urllib方便丰富的网络资源访问模块;

$ pip install requests
import requests
r = requests.get('https://www.douban.com/')
# 返回状态码
r.status_code
# 返回内容
r.text
# 带参请求,传一个 dict 给 params
r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
# 获取编码
r.encoding
# 获取 bytes 对象的响应内容
r.content
# 直接获取 JSON 类型的响应内容
r.json()
# 需要传入 HTTP Header 时,传入一个 dict 给 headers
r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
# POST 请求只需将 get 变为 post,data 参数以 dict 传入
r = requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})
# 默认使用 application/x-www-form-urlencoded 对 POST 数据编码,如需传递 JSON 数据,可直接使用 json 传入
r = requests.post(url, json={'key': 'value'})# 上传文件
upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)# 响应头
r.headers
# 获取指定 cookie
r.cookies['ts']# 以 dict 传入 cookies
r = requests.get(url, cookies={'token':'xxxxxx', 'status': 'working'})# 2.5秒后超时
r = requests.get(url, timeout=2.5)

chardet

对未知编码的 bytes 进行编码猜测(通过特征字符的判断);

pip install chardet
>>> chardet.detect(b'Hello world')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

psutil

process and system utilities,跨平台系统监控模块;

pip install psutil

CPU

import psutil
# CPU逻辑数量
psutil.cpu_count()
# CPU物理核心
psutil.cpu_count(logical=False)
# CPU的用户/系统/空闲时间
psutil.cpu_times()
# CPU 使用率
psutil.cpu_percent(interval=1, percpu=True)

Memory

# 物理内存信息
psutil.virtual_memory()
# 交换区信息
psutil.swap_memory()

Disk

# 磁盘分区信息
psutil.disk_partitions()
# 磁盘使用情况
psutil.disk_usage('/')
# 磁盘 IO
psutil.disk_io_counters()

Network

# 获取网络读写字节/包的个数
psutil.net_io_counters()
# 获取网络接口信息
psutil.net_if_addrs()
# 获取网络接口状态
psutil.net_if_stats()
网络连接信息
psutil.net_connections()

process

# 所有进程ID
psutil.pids()
# 获取指定进程ID=3776,其实就是当前Python交互环境
p = psutil.Process(3776)
# 进程名称
p.name()
# 进程exe路径
p.exe()
# 进程工作目录
p.cwd()
# 进程启动的命令行
p.cmdline()
# 父进程ID
p.ppid()
# 父进程
p.parent()
# 子进程列表
p.children()
# 进程状态
p.status()
# 进程用户名
p.username()
# 进程创建时间
p.create_time()
# 进程终端
p.terminal()
# 进程使用的CPU时间
p.cpu_times()
# 进程使用的内存
p.memory_info()
# 进程打开的文件
p.open_files()
# 进程相关网络连接
p.connections()
# 进程的线程数量
p.num_threads()
# 所有线程信息
p.threads()
# 进程环境变量
p.environ()
# 结束进程
p.terminate()
# 模拟 ps 命令效果,查看当前所有进程状态
psutil.test()

3. 图形界面模块

Tkinter

Tkinter 封装了访问 Tk 的接口,Tk 是一个图形库,使用 Tcl 语言开发,支持多操作系统,Tk 会调用操作系统提供本地 GUI 接口;

复杂的 GUI 用操作系统原生语言或库编写;

from tkinter import *
import tkinter.messagebox as messageboxclass Application(Frame):def __init__(self, master=None):Frame.__init__(self, master)self.pack()self.createWidgets()def createWidgets(self):self.nameInput = Entry(self)# 将 widget 加到父容器self.nameInput.pack()# 点击触发 helloself.alertButton = Button(self, text='Hello', command=self.hello)self.alertButton.pack()def hello(self):name = self.nameInput.get() or 'world'messagebox.showinfo('Message', 'Hello, %s' % name)app = Application()
# 设置窗口标题
app.master.title('Hello World')
# 主消息循环
app.mainloop()

turtle

Turtle graphics,一种流行的玩具编程方式,详见 官方文档;

def draw_star(x, y):pu()goto(x, y)pd()# set heading: 0seth(0)for i in range(5):fd(40)rt(144)for x in range(0, 250, 50):draw_star(x, 0)done()

  • 上一篇:「Python 基础」进程与线程
  • 专栏:《Python 基础》

PS:感谢每一位志同道合者的阅读,欢迎关注、评论、赞!

相关内容

热门资讯

尚德教育的老师教的怎么样? 尚德教育的老师教的怎么样?尚德教育机构有他们独有的教育方式,直播课程可以互动,没听懂的可以看回放反复...
真三赵云龙之心怎么合成 真三赵云龙之心怎么合成真三赵云龙之心怎么合成杀黄龙掉出来的。不过杀黄龙需要一些装备建议在单人模式下练...
小冰 和 小兵 的英文分别怎么... 小冰 和 小兵 的英文分别怎么写?拜托了各位 谢谢little ice little solder ...
进监狱为什么会被其他的犯人打? 进监狱为什么会被其他的犯人打?为什么呢?因为他们和大家一样相信弱肉强食的丛林法则!!!让你看看他们有...
有一本小说女主角叫林小溪男主角... 有一本小说女主角叫林小溪男主角叫李什么琛一不小心爱上总裁作者:聿天使主角:林小溪,李聿旻你问错地方了
百万新娘之爱无悔英杰是敏君亲生... 百万新娘之爱无悔英杰是敏君亲生的吗王英杰是林敏君跟王绍华的儿子,五十九集说了:王英杰是:林敏君、王绍...
女人在恋爱中通常有哪些误区?如... 女人在恋爱中通常有哪些误区?如何避免?女人在恋爱中误区有付出的多少与爱的程度为正比,如果你总觉得如果...
俩人去马尔代夫旅行结婚需要多少... 俩人去马尔代夫旅行结婚需要多少钱?从天津到马尔代夫旅行结婚需要多少钱 什么时候去合适 待上7天左右 ...
人是不是年龄越大越不敢动感情? 人是不是年龄越大越不敢动感情?人并不是年龄越大越不敢动感情,而是因为年龄越大就看透了这世间所有的感情...
说男主重生如何开加盟鞋店如何赚... 说男主重生如何开加盟鞋店如何赚钱的过程的小说。小说重生之超级商业帝国重生之最强富翁重生1978重生1...
拔萝卜儿歌改编歌曲 拔萝卜儿歌改编歌曲儿歌拔萝卜 拔萝卜. 嗨吆嗨吆,拔萝卜,嗨吆嗨吆,拔不动, 老太婆,快快来,快来帮...
为啥所有的付出再他就是一文不值... 为啥所有的付出再他就是一文不值你人与人之间"心已走远"。。。那就不在付出了,既然看透了,那就没必要付...
贝利亚奥特曼 贝利亚奥特曼贝利亚奥特曼有什么故事?他的性格很不好吗?赛罗奥特曼VS黑暗独眼巨人赛罗大怪兽大战!超银...
找一部日剧~~ 找一部日剧~~之前看到有人推荐过一部日剧,前两个字是“非常”后面几个字我忘了,请问有谁知道吗?应该是...
“一往如初”是什么意思? “一往如初”是什么意思?一往如初是什么意思还是像以前一样。一往:一直,始终。如:像。初:以前那样,一...
闲情倩意后面能连个什么句 闲情倩意后面能连个什么句连词后面也可以加有动词的句子. recoveries accrued to...
世界上最( )的( )... 世界上最( )的( )是世界上最(奇妙)的(感觉)是你爱上一个人的时候.世界上最(舒服)的(...
备胎说车:打蜡 封釉 镀膜 镀... 备胎说车:打蜡 封釉 镀膜 镀晶哪个好常规的保养漆面的方法有打蜡封釉,保持时间长久,和提升漆面的硬度...
下背痛的诊断 下背痛的诊断下背痛的诊断
金鼎猜一个数字 金鼎猜一个数字不知道啊啊啊啊金鼎猜一个数字是9