2018-10-02 Python初識(shí)

做數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)需要用到Python,寫(xiě)下一些基本備忘伪嫁,特別是相對(duì)C++不同的地方


信息源

RUNOOB.COM 上的Python教程
http://www.runoob.com/python/python-intro.html

Python定義和特性

Python 是一個(gè)高層次的結(jié)合了解釋性哮奇、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言串述。

  • Python 是一種解釋型語(yǔ)言: 這意味著開(kāi)發(fā)過(guò)程中沒(méi)有了編譯這個(gè)環(huán)節(jié)执解。類(lèi)似于PHP和Perl語(yǔ)言。
  • Python 是交互式語(yǔ)言: 這意味著纲酗,您可以在一個(gè)Python提示符衰腌,直接互動(dòng)執(zhí)行寫(xiě)你的程序新蟆。
  • Python 是面向?qū)ο笳Z(yǔ)言: 這意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。

Python代碼縮進(jìn)結(jié)構(gòu)

沒(méi)有{}作為代碼塊功能右蕊,利用縮進(jìn)結(jié)構(gòu)和代碼塊前一行加個(gè)冒號(hào)(:)區(qū)分代碼塊
普通語(yǔ)句除非同行 無(wú)需 分號(hào)(;

Python變量無(wú)需聲明類(lèi)型 直接賦值

標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型 描述
Numbers(數(shù)字) int float complex復(fù)數(shù)
String(字符串) 特殊的索引負(fù)數(shù)索引
使用 [頭下標(biāo):尾下標(biāo)] 來(lái)截取相應(yīng)的字符串
List(列表) 中括號(hào) [ ] Python 中使用最頻繁的數(shù)據(jù)類(lèi)型
Tuple(元組) 小括號(hào) ( ) 元組不能二次賦值琼稻,相當(dāng)于只讀列表
Dictionary(字典) 大括號(hào) { } 鍵值對(duì)
dict={}; dict[180]="林爍"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}

有數(shù)據(jù)類(lèi)型轉(zhuǎn)換內(nèi)置函數(shù)

函數(shù) 描述
str(x) 將對(duì)象 x 轉(zhuǎn)換為字符串
dict(d) 創(chuàng)建一個(gè)字典。d 必須是一個(gè)序列 (key,value)元組尤泽。

Python運(yùn)算符

運(yùn)算符 描述 實(shí)例
** - 返回x的y次冪 a**b 為10的20次方欣簇, 輸出結(jié)果 100000000000000000000
// 取整除 - 返回商的整數(shù)部分(向下取整) 9//2 輸出結(jié)果 4 , 9.0//2.0 輸出結(jié)果 4.0
**= 冪賦值運(yùn)算符 c **= a 等效于 c = c ** a
//= 取整除賦值運(yùn)算符 c //= a 等效于 c = c // a
^ << >> 按位異或 左移 右移 a = 60 # 60 = 0011 1100
c = a >> 2; # 15 = 0000 1111
**not ** 布爾“非”,不是 坯约! if not( a and b ):
print "5 - 變量 a 和 b 都為 false熊咽,或其中一個(gè)變量為 false"
else:
print "5 - 變量 a 和 b 都為 true"
in
not in
成員運(yùn)算符 a=10; list=[1,2,3]; if ( a in list ): print:"yes"
is 身份運(yùn)算符
is 是判斷兩個(gè)標(biāo)識(shí)符是不是引用自一個(gè)對(duì)象
每一個(gè)變量都有name、id闹丐、value三個(gè)屬性
x is y, 類(lèi)似 id(x) == id(y) , 如果引用的是同一個(gè)對(duì)象則返回 True横殴,否則返回 False
is not is not 是判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象 x is not y , 類(lèi)似 id(a) != id(b)卿拴。如果引用的不是同一個(gè)對(duì)象則返回結(jié)果 True衫仑,否則返回 False。

