python基礎(chǔ)補(bǔ)習(xí)

  1. python是一門(mén)解釋型語(yǔ)言

  2. 控制臺(tái)輸出語(yǔ)句print("hello python")

  3. $ sudo apt install ipython 安裝比較好用的python命令行工具

  4. Python 的 IDE —— PyCharm

  5. 注釋

  6. # 這是第一個(gè)單行注釋
    """
    這是一個(gè)多行注釋
    在多行注釋之間,可以寫(xiě)很多很多的內(nèi)容……
    """ 
    
  7. 特殊算數(shù)運(yùn)算符

    // 取整除 返回除法的整數(shù)部分(商) 9 // 2 輸出結(jié)果 4
    ** 又稱次方、乘方,2 ** 3 = 8
  8. * 運(yùn)算符還可以用于字符串,計(jì)算結(jié)果就是字符串重復(fù)指定次數(shù)的結(jié)果

    In [1]: "-" * 50
    Out[1]: '----------------------------------------' 
    

    數(shù)字型變量 和 字符串 之間 不能進(jìn)行其他計(jì)算

  9. type(x) 查看 x 的變量類型

  10. 鍵盤(pán)輸入

    字符串變量 = input("提示信息:")
    
  11. 格式化字符

    print("我的名字叫 %s,請(qǐng)多多關(guān)照!" % name)
    print("我的學(xué)號(hào)是 %06d" % student_no) # 000001
    print("蘋(píng)果單價(jià) %.02f 元/斤,購(gòu)買(mǎi) %.02f 斤,需要支付 %.02f 元" % (price, weight, money))
    print("數(shù)據(jù)比例是 %.02f%%" % (scale * 100))
    
  12. if else

    if 條件1:
        ……
    elif 條件2:
        ……
    else:
        ……
    
  13. and or not

    條件1 and 條件2
    條件1 or 條件2
    not 條件
    
  14. 定義函數(shù)的格式如下

    def 函數(shù)名():
        函數(shù)封裝的代碼
        ……
    
  15. pyc文件

    c是compiled的意思

