#小手一抬學(xué)Python# Python語(yǔ)法基礎(chǔ)干貨盤(pán)點(diǎn)【附源碼】


前言

參考資料

筆者Python學(xué)習(xí)主要以《Python編程:從入門(mén)到實(shí)戰(zhàn)》這本書(shū)為主,筆記的思路參考書(shū)里的脈絡(luò)宗挥。其次還有筆者一年前在慕課上看的北理的嵩天教授的Python課程掰派。嵩天教授的課很好从诲,最大的特點(diǎn)是每個(gè)版塊都有完整的示例代碼。但可能對(duì)新手小白不太友好靡羡,有些不常用的函數(shù)容易弄混系洛。《Python編程:從入門(mén)到實(shí)戰(zhàn)》更適合零基礎(chǔ)學(xué)習(xí)略步,里邊會(huì)提到一些互通的編程思想和Python的格式規(guī)范描扯。

結(jié)合常用函數(shù)、方法

由于筆者有Java的編程基礎(chǔ)趟薄,因此這里只記錄Python跟Java不一樣的地方以及一些易忘點(diǎn)和難點(diǎn)绽诚,重點(diǎn)放在Python的語(yǔ)法基礎(chǔ)。對(duì)于新手朋友還是先看書(shū)為好。結(jié)合《Python常用函數(shù)憔购、方法示例總結(jié)(API)》來(lái)看可能效果會(huì)好一些宫峦。


1. 變量與簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)

  • .py指出這是一個(gè)Python程序,編輯器將使用Python解釋器運(yùn)行它玫鸟;

  • Python解釋器讀取整個(gè)程序导绷,確定其中每個(gè)單詞含義;

  • 程序無(wú)法成功運(yùn)行時(shí)屎飘,解釋器會(huì)提供一個(gè)traceback妥曲。traceback是一條記錄,指出解釋器嘗試運(yùn)行代碼時(shí)钦购,在什么地方陷入困境檐盟;

  • 在Python中,可以用單引號(hào)雙引號(hào)括起字符串押桃;

  • Python中的轉(zhuǎn)義符:

    • \n換行(光標(biāo)到下行首)葵萎;
    • \r回車(chē)(光標(biāo)回到本行首);
    • \t制表符唱凯,\n\t表示換行并在下一行開(kāi)頭添加制表符羡忘;
    • \b回退;
  • Python2中磕昼,有些print語(yǔ)句包含括號(hào)卷雕,有些不包含;

  • Python使用兩個(gè)乘號(hào)表示乘方票从,如:3 ** 2 == 9漫雕;

  • Python2中除法\將小數(shù)部分直接刪除。Python3中保留小數(shù)峰鄙。但在Python2中:3.0 / 2 == 1.5浸间;

  • Python之禪:Python的一些編程理念。在終端輸入import this即可獲认裙荨发框;

  • Python關(guān)鍵字:

  • Python內(nèi)置函數(shù):



    2. 列表相關(guān)========* 一個(gè)列表示例:bicycles = [ 'trek', 'cannondale', 'redline']。注意方括號(hào)逗號(hào)煤墙;* 打印列表示例:print(bicycles)梅惯;* 訪問(wèn)列表元素:bicycles[0] --- > trek;* 訪問(wèn)列表倒數(shù)第x元素:bicycles[-x] --- > 當(dāng)x=1時(shí)輸出:redline仿野;* 使用for循環(huán)遍歷列表:```
    for object in list:
    print(object)

    
    
  • 列表解析list = [num**2 for num in range(1s, 11)] ---> 輸出1到10的平方铣减;

  • 遍歷部分列表for object in list[firstNum: lastNum]:

  • 可以使用list[:]的方法復(fù)制列表脚作;

  • 元祖相關(guān):

    • Python中將不能修改的值稱(chēng)為不可變的葫哗,而不可變的列表稱(chēng)為元祖缔刹;
    • 在編程上與列表不同之處在于其使用()tuple()或不使用括號(hào);而列表使用[]list()劣针;
    • 元組因?yàn)閯?chuàng)建后不能修改校镐,因此沒(méi)有特殊操作;
  • 如果提出修改Python語(yǔ)言修改建議捺典,需要編寫(xiě)Python改進(jìn)提案(PEP)鸟廓。PEP 8是最古老的PEP之一,其規(guī)定了以下一些Python代碼格式規(guī)范:

    • 每級(jí)縮進(jìn)4個(gè)空格襟己。需要對(duì)文本編輯器(或ide)設(shè)置tab鍵為4個(gè)空格引谜;
    • Python解釋器根據(jù)水平縮進(jìn)解讀代碼,不關(guān)心垂直間距擎浴;
    • 建議每行不超過(guò)個(gè)字符员咽;
    • 建議比較運(yùn)算符兩邊各添加一個(gè)空格;

3. 集合

  • 一個(gè)集合示例:bicycles = { 'trek', 'cannondale', 'redline'}贮预。注意大括號(hào)逗號(hào)贝室;

  • 集合的特點(diǎn)是不能重復(fù);

  • 利用集合數(shù)據(jù)去重:

    s = set(list)  #利用集合無(wú)重復(fù)元素的特點(diǎn)去重
    l = list(s)  #將集合轉(zhuǎn)變回列表
    

4. If語(yǔ)句

  • Python在檢查是否相同時(shí)考慮大小寫(xiě)仿吞;

  • 大部分時(shí)候檢查兩個(gè)指不等的效率更高档玻;

  • 在Python中使用andor表示并與或,而不是&&||茫藏;

  • 檢查列表是否含有特定值的語(yǔ)句:if(object in list),也可以用if(object not in list)霹琼;

  • Python的if語(yǔ)句基本結(jié)構(gòu)如下(注意冒號(hào)):```
    if conditional_test1:
    do something1
    elif conditional_test2:
    do something2
    else:
    do other

    
    
  • 判斷列表是否為空:if list:

5. 字典

  • 事實(shí)上务傲,可將任意Python對(duì)象用作字典中的值;
  • 一個(gè)字典的示例:alien0 = {'color': 'green', 'points': 5}
  • 遍歷字典for key, value in map.items():
  • 遍歷字典的鍵for object in map.keys():for object in map:枣申,因?yàn)楸闅v字典默認(rèn)遍歷所有的鍵售葡;
  • 按順序遍歷字典所有的鍵:for object in sorted(map.keys()):
  • 遍歷字典的值for object in map.values():
  • 遍歷字典的值,剔除重復(fù)項(xiàng):for object in set(map.values()):
  • 列表和字典的嵌套層級(jí)不應(yīng)太多忠藤,如果太多挟伙,可能有更簡(jiǎn)單的解決問(wèn)題的方案;

6. 用戶輸入和while循環(huán)

  • 在Python 3里使用input()方法模孩,而在Python 2.7里使用raw_input()方法尖阔;
  • 循環(huán)語(yǔ)句:while conditional_test:
  • 可以使用break關(guān)鍵字退出循環(huán),這里的循環(huán)包括while和for循環(huán)榨咐;
  • 可以使用continue關(guān)鍵字繼續(xù)循環(huán)介却;
  • 使用循環(huán)處理列表:while object in list:

7. 函數(shù)

  • 不帶返回值的函數(shù)定義示例:

    def greet_user(username, age=1):  #username沒(méi)有設(shè)定默認(rèn)值必須放在形參列表開(kāi)頭
      """顯示簡(jiǎn)單問(wèn)候語(yǔ)"""
      print("hello, " + username.title() + ", age is " + str(age))
    
    greet_user('jesse', 18)  #位置實(shí)參
    greet_user(age=18, username='jesse')  #關(guān)鍵字實(shí)參
    greet_user('jesse')  #使用默認(rèn)值age=1
    
    • 第二行為文檔字符串注釋,描述函數(shù)是做什么的块茁;
    • 后面為函數(shù)調(diào)用齿坷;
  • 帶普通返回值的函數(shù)定義示例:

    def greet_user(username, age=1):  #username沒(méi)有設(shè)定默認(rèn)值必須放在形參列表開(kāi)頭
      """顯示簡(jiǎn)單問(wèn)候語(yǔ)"""
      print("hello, " + username.title() + ", age is " + str(age))
      return username.title()
    
  • 帶字典返回值的函數(shù)定義示例:

    def build_person(first_name, last_name):  #username沒(méi)有設(shè)定默認(rèn)值必須放在形參列表開(kāi)頭
      """返回字典"""
      person = {'first': first_name, 'last': last_name}
      return person
    
  • 傳遞列表參數(shù)桂肌,列表會(huì)修改:

    def greet_users(names):
      """傳入?yún)?shù)為列表"""
      for name in names:
          msg = "Hello, " + name.title() + "!"
          print(mas)
    
    usermanes = ['margot', 'hannah', 'ty']
    greet_users(usernames)
    
  • 傳遞列表參數(shù)的副本,列表不會(huì)修改:def greet_users(names[:]):

  • 傳遞任意數(shù)量的實(shí)參:*toppings可以理解成列表永淌;

    def make_pizza(*toppings):
      """打印顧客點(diǎn)的所有配料"""
      print(toppings)
    
    make_pizza('pepperoni')
    make_pizza('mushrooms', 'green peppers', 'etra cheese')
    
    • Python創(chuàng)建一個(gè)名為toppings的空元組崎场;
  • 結(jié)合使用位置實(shí)參和任意數(shù)量實(shí)參:def make_pizza(size, *toppings):

    • 必須將接納任意數(shù)量實(shí)參的形參*toppings放在最后;
  • 使用任意數(shù)量的關(guān)鍵字實(shí)參:\user_info**可以理解成字典遂蛀;

    def build_profile(name, **user_info):
      """創(chuàng)建一個(gè)字典谭跨,其中包含我們知道的有關(guān)用戶的一切"""
      profile = {}
      profile['name'] = name  
      for key, value in user_info.items():
          profile[key] = value
      return profile
    
    user_profile = build_profile('albert', location='princeton', field='physics')
    print(user_profile)
    
  • 在Python中,import的是模塊答恶,使用模塊.方法(參數(shù))即可調(diào)用模塊里的函數(shù)饺蚊;

  • 導(dǎo)入特定函數(shù),并使用該函數(shù)示例:```
    from module_name import function_0, function_1
    function_0()
    function_1(參數(shù))

    
    
  • 使用as給函數(shù)指定別名:from model import function as fn悬嗓;后續(xù)使用fn()即可調(diào)用function函數(shù)污呼;

  • 使用as給模塊指定別名:import model as md;后續(xù)使用md.function()即可調(diào)用函數(shù)包竹;

  • 導(dǎo)入模塊所有函數(shù):from model import *燕酷;后續(xù)直接使用model里的函數(shù)function()即可調(diào)用函數(shù);

  • 可以在函數(shù)類(lèi)使用global關(guān)鍵字聲明變量是全局變量周瞎;

  • lambda表達(dá)式<函數(shù)名> = lambda <參數(shù)> : <表達(dá)式>苗缩;

    • 示例:
        
        >>> f = lambda x, y : x + y
        >>> f(10, 15)
        25
        ```
        
    
    > > > f = lambda : "lambda表達(dá)式"  
    > > > print(f())  
    > > > lambda表達(dá)式
    
  • 函數(shù)與模塊編寫(xiě)細(xì)節(jié):

    • 外部函數(shù)導(dǎo)入的推薦做法:只導(dǎo)入所需要使用的函數(shù) / 導(dǎo)入整個(gè)模塊并使用句點(diǎn)表示法;
    • 函數(shù)和模塊的命名應(yīng)使用小寫(xiě)字母和下劃線声诸,而不是駝峰命名法酱讶;
    • 函數(shù)注釋緊跟在函數(shù)定義后面,使用文檔字符串格式彼乌;
    • 給形參指定默認(rèn)值時(shí)泻肯,等號(hào)=兩邊不要有空格;