Python語(yǔ)句

  • Python沒(méi)有switch語(yǔ)句
    elif num==2: 來(lái)實(shí)現(xiàn)其功能
  • Python 的 while...else語(yǔ)句
#!/usr/bin/python
 
count = 0
while count < 5:
   print count, " is  less than 5"
   count = count + 1
else:
   print count, " is not less than 5"
  • Pthon的 for .. in .. : 可以遍歷任何序列的項(xiàng)目堕花,如一個(gè)列表或者一個(gè)字符串
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二個(gè)實(shí)例
   print '當(dāng)前水果 :', fruit

for index in range(len(fruits)): #通過(guò)序列索引迭代
   print '當(dāng)前水果 :', fruits[index]
 
print "Good bye!"

  • Python 的 pass 語(yǔ)句
    占位符文狱,湊格式

Python 模塊導(dǎo)入

  • cmath
    import math

cmath 模塊的函數(shù)跟 math 模塊函數(shù)基本一致,區(qū)別是 cmath 模塊運(yùn)算的是復(fù)數(shù)缘挽,math 模塊運(yùn)算的是數(shù)學(xué)運(yùn)算瞄崇。

>>> import cmath
>>> dir(cmath)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
>>> cmath.sqrt(-1)
1j
>>> cmath.sqrt(9)
(3+0j)
>>> cmath.sin(1)
(0.8414709848078965+0j)
>>> cmath.log10(100)
(2+0j)
>>>
  • Python隨機(jī)數(shù)函數(shù)
  • 三角函數(shù)
  • 數(shù)學(xué)常量 pi e

Python字符串

  • "hello world" 'hello world' 單引號(hào)雙引號(hào)都行
  • 字符串運(yùn)算符 + * 索引[] 截取 [ : ] in not in r"haha\n" %
  • 字符串格式化
    print "My name is %s and weight is %d kg!" % ('Zara', 21)
  • Python 三引號(hào)
    實(shí)現(xiàn)WYSIWYG,所見(jiàn)即所得

Python 變量沒(méi)有類(lèi)型

a=[1,2,3]
a="Runoob"

[1,2,3] 是 List 類(lèi)型壕曼,"Runoob" 是 String 類(lèi)型苏研,而變量 a 是沒(méi)有類(lèi)型,她僅僅是一個(gè)對(duì)象的引用(一個(gè)指針)腮郊,可以是 List 類(lèi)型對(duì)象摹蘑,也可以指向 String 類(lèi)型對(duì)象。

Python文件操作

Python File 方法一覽表

  • 打開(kāi)文件
語(yǔ)法:file object = open(file_name [, access_mode = "r" ][, buffering])
完整語(yǔ)法:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
例子:fo=open("foo.txt","a+")

access_mode參數(shù)

六種模式

默認(rèn)為文本模式轧飞,如果要以二進(jìn)制模式打開(kāi)衅鹿,加上 b,如 ab+,rb+,wb

  • 關(guān)閉文件方法
    fo.close()是一個(gè)好習(xí)慣
    避免遺漏以及繁瑣操作,Python引入了with語(yǔ)句來(lái)自動(dòng)調(diào)用close()
with open("foo.txt","a") as fo:
    fo.write("Don't scoff at others\n")
    print (fo.read())
pass
  • File對(duì)象的屬性
屬性 描述
file.closed 文件是否已關(guān)閉
file.mode 文件的打開(kāi)方式
file.name 文件的名稱(chēng)
  • 文件讀寫(xiě)方法