瀏覽程序目錄會(huì)發(fā)現(xiàn)一個(gè) pycache 的目錄
目錄下會(huì)有類似 xxx.cpython-35.pyc 的文件,cpython-35 表示 Python 解釋器的版本
這個(gè) pyc 文件是由 Python 解釋器將 模塊的源碼 轉(zhuǎn)換為 字節(jié)碼
Python 這樣保存 字節(jié)碼 是作為一種啟動(dòng) 速度的優(yōu)化

  • Python 在解釋源程序時(shí)是分成兩個(gè)步驟的
    1. 首先處理源代碼,編譯 生成一個(gè)二進(jìn)制 字節(jié)碼
    2. 再對(duì) 字節(jié)碼 進(jìn)行處理,才會(huì)生成 CPU 能夠識(shí)別的 機(jī)器碼
  • 有了模塊的字節(jié)碼文件之后,下一次運(yùn)行程序時(shí),如果在 上次保存字節(jié)碼之后 沒(méi)有修改過(guò)源代碼,Python 將會(huì)加載 .pyc 文件并跳過(guò)編譯這個(gè)步驟
  • 當(dāng) Python 重編譯時(shí),它會(huì)自動(dòng)檢查源文件和字節(jié)碼文件的時(shí)間戳
  • 如果你又修改了源代碼,下次程序運(yùn)行時(shí),字節(jié)碼將自動(dòng)重新創(chuàng)建
  1. 在 Python 中,所有 非數(shù)字型變量 都支持以下特點(diǎn):

    • 都是一個(gè) 序列 sequence,也可以理解為 容器
    • 取值[]
    • 遍歷 for in
    • 計(jì)算長(zhǎng)度、最大 / 最小值、比較、刪除
    • 鏈接+ 和 重復(fù)*
    • 切片
  2. 列表 其他語(yǔ)言經(jīng)常叫數(shù)組

    name_list = ["zhangsan", "lisi", "wangwu"]
    
  3. 列表常用操作

    序號(hào) 分類 關(guān)鍵字 / 函數(shù) / 方法 說(shuō)明
    1 增加 列表.insert (索引,數(shù)據(jù)) 在指定位置插入數(shù)據(jù)
    列表.append (數(shù)據(jù)) 在末尾追加數(shù)據(jù)
    列表.extend (列表 2) 將列表 2 的數(shù)據(jù)追加到列表
    2 修改 列表 [索引] = 數(shù)據(jù) 修改指定索引的數(shù)據(jù)
    3 刪除 del 列表 [索引] 刪除指定索引的數(shù)據(jù)
    列表.remove [數(shù)據(jù)] 刪除第一個(gè)出現(xiàn)的指定數(shù)據(jù)
    列表.pop 刪除末尾數(shù)據(jù)
    列表.pop (索引) 刪除指定索引數(shù)據(jù)
    列表.clear 清空列表
    4 統(tǒng)計(jì) len (列表) 列表長(zhǎng)度
    列表.count (數(shù)據(jù)) 數(shù)據(jù)在列表中出現(xiàn)的次數(shù)
    5 排序 列表.sort () 升序排序
    列表.sort (reverse=True) 降序排序
    列表.reverse () 逆序、反轉(zhuǎn)

    【注】如果使用 del 關(guān)鍵字將變量從內(nèi)存中刪除,后續(xù)的代碼就不能再使用這個(gè)變量了

  4. Tuple(元組)與列表類似,不同之處在于元組的 元素不能修改

    info_tuple = ("zhangsan", 18, 1.75)
    # 元組中 只包含一個(gè)元素 時(shí),需要 在元素后面添加逗號(hào)
    info_tuple = (50, )
    # 數(shù)據(jù)在元祖中出現(xiàn)的次數(shù)
    info_tuple.count(數(shù)據(jù))
    # 數(shù)據(jù)第一次出現(xiàn)的索引
    info_tuple.index(數(shù)據(jù))
    
  5. 元組和列表之間的轉(zhuǎn)換

    list(元組) 
    tuple(列表)
    
  6. 字典

    字典[key] key不存在會(huì)報(bào)錯(cuò)
    del 字典[key] key不存在會(huì)報(bào)錯(cuò)
    字典.pop(key) key不存在會(huì)報(bào)錯(cuò)
    字典.setdefault(key, value) key不存在添加key value,key存在不做操作           
    字典.clear       字典.items 所有(key,value)元組列表      字典.setdefault
    字典.copy        字典.keys        字典.update(字典2) 字典2的數(shù)據(jù)合并到字典
    字典.fromkeys    字典.pop         字典.values
    字典.get         字典.popitem    
    
  7. 字符串截取(列表和元組同理)

    num_str = "0123456789"
    # 1. 截取從 2 ~ 5 位置 的字符串
    print(num_str[2:6])
    # 2. 截取從 2 ~ `末尾` 的字符串
    print(num_str[2:])
    # 3. 截取從 `開(kāi)始` ~ 5 位置 的字符串
    print(num_str[:6])
    # 4. 截取完整的字符串
    print(num_str[:])
    # 5. 從開(kāi)始位置,每隔一個(gè)字符截取字符串
    print(num_str[::2])
    # 6. 從索引 1 開(kāi)始,每隔一個(gè)取一個(gè)
    print(num_str[1::2])
    # 倒序切片
    # -1 表示倒數(shù)第一個(gè)字符
    print(num_str[-1])
    # 7. 截取從 2 ~ `末尾 - 1` 的字符串
    print(num_str[2:-1])
    # 8. 截取字符串末尾兩個(gè)字符
    print(num_str[-2:])
    # 9. 字符串的逆序(面試題)
    print(num_str[::-1])
    
  8. 容器運(yùn)算符

    運(yùn)算符 Python 表達(dá)式 結(jié)果 描述 支持的數(shù)據(jù)類型
    + [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串、列表、元組
    * ["Hi!"] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重復(fù) 字符串、列表、元組
    in 3 in (1, 2, 3) True 元素是否存在 字符串、列表、元組、字典
    not in 4 not in (1, 2, 3) True 元素是否不存在 字符串、列表、元組、字典
    > >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比較 字符串、列表、元組
  9. for else語(yǔ)法對(duì),真是很費(fèi)解干什么用

    for 變量 in 集合: 
        循環(huán)體代碼
    else:
        沒(méi)有通過(guò) break 退出循環(huán),循環(huán)結(jié)束后,會(huì)執(zhí)行的代碼
    
  10. pass 是空語(yǔ)句,占位用

  11. LINUX 上的 Shebang 符號(hào) (#!)

    #! 這個(gè)符號(hào)叫做 Shebang 或者 Sha-bang
    Shebang 通常在 Unix 系統(tǒng)腳本的中 第一行開(kāi)頭 使用
    指明 執(zhí)行這個(gè)腳本文件 的 解釋程序
    比如在一個(gè).py文件的第一行加入#! /usr/bin/python3, 就可以直接在shell中敲入這個(gè)文件的路徑,就會(huì)用python3解釋運(yùn)行
    
  12. 哈希 (hash)

    • Python 中內(nèi)置有一個(gè)名字叫做 hash(o) 的函數(shù)
      • 接收一個(gè) 不可變類型 的數(shù)據(jù)作為 參數(shù)
      • 返回 結(jié)果是一個(gè) 整數(shù)
    • 哈希 是一種 算法,其作用就是提取數(shù)據(jù)的 特征碼(指紋)
      • 相同的內(nèi)容 得到 相同的結(jié)果
      • 不同的內(nèi)容 得到 不同的結(jié)果
    • Python 中,設(shè)置字典的 鍵值對(duì) 時(shí),會(huì)首先對(duì) key 進(jìn)行 hash 已決定如何在內(nèi)存中保存字典的數(shù)據(jù),以方便 后續(xù) 對(duì)字典的操作:增、刪、改、查
      • 鍵值對(duì)的 key 必須是不可變類型數(shù)據(jù)
      • 鍵值對(duì)的 value 可以是任意類型的數(shù)據(jù)
  13. 函數(shù)不能直接修改 全局變量的引用

  14. 函數(shù)不能直接修改 全局變量的值

    num = 10
    def demo1():
        # global 關(guān)鍵字,告訴 Python 解釋器 num 是一個(gè)全局變量
        global num
        num = 100 # 如果沒(méi)有上面的global num 這里只會(huì)定義一個(gè)局部變量
        print(num)
    
  15. 調(diào)用函數(shù)時(shí),如果有 多個(gè)缺省參數(shù),需要指定參數(shù)名,這樣解釋器才能夠知道參數(shù)的對(duì)應(yīng)關(guān)系!

```python
def print_info(name, title="", gender=True):
    ...
print_info("小明")
print_info("老王", title="班長(zhǎng)")
print_info("小美", gender=False)
```
  1. 有時(shí)可能需要 一個(gè)函數(shù) 能夠處理的參數(shù) 個(gè)數(shù) 是不確定的,這個(gè)時(shí)候,就可以使用 多值參數(shù)

    python 中有 兩種 多值參數(shù):

    • 參數(shù)名前增加 一個(gè) * 可以接收 元組
    • 參數(shù)名前增加 兩個(gè) * 可以接收 字典

    一般在給多值參數(shù)命名時(shí),習(xí)慣使用以下兩個(gè)名字

    • *args —— 存放 元組 參數(shù),前面有一個(gè) *
    • **kwargs —— 存放 字典 參數(shù),前面有兩個(gè) *

    argsarguments 的縮寫(xiě),有變量的含義

    kwkeyword 的縮寫(xiě),kwargs 可以記憶 鍵值對(duì)參數(shù)

def demo(num, *args, **kwargs):
    print(num)
    print(args)
    print(kwargs)
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
""""
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'gender': True}
""""
  1. 元組和字典的拆包

    在調(diào)用帶有多值參數(shù)的函數(shù)時(shí),如果希望:

    • 將一個(gè) 元組變量,直接傳遞給 args
    • 將一個(gè) 字典變量,直接傳遞給 kwargs

    就可以使用 拆包,簡(jiǎn)化參數(shù)的傳遞,拆包 的方式是:

    • 元組變量前,增加 一個(gè) *
    • 字典變量前,增加 兩個(gè) *
demo(*tuple, **dic)
  1. 使用內(nèi)置函數(shù) dir 傳入 標(biāo)識(shí)符 / 數(shù)據(jù),可以查看對(duì)象內(nèi)的 所有屬性及方法

  2. 類的定義

    class Cat:
        def __init__(self):
            print("這是一個(gè)初始化方法")
            # 定義用 Cat 類創(chuàng)建的貓對(duì)象都有一個(gè) name 的屬性
            self.name = "Tom"
        def eat(self):
            print("%s 愛(ài)吃魚(yú)" % self.name)
    # 使用類名()創(chuàng)建對(duì)象的時(shí)候,會(huì)自動(dòng)調(diào)用初始化方法 __init__
    tom = Cat()
    tom.eat()
    
  3. 在類封裝的方法內(nèi)部,self 就表示 當(dāng)前調(diào)用方法的對(duì)象自己 在調(diào)用方法時(shí)不用穿self這個(gè)參數(shù)

  4. 內(nèi)置方法和屬性

    序號(hào) 方法名 類型 作用
    01 __del__ 方法 對(duì)象被從內(nèi)存中銷毀前,會(huì)被 自動(dòng) 調(diào)用
    02 __str__ 方法 返回對(duì)象的描述信息,print 函數(shù)輸出使用
  5. 身份運(yùn)算符

    運(yùn)算符 描述 實(shí)例
    is is 是判斷兩個(gè)標(biāo)識(shí)符是不是引用同一個(gè)對(duì)象 x is y,類似 id (x) == id (y)
    is not is not 是判斷兩個(gè)標(biāo)識(shí)符是不是引用不同對(duì)象 x is not y,類似 id (a) != id (b)

    Python 中針對(duì) None 比較時(shí),建議使用 is 判斷

  6. 定義屬性或方法時(shí),在 屬性名或者方法名前 增加 兩個(gè)下劃線,定義的就是 私有 屬性或方法

  7. Python 中,并沒(méi)有 真正意義私有 。在給 屬性、方法 命名時(shí),實(shí)際是對(duì) 名稱 做了一些特殊處理,使得外界無(wú)法訪問(wèn)到

  8. 使用 類名 () 創(chuàng)建對(duì)象時(shí),Python 的解釋器 首先 會(huì) 調(diào)用 __new__ 方法為對(duì)象 分配空間。重寫(xiě) new 方法 一定要 return super().new(cls)

    # 單例模式
    class MusicPlayer(object):
        # 定義類屬性記錄單例對(duì)象引用
        instance = None
        def __new__(cls, *args, **kwargs):
            # 1. 判斷類屬性是否已經(jīng)被賦值
            if cls.instance is None:
                cls.instance = super().__new__(cls)
            # 2. 返回類屬性的單例引用
            return cls.instance
    
  9. 如果想讓__init__方法也執(zhí)行一次需要添加個(gè)類變量init_flag

  10. 實(shí)例方法、類方法和靜態(tài)方法

    • 實(shí)例方法第一個(gè)參數(shù)是self
    • 類方法使用@classmethod修飾符
    • 靜態(tài)方法使用裝飾器@staticmethod。 既可以使用類也可以使用實(shí)例來(lái)調(diào)用靜態(tài)方法
  11. 繼承class Child(Parent):

  12. super().父類方法調(diào)用父類方法

  13. 多繼承繼承``class Child(Father, Mother):

  14. Python屬性的獲取 存在一個(gè) 向上查找機(jī)制。首先在對(duì)象內(nèi)部屬性中查找,如果沒(méi)有再查找類屬性

  15. 模塊是 Python 程序架構(gòu)的一個(gè)核心概念。每一個(gè)以擴(kuò)展名 py 結(jié)尾的 Python 源代碼文件都是一個(gè) 模塊

  16. 模塊導(dǎo)入

    import 模塊名1, 模塊名2 
    import 模塊名1
    import 模塊名2 
    import 模塊名1 as 模塊別名
    from 模塊名1 import 工具名(全局變量、函數(shù)、類)
    from 模塊名1 import * #從模塊導(dǎo)入所有工具。這種方式不推薦,因?yàn)楹瘮?shù)重名并沒(méi)有任何的提示,出現(xiàn)問(wèn)題不好排查
    
  17. 如果 兩個(gè)模塊,存在 同名的函數(shù),那么 后導(dǎo)入模塊的函數(shù),會(huì) 覆蓋掉先導(dǎo)入的函數(shù)

  18. Python 中每一個(gè)模塊都有一個(gè)內(nèi)置屬性 __file__ 可以 查看模塊完整路徑

  19. __name__ 屬性可以做到,測(cè)試模塊的代碼 只在測(cè)試情況下被運(yùn)行,而在 被導(dǎo)入時(shí)不會(huì)被執(zhí)行!便于單文件測(cè)試

    • 如果 是被其他文件導(dǎo)入的__name__ 就是 模塊名
    • 如果 是當(dāng)前執(zhí)行的程序 __name__main
    # 導(dǎo)入模塊
    # 定義全局變量
    # 定義類
    # 定義函數(shù)
    
    # 在代碼的最下方
    def main():
        # ...
        pass
    # 根據(jù) __name__ 判斷是否執(zhí)行下方代碼。
    if __name__ == "__main__":
        main()
    
  20. 可以在目錄下創(chuàng)建__init__.py。import 包名,就可以導(dǎo)入里邊所有模塊

    # 從 當(dāng)前目錄 導(dǎo)入 模塊列表
    from . import send_message
    from . import receive_message
    
  21. 如果希望自己開(kāi)發(fā)的模塊,分享 給其他人,可以按照以下步驟操作

    • 制作發(fā)布?jí)嚎s包步驟
    1. 創(chuàng)建 setup.py
    from distutils.core import setup
    setup(name="hm_message",  # 包名
          version="1.0",  # 版本
          description="itheima's 發(fā)送和接收消息模塊",  # 描述信息
          long_description="完整的發(fā)送和接收消息模塊",  # 完整描述信息
          author="itheima",  # 作者
          author_email="itheima@itheima.com",  # 作者郵箱
          url="www.itheima.com",  # 主頁(yè)
          py_modules=["hm_message.send_message",
                      "hm_message.receive_message"])
    

    有關(guān)字典參數(shù)的詳細(xì)信息,可以參閱官方網(wǎng)站:

    https://docs.python.org/2/distutils/apiref.html

    1. 構(gòu)建模塊
    $ python3 setup.py build
    
    1. 生成發(fā)布?jí)嚎s包
    $ python3 setup.py sdist
    

    注意:要制作哪個(gè)版本的模塊,就使用哪個(gè)版本的解釋器執(zhí)行!