8. 類(lèi)與對(duì)象

  • 類(lèi)中的函數(shù)叫方法慰照;

  • 一個(gè)類(lèi)示例:模塊名為dog.py

    """表示小狗和電子狗的類(lèi)"""
    
    class Dog():
      """模擬小狗"""
    
      def __init__(self, name):
          """初始化實(shí)例"""
          self.name = name
          self.age = 1  #給屬性指定默認(rèn)值
    
      def get_age(self):
           """返回年齡"""
           return self.age
    
      def set_age(self, age):
          """設(shè)置年齡"""
          self.age = age
    
      def sit(self):
          """模擬小狗被命令時(shí)蹲下"""
          print(self.name.title() + " is now sitting.")
    
    class TinyDog(Dog):
      """小狗是狗的子類(lèi)"""
    
      def __init__(self, name)
          """初始化父類(lèi)的屬性"""
          super().__init__(name)
    
    • __init__()方法:形參self必不可少灶挟,而且必須位與其他參數(shù)前面;
    • 創(chuàng)建Dog實(shí)例時(shí)毒租,將自動(dòng)傳入實(shí)參self稚铣。每個(gè)與類(lèi)相關(guān)聯(lián)的方法調(diào)用都自動(dòng)傳遞實(shí)參self,其是一個(gè)指向?qū)嵗旧淼膽?yīng)用墅垮,讓實(shí)例能夠訪問(wèn)類(lèi)中的屬性和方法惕医;
    • self.為前綴的變量都可供類(lèi)中的所有方法使用,像這樣可以通過(guò)實(shí)例訪問(wèn)的變量稱(chēng)為屬性噩斟;
  • 有關(guān)父子類(lèi):

    • 子類(lèi)和父類(lèi)必須包含在當(dāng)前文件中曹锨,父類(lèi)必須在子類(lèi)前面;
    • 子類(lèi)定義中括號(hào)內(nèi)必須指定父類(lèi)名稱(chēng)剃允;
    • super()是一個(gè)特殊函數(shù)沛简,將父類(lèi)和子類(lèi)關(guān)聯(lián)起來(lái)齐鲤;
    • 在Python 2.7中,super()方法需要傳遞兩個(gè)實(shí)參:子類(lèi)名self椒楣,并且父類(lèi)定義的括號(hào)內(nèi)指定字段object给郊;
  • 在Python 2.7中創(chuàng)建類(lèi)時(shí),需要在括號(hào)類(lèi)內(nèi)包含單詞objectclass ClassName(object):

  • 類(lèi)實(shí)例(對(duì)象)的示例:

    class Dog():
      --snip--
    
    my_dog = Dog('willie')
    dog_name = my_dog.name  #獲取屬性
    dog_name = my_dog.get_age()  #通過(guò)方法獲取屬性
    my_dog.name = 'jucy'  #直接修改屬性
    my_dog.set_age = 18  #通過(guò)方法修改屬性
    my_dog.sit()  #調(diào)用方法
    
  • dog.py模塊里導(dǎo)入多個(gè)類(lèi):from dog import Dog, TinyDog捧灰;

  • 導(dǎo)入整個(gè)dog.py模塊淆九,然后用句點(diǎn)表示訪問(wèn)需要的類(lèi):import dog

  • collections模塊里包含一個(gè)類(lèi)OrderedDict毛俏。該類(lèi)的實(shí)例行為幾乎與字典相同炭庙,區(qū)別在于其記錄了鍵值對(duì)的順序;

  • 類(lèi)的編碼風(fēng)格:

    • 類(lèi)采用駝峰命名法煌寇,類(lèi)中的每個(gè)單詞首字母大寫(xiě)焕蹄;
    • 實(shí)例名和模塊名采用小寫(xiě),并在單詞之間加上下劃線阀溶;
    • 一個(gè)空行分隔方法腻脏;兩個(gè)空格分隔類(lèi);
    • 需要同時(shí)導(dǎo)入標(biāo)準(zhǔn)庫(kù)和模塊和

9. 文件

  • 打開(kāi)并讀取一個(gè)文件银锻,并將其內(nèi)容顯示到屏幕上:

    with open('xxx.txt') as file_object:
      contents = file_object.read()
      print(contents)
    
    • 打開(kāi)文件open()和關(guān)閉文件close()可以同時(shí)使用永品,但當(dāng)有bug時(shí)close()執(zhí)行不了會(huì)導(dǎo)致文件無(wú)法關(guān)閉。不寫(xiě)close()將由Python確定是否關(guān)閉文件击纬;
    • with關(guān)鍵字在不再需要訪問(wèn)文件后將其關(guān)閉鼎姐;
    • 直接打印contents會(huì)多出一個(gè)空行,可以這樣打印print(contens.rstrip())更振;
  • 有關(guān)文件絕對(duì)路徑:

    • Linux和OS X:file_path = '/home/.../xxx.txt'症见;
    • Windows:file_path = C:\...\xxx.txt
    • 建議將數(shù)據(jù)文件存儲(chǔ)在程序文件所在的目錄殃饿,或程序文件所在目錄的下一級(jí)文件夾;
  • 逐行讀扔蟪Α:

    with open(filename) as file_object:
      for line in file_object:
      print(line)
    
    • 同理乎芳,直接打印contents會(huì)多出一個(gè)空行,可以這樣打印print(line.rstrip())帖池;
  • 使用with關(guān)鍵字時(shí)奈惑,open()返回的對(duì)象只在with代碼塊內(nèi)可用;

  • 在處理文件相關(guān)時(shí)注意使用strip()rstrip()去除字符串兩邊的空格睡汹;

  • Python將所有文本都解讀成字符串肴甸;

  • open('xxx.txt', 'w'):以寫(xiě)入方式打開(kāi)文件;

    • 其他參數(shù)還有r讀取囚巴、a附加原在、r+讀寫(xiě)友扰;
    • a附加:將內(nèi)容附加到文件末尾,而不是覆蓋文件原來(lái)的內(nèi)容庶柿;
    • w寫(xiě)入模式打開(kāi)文件需要小心村怪,如果指定文件名已存在,Python將在返回對(duì)象前清空文件浮庐;
    • Python只能將字符串寫(xiě)入文本文件甚负;