方法(函數(shù)) 描述
fo.read([count]) 讀字節(jié)數(shù)过咬,不帶參數(shù)讀整個(gè)文件塘安,可讀二進(jìn)制文件
fo.readline() 讀一行
fo.readlines() 讀所有行,存入一個(gè)列表中 可用for line in fo.readlines遍歷
['Hello, world!\n','I love you \n']
利用len(fo.readlines())可以獲取文本文件的行數(shù)
file.write(str) - 在文件關(guān)閉前或緩沖區(qū)刷新前援奢,字符串內(nèi)容存儲(chǔ)在緩沖區(qū)中,這時(shí)你在文件中是看不到寫(xiě)入的內(nèi)容的忍捡。
- 如果文件打開(kāi)模式帶 b集漾,那寫(xiě)入文件內(nèi)容時(shí)切黔,str (參數(shù))要用 encode 方法轉(zhuǎn)為 bytes 形式,否則報(bào)錯(cuò):TypeError: a bytes-like object is required, not 'str'具篇。
file.writelines(sequence) 向文件寫(xiě)入字符串列表序列
  • 文件定位
方法(函數(shù)) 描述
file.tell() 返回文件當(dāng)前讀寫(xiě)指針位置
file.seek(offset[, whence]) 設(shè)置文件當(dāng)前位置
whence 何處默認(rèn)值為0纬霞,從文件開(kāi)頭開(kāi)始算起,whence=1 從當(dāng)前位置算起(即tell()返回值)驱显,2表示從文件末尾算起诗芜。
  • file.next() 方法
    方法在文件使用迭代器時(shí)會(huì)使用到,在循環(huán)中埃疫,next()方法會(huì)在每次循環(huán)中調(diào)用伏恐,該方法返回文件的下一行,如果到達(dá)結(jié)尾(EOF),則觸發(fā) StopIteration
fo=open("foo.txt","r")
print ("文件名為:",fo.name)
for index in range(5):
    line = fo.__next__()
    print ("第 %d 行 - %s" % (index,line))
fo.close()
  • file.flush()
    把輸出緩存區(qū)的內(nèi)容flush到文件系統(tǒng)的文件中栓霜,輸出緩沖區(qū)因此被清空(flushed翠桦,沖掉了)

  • file.truncate( [ size = 0 ] )
    從文件當(dāng)前位置保留size個(gè)字節(jié)后面的全部truncate(剪)掉

  • Python os 模塊
    os 文件/目錄 方法一覽表

import os
os.rename(current_file_name, new_file_name)
os.remove(file_name)
  • 目錄操作
os.getcwd()
os.mkdir("newdir")
os.chdir("newdir")
os.rmdir("newdir")

Python 內(nèi)置函數(shù)(常用)

  • 數(shù)學(xué)相關(guān)
Input Output
abs(-1) 1
max([1,2,3])
min([1,2,3])
3
1
序列長(zhǎng)度 len('abc')、len([1,2,3])胳蛮、len((1,2,3)) 3
返回(商,余數(shù))的tupple的除法
divmod(10,3)
(3,1)
pow(9,1/2) 3.0
四舍五入round(1.6) 2
  • range()

輸出0~9

for index in range(10):
  print (index)
pass

打印單字符不換行

x='linshuo'
for i in range(len(x)):
    print(x[i],end=" ")
____
l i n s h u o 

range常用法

>>>range(10)        # 從 0 開(kāi)始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 從 1 開(kāi)始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步長(zhǎng)為 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步長(zhǎng)為 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 負(fù)數(shù)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]

Python 面向?qū)ο?類(lèi)

對(duì)象包括兩個(gè)數(shù)據(jù)成員销凑,類(lèi)變量和實(shí)例變量

  • 類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中且在函數(shù)體之外仅炊。類(lèi)變量通常不作為實(shí)例變量使用斗幼。
    書(shū)寫(xiě)方式 類(lèi)名.類(lèi)變量名 Teacher.teacherCount
  • 實(shí)例變量:定義在方法中的變量,只作用于當(dāng)前實(shí)例的類(lèi)抚垄。
  • 類(lèi)的定義