* 安裝模塊

```bash
$ tar -zxvf hm_message-1.0.tar.gz 
$ sudo python3 setup.py install
```

* 卸載模塊

直接從安裝目錄下,把安裝模塊的 **目錄** 刪除就可以

```bash
$ cd /usr/local/lib/python3.5/dist-packages/
$ sudo rm -r hm_message*
```
  1. pip 安裝/卸載第三方模塊

    # 將模塊安裝到 Python 2.x 環(huán)境
    $ sudo pip install pygame
    $ sudo pip uninstall pygame
    
    # 將模塊安裝到 Python 3.x 環(huán)境
    $ sudo pip3 install pygame
    $ sudo pip3 uninstall pygame
    
  2. 捕獲異常

    try:
        num = int(input("請(qǐng)輸入整數(shù):"))
        result = 8 / num
        print(result)
    except ValueError:
        print("請(qǐng)輸入正確的整數(shù)")
    except ZeroDivisionError:
        print("除 0 錯(cuò)誤")
    except Exception as result:
        print("未知錯(cuò)誤 %s" % result)
    else:
        # 沒(méi)有異常才會(huì)執(zhí)行的代碼
        pass
    finally:
        # 無(wú)論是否有異常,都會(huì)執(zhí)行的代碼
        print("無(wú)論是否有異常,都會(huì)執(zhí)行的代碼")
    
  3. 異常的傳遞 —— 當(dāng) 函數(shù) / 方法 執(zhí)行 出現(xiàn)異常,會(huì) 將異常傳遞 給 函數(shù) / 方法 的 調(diào)用一方

    如果 傳遞到主程序,仍然 沒(méi)有異常處理,程序才會(huì)被終止

  4. 手動(dòng)拋出異常

    ex = Exception("密碼長(zhǎng)度不夠")
    raise ex
    
  5. eval() —— 將字符串 當(dāng)成 有效的表達(dá)式 來(lái)求值 并 返回計(jì)算結(jié)果

  6. 在開(kāi)發(fā)時(shí)千萬(wàn)不要使用 eval 直接轉(zhuǎn)換用戶 input 的結(jié)果

  7. 使用import導(dǎo)入Python模塊的時(shí)候,默認(rèn)調(diào)用的是__import__()函數(shù)。直接使用該函數(shù)的情況很少見(jiàn),一般用于動(dòng)態(tài)加載模塊。

    __import__(name, globals, locals, fromlist, level)只有name是必選參數(shù),其他都是可選參數(shù),一般情況下直接使用name參數(shù)即可。

  8. viVisual interface 的簡(jiǎn)稱,是 Linux最經(jīng)典 的文本編輯器

    vi 的核心設(shè)計(jì)思想 —— 讓程序員的手指始終保持在鍵盤(pán)的核心區(qū)域,就能完成所有的編輯操作

  9. vim = vi improved

    vim 是從 vi 發(fā)展出來(lái)的一個(gè)文本編輯器,支持 代碼補(bǔ)全、編譯錯(cuò)誤跳轉(zhuǎn) 等方便編程的功能特別豐富,在程序員中被廣泛使用

  10. 如果vi是軟連接,通過(guò)命令 ls -l 最后一列就是軟連接的原始地址

    $ which vi
    $ ls -l /usr/bin/vi
    
  11. 打開(kāi)文件并定位到行

    $ vi 文件名 +行數(shù)
    # 如果只帶上 + 而不指定行號(hào),會(huì)直接定位到文件末尾
    
  12. vim常用快捷鍵 https://www.zrahh.com/archives/260.html

  13. shell 俗稱殼,c 語(yǔ)言編寫(xiě)的命令解析器程序,是用戶使用 linux 的橋梁。Linux/Unix 提供了很多種 Shell。常用的 shell 有這么幾種,sh、bash、csh 等??梢酝ㄟ^(guò)以下命令,查看系統(tǒng)有幾種 shell:

    $ cat /etc/shells
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫(xiě)在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,222評(píng)論 0 9
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,338評(píng)論 0 10
  • 5Python集合容器 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 一般將數(shù)據(jù)結(jié)構(gòu)分為兩大類: 線性數(shù)據(jù)結(jié)構(gòu)和非線性數(shù)據(jù)結(jié)構(gòu)。 線性數(shù)據(jù)結(jié)構(gòu)...
    清清子衿木子水心閱讀 1,727評(píng)論 0 1
  • Python史上最全開(kāi)發(fā)總結(jié)(轉(zhuǎn)自靜熙老師哈哈哈) 兩本不錯(cuò)的書(shū): 《Python參考手冊(cè)》:對(duì)Python各個(gè)標(biāo)...
    春風(fēng)在抱閱讀 853評(píng)論 1 4
  • evernote 在時(shí)間管理里,可以把這個(gè)作為一個(gè)需要記錄的,可能要分享的,收藏靈感與想法的個(gè)人數(shù)據(jù)庫(kù)。 合適場(chǎng)景...
    木頭在燃燒閱讀 672評(píng)論 0 0

友情鏈接更多精彩內(nèi)容