10. 異常

  • 使用 try-except 處理異常:

    try:
      print(5/0)
    except ZeroDivisionError:
      print('捕獲到ZeroDivisionError異常')
    else:
      print('未捕獲異常')
    finally:
      print('無(wú)論是否有異常都會(huì)執(zhí)行')
    
    • 可在except的縮進(jìn)塊里添加關(guān)鍵字pass跳過(guò)錯(cuò)誤捕獲;
    • 其中审残,elsefinally部分的代碼塊可仕笥颉;

11. 測(cè)試

  • 使用Python標(biāo)準(zhǔn)庫(kù)中的模塊unittest進(jìn)行測(cè)試搅轿;

  • 一個(gè)簡(jiǎn)單的測(cè)試示例:

    import unittest
    from model_name import function_name
    
    class TestCase(unittest.TestCase):
      """測(cè)試函數(shù)function_name"""
    
      def setUp(self):
          """構(gòu)建前置條件"""
    
      def test_function(self):
          run_result = function_name(parameter)
          self.assertEqual(run_result, correct_result)
    
    unittest.main()
    
    • 首先導(dǎo)入模塊unittest和被測(cè)試方法function_name病涨;
    • 然后創(chuàng)建TestCase類(lèi),其包含各種具體的單元測(cè)試方法介时。該類(lèi)繼承unittest.TestCase類(lèi)没宾;
    • setUp()方法的作用是創(chuàng)建前置條件;
    • 編寫(xiě)測(cè)試方法test_function沸柔,方法名必須以test_打頭循衰;
    • 使用斷言assertEqual()判斷函數(shù)執(zhí)行結(jié)果與預(yù)期結(jié)果的差別;
    • unittest.main()讓Python運(yùn)行這個(gè)文件中的測(cè)試褐澎;
  • unittest里常用的6個(gè)斷言方法請(qǐng)見(jiàn)会钝;

  • 每完成一個(gè)測(cè)試,Python都會(huì)打印一個(gè)字符:

    • 測(cè)試通過(guò)打印句點(diǎn) .工三;
    • 測(cè)試引發(fā)錯(cuò)誤打印一個(gè) E迁酸;
    • 測(cè)試導(dǎo)致斷言失敗打印一個(gè) F
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俭正,一起剝皮案震驚了整個(gè)濱河市奸鬓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掸读,老刑警劉巖串远,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異儿惫,居然都是意外死亡澡罚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)肾请,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)留搔,“玉大人,你說(shuō)我怎么就攤上這事铛铁「粝裕” “怎么了却妨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)荣月。 經(jīng)常有香客問(wèn)我管呵,道長(zhǎng),這世上最難降的妖魔是什么哺窄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任捐下,我火速辦了婚禮,結(jié)果婚禮上萌业,老公的妹妹穿的比我還像新娘坷襟。我一直安慰自己,他們只是感情好生年,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布婴程。 她就那樣靜靜地躺著,像睡著了一般抱婉。 火紅的嫁衣襯著肌膚如雪档叔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天蒸绩,我揣著相機(jī)與錄音衙四,去河邊找鬼。 笑死患亿,一個(gè)胖子當(dāng)著我的面吹牛传蹈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播步藕,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惦界,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咙冗?” 一聲冷哼從身側(cè)響起沾歪,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雾消,沒(méi)想到半個(gè)月后瞬逊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仪或,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了士骤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片范删。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拷肌,靈堂內(nèi)的尸體忽然破棺而出到旦,到底是詐尸還是另有隱情旨巷,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布添忘,位于F島的核電站采呐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搁骑。R本人自食惡果不足惜斧吐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仲器。 院中可真熱鬧煤率,春花似錦、人聲如沸乏冀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辆沦。三九已至昼捍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肢扯,已是汗流浹背妒茬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹃彻,地道東北人郊闯。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛛株,于是被迫代替她去往敵國(guó)和親团赁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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