class Employee:
    '所有員工的基類(lèi)'
    empCount=0 #類(lèi)變量
    
    def __init__(self,name,salary):
        self.name=name
        self.salary=salary
        Employee.empCount += 1

    def __del__(self):
        class_name = self.__class__.__name__
        print (class_name,"銷(xiāo)毀")

    def displayCount(self):
        print ("Total Employee: %d" % Employee.empCount)
    
    def displayEmployee(self):
        print ("Name: %s ,Salary: %d " % (self.name,self.salary))

self 代表類(lèi)的實(shí)例蜕窿,而非類(lèi)
類(lèi)的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng), 按照慣例它的名稱(chēng)是 self。
(self 不是 python 關(guān)鍵字督勺,我們把他換成 runoob 也是可以正常執(zhí)行的)

  • 類(lèi)的私有屬性與私有方法
    __secretAttr = 0
    兩個(gè)下劃線(xiàn)開(kāi)頭渠羞,聲明該屬性為私有,不能在類(lèi)的外部被使用或直接訪(fǎng)問(wèn)智哀。在類(lèi)內(nèi)部的方法中使用時(shí) self.__private_attrs
    __private_method
    兩個(gè)下劃線(xiàn)開(kāi)頭次询,聲明該方法為私有方法,不能在類(lèi)的外部調(diào)用瓷叫。在類(lèi)的內(nèi)部調(diào)用 self.__private_methods
    實(shí)例化的類(lèi)訪(fǎng)問(wèn)私有屬性的方式
    foo._Foo__.__privateAttr
    Python不允許實(shí)例化的類(lèi)訪(fǎng)問(wèn)私有數(shù)據(jù)屯吊,但你可以使用 object._className__attrName( 對(duì)象名._類(lèi)名__私有屬性名 )訪(fǎng)問(wèn)屬性

  • 類(lèi)方法
    實(shí)例方法、類(lèi)方法與靜態(tài)方法的區(qū)別

    @classmethod
    def displayCount(cls): 
        print ("Total Employee: %d" % Employee.empCount)
        print ("Total Teachers: %d" % Teacher.teacherCount)
___
    調(diào)用時(shí)用 Teacher.displayCount()
  • 對(duì)象的屬性操作
    getattr(obj, name[, default]) : 訪(fǎng)問(wèn)對(duì)象的屬性摹菠。
    hasattr(obj,name) : 檢查是否存在一個(gè)屬性盒卸。
    setattr(obj,name,value) : 設(shè)置一個(gè)屬性。如果屬性不存在次氨,會(huì)創(chuàng)建一個(gè)新屬性蔽介。
    delattr(obj, name) : 刪除屬性。
    hasattr(emp1,'age') ; setattr(emp1,'age',11) ; getattr(emp1,'age') ; delattr(emp1,'age')
    或者
    emp1.age = 7 # 添加一個(gè) 'age' 屬性
    emp1.age = 8 # 修改 'age' 屬性
    del emp1.age # 刪除 'age' 屬性

  • 類(lèi)的內(nèi)置屬性

Employee.__doc__  # '所有員工的基類(lèi)'
Employee.__name__ # 'Employee'
Employee.__module__ # __main__
Employee.__bases__ # ()
Employee.__dict__  
  • 類(lèi)的繼承
class SubClassName (ParentClass1[, ParentClass2, ...]):
    pass
class Teacher(Employee):
    '這個(gè)是老師類(lèi),職員的派生類(lèi)'
    teacherCount = 0 #類(lèi)變量
    
    def __init__(self,name,salary):
        Employee.__init__(self,name,salary)
        Teacher.teacherCount += 1
    
    @classmethod #類(lèi)方法
    def displayCount(cls):
        print ("Total Employee: %d" % Employee.empCount)
        print ("Total Teachers: %d" % Teacher.teacherCount)
    
    def displayEmployee(self):#方法override
        print("Teacher- Name: %s ,Salary: %d " % (self.name,self.salary))
        
    def __del__(self):
        Teacher.teacherCount -= 1
        print ("Teacher類(lèi)的析構(gòu)方法")
        Employee.__del__(self)
  • 子類(lèi)構(gòu)造方法和父類(lèi)構(gòu)造方法的重寫(xiě)
    如果在子類(lèi)中需要父類(lèi)的構(gòu)造方法就需要顯示的調(diào)用父類(lèi)的構(gòu)造方法虹蓄,或者不重寫(xiě)父類(lèi)的構(gòu)造方法犀呼。
    子類(lèi)不重寫(xiě) __init__,實(shí)例化子類(lèi)時(shí)薇组,會(huì)自動(dòng)調(diào)用父類(lèi)定義的 __init__外臂。
    如果重寫(xiě)了__init__ ,實(shí)例化子類(lèi)時(shí)律胀,就不會(huì)調(diào)用父類(lèi)定義的 __init__宋光。
    重寫(xiě)__init__,如果要用到父類(lèi)的構(gòu)造方法,可以用 父類(lèi)名稱(chēng).__init__(self,arg1,arg2,...)的方式調(diào)用
  • 運(yùn)算符重載
class Vector:
    def __init__(self,a,b):
        self.a=a
        self.b=b

#obj->str方法重載        
    def __str__(self):
        return '我重載了__str__函數(shù)\n Vector (%d,%d)' % (self.a,self.b)
    
#    運(yùn)算符重載
    def __add__(self,other): 
        return Vector(self.a+other.a,self.b+other.b)
        
v1 = Vector(1,1)
v2=Vector(2,3)
print (v1+v2)
-----------------------------
輸出:
我重載了__str__函數(shù)
Vector (3,4)
  • 單下劃線(xiàn)炭菌、雙下劃線(xiàn)罪佳、頭尾雙下劃線(xiàn)說(shuō)明
格式 說(shuō)明
__foo__ 特殊方法、系統(tǒng)定義的名字娃兽,如 __init__() __del__() __str__() __add__()
_foo protected variables 保護(hù)類(lèi)型 只允許本身與子類(lèi)進(jìn)行訪(fǎng)問(wèn)菇民,不能用于from module import *
__foo private variables 私有類(lèi)型 只允許這個(gè)類(lèi)本身進(jìn)行訪(fǎng)問(wèn)

正則表達(dá)式(Regular Expression)/ re模塊

Python正則表達(dá)式博文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市投储,隨后出現(xiàn)的幾起案子第练,更是在濱河造成了極大的恐慌,老刑警劉巖玛荞,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娇掏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡勋眯,警方通過(guò)查閱死者的電腦和手機(jī)婴梧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)客蹋,“玉大人塞蹭,你說(shuō)我怎么就攤上這事⊙扰鳎” “怎么了番电?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)辆琅。 經(jīng)常有香客問(wèn)我漱办,道長(zhǎng),這世上最難降的妖魔是什么婉烟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任娩井,我火速辦了婚禮,結(jié)果婚禮上似袁,老公的妹妹穿的比我還像新娘洞辣。我一直安慰自己咐刨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布屋彪。 她就那樣靜靜地躺著所宰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜挥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,874評(píng)論 1 314
  • 那天婴谱,我揣著相機(jī)與錄音蟹但,去河邊找鬼。 笑死谭羔,一個(gè)胖子當(dāng)著我的面吹牛华糖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘟裸,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼客叉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了话告?” 一聲冷哼從身側(cè)響起兼搏,我...
    開(kāi)封第一講書(shū)人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沙郭,沒(méi)想到半個(gè)月后佛呻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡病线,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年吓著,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片送挑。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绑莺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惕耕,到底是詐尸還是另有隱情纺裁,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布赡突,位于F島的核電站对扶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惭缰。R本人自食惡果不足惜浪南,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱受。 院中可真熱鬧络凿,春花似錦骡送、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至怨愤,卻和暖如春派敷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撰洗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工篮愉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人差导。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓试躏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親设褐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颠蕴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容