Python3 模塊

在前面的幾個章節(jié)中我們腳本上是用 python 解釋器來編程培遵,如果你從 Python 解釋器退出再進入,那么你定義的所有的方法和變量就都消失了。

為此 Python 提供了一個辦法,把這些定義存放在文件中,為一些腳本或者交互式的解釋器實例使用楣富,這個文件被稱為模塊。

模塊是一個包含所有你定義的函數(shù)和變量的文件伴榔,其后綴名是.py菩彬。模塊可以被別的程序引入,以使用該模塊中的函數(shù)等功能潮梯。這也是使用 python 標準庫的方法骗灶。

下面是一個使用 python 標準庫中模塊的例子。

實例(Python 3.0+)

#!/usr/bin/python3# 文件名: using_sys.pyimportsysprint('命令行參數(shù)如下:')foriin?sys.argv:? ? print(i)print('\n\nPython?路徑為:',?sys.path,'\n')

執(zhí)行結果如下所示:

$ python using_sys.py 參數(shù)1參數(shù)2命令行參數(shù)如下:using_sys.py參數(shù)1參數(shù)2Python 路徑為: ['/root','/usr/lib/python3.4','/usr/lib/python3.4/plat-x86_64-linux-gnu','/usr/lib/python3.4/lib-dynload','/usr/local/lib/python3.4/dist-packages','/usr/lib/python3/dist-packages']

import sys 引入 python 標準庫中的 sys.py 模塊秉馏;這是引入某一模塊的方法耙旦。

sys.argv 是一個包含命令行參數(shù)的列表。

sys.path 包含了一個 Python 解釋器自動查找所需模塊的路徑的列表萝究。

import 語句

想使用 Python 源文件免都,只需在另一個源文件里執(zhí)行 import 語句,語法如下:

importmodule1[, module2[,... moduleN]

當解釋器遇到 import 語句帆竹,如果模塊在當前的搜索路徑就會被導入绕娘。

搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。如想要導入模塊 support栽连,需要把命令放在腳本的頂端:

support.py 文件代碼

#!/usr/bin/python3# Filename: support.pydefprint_func(?par?):print("Hello?:?",?par)return

test.py 引入 support 模塊:

test.py 文件代碼

#!/usr/bin/python3# Filename: test.py#?導入模塊import?support#?現(xiàn)在可以調用模塊里包含的函數(shù)了support.print_func("Runoob")

以上實例輸出結果:

$ python3 test.py Hello :? Runoob

一個模塊只會被導入一次险领,不管你執(zhí)行了多少次import。這樣可以防止導入模塊被一遍又一遍地執(zhí)行秒紧。

當我們使用import語句的時候绢陌,Python解釋器是怎樣找到對應的文件的呢?

這就涉及到Python的搜索路徑熔恢,搜索路徑是由一系列目錄名組成的脐湾,Python解釋器就依次從這些目錄中去尋找所引入的模塊。

這看起來很像環(huán)境變量叙淌,事實上秤掌,也可以通過定義環(huán)境變量的方式來確定搜索路徑愁铺。

搜索路徑是在Python編譯或安裝的時候確定的,安裝新的庫應該也會修改闻鉴。搜索路徑被存儲在sys模塊中的path變量帜讲,做一個簡單的實驗,在交互式解釋器中椒拗,輸入以下代碼:

>>> import sys>>> sys.path['','/usr/lib/python3.4','/usr/lib/python3.4/plat-x86_64-linux-gnu','/usr/lib/python3.4/lib-dynload','/usr/local/lib/python3.4/dist-packages','/usr/lib/python3/dist-packages']>>>

sys.path 輸出是一個列表,其中第一項是空串''获黔,代表當前目錄(若是從一個腳本中打印出來的話蚀苛,可以更清楚地看出是哪個目錄),亦即我們執(zhí)行python解釋器的目錄(對于腳本的話就是運行的腳本所在的目錄)玷氏。

因此若像我一樣在當前目錄下存在與要引入模塊同名的文件堵未,就會把要引入的模塊屏蔽掉。

了解了搜索路徑的概念盏触,就可以在腳本中修改sys.path來引入一些不在搜索路徑中的模塊渗蟹。

現(xiàn)在,在解釋器的當前目錄或者 sys.path 中的一個目錄里面來創(chuàng)建一個fibo.py的文件赞辩,代碼如下:

實例

#?斐波那契(fibonacci)數(shù)列模塊deffib(n):# 定義到 n 的斐波那契數(shù)列? ? a,?b?=0,1whileb < n:print(b,?end=' ')? ? ? ? a, b = b, a+b? ? print()? ? deffib2(n):# 返回到 n 的斐波那契數(shù)列? ? ? ? result?=?[]???a,?b?=0,1whileb < n:? ? ? ? result.append(b)? ? ? ? a,?b?=?b,?a+b????returnresult

然后進入Python解釋器雌芽,使用下面的命令導入這個模塊:

>>> importfibo

這樣做并沒有把直接定義在fibo中的函數(shù)名稱寫入到當前符號表里,只是把模塊fibo的名字寫到了那里辨嗽。

可以使用模塊名稱來訪問函數(shù):

實例

>>>fibo.fib(1000)1123581321345589144233377610987>>> fibo.fib2(100)[1,1,2,3,5,8,13,21,34,55,89]>>> fibo.__name__'fibo'

如果你打算經常使用一個函數(shù)世落,你可以把它賦給一個本地的名稱:

>>> fib = fibo.fib>>> fib(500)1123581321345589144233377

from … import 語句

Python 的 from 語句讓你從模塊中導入一個指定的部分到當前命名空間中,語法如下:

frommodnameimportname1[, name2[, ... nameN]]

例如糟需,要導入模塊 fibo 的 fib 函數(shù)屉佳,使用如下語句:

>>> fromfiboimportfib, fib2>>> fib(500)1123581321345589144233377

這個聲明不會把整個fibo模塊導入到當前的命名空間中,它只會將fibo里的fib函數(shù)引入進來洲押。

from … import * 語句

把一個模塊的所有內容全都導入到當前的命名空間也是可行的武花,只需使用如下聲明:

frommodnameimport*

這提供了一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用杈帐。

深入模塊

模塊除了方法定義体箕,還可以包括可執(zhí)行的代碼。這些代碼一般用來初始化這個模塊挑童。這些代碼只有在第一次被導入時才會被執(zhí)行干旁。

每個模塊有各自獨立的符號表,在模塊內部為所有的函數(shù)當作全局符號表來使用炮沐。

所以争群,模塊的作者可以放心大膽的在模塊內部使用這些全局變量,而不用擔心把其他用戶的全局變量搞花大年。

從另一個方面换薄,當你確實知道你在做什么的話玉雾,你也可以通過 modname.itemname 這樣的表示法來訪問模塊內的函數(shù)。

模塊是可以導入其他模塊的轻要。在一個模塊(或者腳本复旬,或者其他地方)的最前面使用 import 來導入一個模塊,當然這只是一個慣例冲泥,而不是強制的驹碍。被導入的模塊的名稱將被放入當前操作的模塊的符號表中。

還有一種導入的方法凡恍,可以使用 import 直接把模塊內(函數(shù)志秃,變量的)名稱導入到當前操作模塊。比如:

>>> fromfiboimportfib, fib2>>> fib(500)1123581321345589144233377

這種導入的方法不會把被導入的模塊的名稱放在當前的字符表中(所以在這個例子里面嚼酝,fibo 這個名稱是沒有定義的)浮还。

這還有一種方法,可以一次性的把模塊中的所有(函數(shù)闽巩,變量)名稱都導入到當前模塊的字符表:

>>> fromfiboimport*>>> fib(500)1123581321345589144233377

這將把所有的名字都導入進來钧舌,但是那些由單一下劃線(_)開頭的名字不在此例。大多數(shù)情況涎跨, Python程序員不使用這種方法洼冻,因為引入的其它來源的命名,很可能覆蓋了已有的定義隅很。

__name__屬性

一個模塊被另一個程序第一次引入時碘赖,其主程序將運行。如果我們想在模塊被引入時外构,模塊中的某一程序塊不執(zhí)行普泡,我們可以用__name__屬性來使該程序塊僅在該模塊自身運行時執(zhí)行。

#!/usr/bin/python3# Filename: using_name.pyif__name__ =='__main__':print('程序自身在運行')else:print('我來自另一模塊')

運行輸出如下:

$ python using_name.py程序自身在運行

$ python>>> import using_name我來自另一模塊>>>

說明:每個模塊都有一個__name__屬性审编,當其值是'__main__'時撼班,表明該模塊自身在運行,否則是被引入垒酬。

說明:__name____main__底下是雙下劃線砰嘁,_ _是這樣去掉中間的那個空格。

dir() 函數(shù)

內置的函數(shù) dir() 可以找到模塊內定義的所有名稱勘究。以一個字符串列表的形式返回:

>>> import fibo, sys>>> dir(fibo)['__name__','fib','fib2']>>> dir(sys)['__displayhook__','__doc__','__excepthook__','__loader__','__name__','__package__','__stderr__','__stdin__','__stdout__','_clear_type_cache','_current_frames','_debugmallocstats','_getframe','_home','_mercurial','_xoptions','abiflags','api_version','argv','base_exec_prefix','base_prefix','builtin_module_names','byteorder','call_tracing','callstats','copyright','displayhook','dont_write_bytecode','exc_info','excepthook','exec_prefix','executable','exit','flags','float_info','float_repr_style','getcheckinterval','getdefaultencoding','getdlopenflags','getfilesystemencoding','getobjects','getprofile','getrecursionlimit','getrefcount','getsizeof','getswitchinterval','gettotalrefcount','gettrace','hash_info','hexversion','implementation','int_info','intern','maxsize','maxunicode','meta_path','modules','path','path_hooks','path_importer_cache','platform','prefix','ps1','setcheckinterval','setdlopenflags','setprofile','setrecursionlimit','setswitchinterval','settrace','stderr','stdin','stdout','thread_info','version','version_info','warnoptions']

如果沒有給定參數(shù)矮湘,那么 dir() 函數(shù)會羅列出當前定義的所有名稱:

>>> a = [1,2,3,4,5]>>>importfibo>>> fib = fibo.fib>>> dir() # 得到一個當前模塊中定義的屬性列表['__builtins__','__name__','a','fib','fibo','sys']>>> a =5# 建立一個新的變量'a'>>> dir()['__builtins__','__doc__','__name__','a','sys']>>>>>> del a # 刪除變量名a>>>>>> dir()['__builtins__','__doc__','__name__','sys']>>>

標準模塊

Python 本身帶著一些標準的模塊庫,在 Python 庫參考文檔中將會介紹到(就是后面的"庫參考文檔")口糕。

有些模塊直接被構建在解析器里缅阳,這些雖然不是一些語言內置的功能,但是他卻能很高效的使用景描,甚至是系統(tǒng)級調用也沒問題十办。

這些組件會根據(jù)不同的操作系統(tǒng)進行不同形式的配置秀撇,比如 winreg 這個模塊就只會提供給 Windows 系統(tǒng)。

應該注意到這有一個特別的模塊 sys 向族,它內置在每一個 Python 解析器中呵燕。變量 sys.ps1 和 sys.ps2 定義了主提示符和副提示符所對應的字符串:

>>> import sys>>> sys.ps1'>>> '>>> sys.ps2'... '>>> sys.ps1 ='C> 'C> print('Runoob!')Runoob!C>

包是一種管理 Python 模塊命名空間的形式,采用"點模塊名稱"件相。

比如一個模塊的名稱是 A.B再扭, 那么他表示一個包 A中的子模塊 B 。

就好像使用模塊的時候夜矗,你不用擔心不同模塊之間的全局變量相互影響一樣泛范,采用點模塊名稱這種形式也不用擔心不同庫之間的模塊重名的情況。

這樣不同的作者都可以提供 NumPy 模塊侯养,或者是 Python 圖形庫。

不妨假設你想設計一套統(tǒng)一處理聲音文件和數(shù)據(jù)的模塊(或者稱之為一個"包")澄干。

現(xiàn)存很多種不同的音頻文件格式(基本上都是通過后綴名區(qū)分的逛揩,例如: .wav,:file:.aiff麸俘,:file:.au辩稽,),所以你需要有一組不斷增加的模塊从媚,用來在不同的格式之間轉換逞泄。

并且針對這些音頻數(shù)據(jù),還有很多不同的操作(比如混音拜效,添加回聲,增加均衡器功能,創(chuàng)建人造立體聲效果)岭参,所以你還需要一組怎么也寫不完的模塊來處理這些操作签夭。

這里給出了一種可能的包結構(在分層的文件系統(tǒng)中):

sound/? ? ? ? ? ? ? ? ? ? ? ? ? 頂層包? ? ? __init__.py? ? ? ? ? ? ? 初始化 sound 包? ? ? formats/? ? ? ? ? ? ? ? ? 文件格式轉換子包? ? ? ? ? ? ? __init__.py? ? ? ? ? ? ? wavread.py? ? ? ? ? ? ? wavwrite.py? ? ? ? ? ? ? aiffread.py? ? ? ? ? ? ? aiffwrite.py? ? ? ? ? ? ? auread.py? ? ? ? ? ? ? auwrite.py? ? ? ? ? ? ? ...? ? ? effects/? ? ? ? ? ? ? ? ? 聲音效果子包? ? ? ? ? ? ? __init__.pyecho.py? ? ? ? ? ? ? surround.py? ? ? ? ? ? ? reverse.py? ? ? ? ? ? ? ...? ? ? filters/? ? ? ? ? ? ? ? ? filters 子包? ? ? ? ? ? ? __init__.py? ? ? ? ? ? ? equalizer.py? ? ? ? ? ? ? vocoder.py? ? ? ? ? ? ? karaoke.py? ? ? ? ? ? ? ...

在導入一個包的時候,Python 會根據(jù) sys.path 中的目錄來尋找這個包中包含的子目錄赴穗。

目錄只有包含一個叫做 __init__.py 的文件才會被認作是一個包憔四,主要是為了避免一些濫俗的名字(比如叫做 string)不小心的影響搜索路徑中的有效模塊。

最簡單的情況般眉,放一個空的 :file:__init__.py就可以了了赵。當然這個文件中也可以包含一些初始化代碼或者為(將在后面介紹的) __all__變量賦值。

用戶可以每次只導入一個包里面的特定模塊甸赃,比如:

importsound.effects.echo

這將會導入子模塊:sound.effects.echo柿汛。 他必須使用全名去訪問:

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

還有一種導入子模塊的方法是:

fromsound.effectsimportecho

這同樣會導入子模塊: echo,并且他不需要那些冗長的前綴埠对,所以他可以這樣使用:

echo.echofilter(input, output, delay=0.7, atten=4)

還有一種變化就是直接導入一個函數(shù)或者變量:

fromsound.effects.echoimportechofilter

同樣的苛茂,這種方法會導入子模塊: echo已烤,并且可以直接使用他的 echofilter() 函數(shù):

echofilter(input, output, delay=0.7, atten=4)

注意當使用from package import item這種形式的時候,對應的item既可以是包里面的子模塊(子包)妓羊,或者包里面定義的其他名稱胯究,比如函數(shù),類或者變量躁绸。

import語法會首先把item當作一個包定義的名稱裕循,如果沒找到,再試圖按照一個模塊去導入净刮。如果還沒找到剥哑,恭喜,一個:exc:ImportError 異常被拋出了淹父。

反之株婴,如果使用形如import item.subitem.subsubitem這種導入形式,除了最后一項暑认,都必須是包困介,而最后一項則可以是模塊或者是包,但是不可以是類蘸际,函數(shù)或者變量的名字座哩。

從一個包中導入*

設想一下,如果我們使用 from sound.effects import *會發(fā)生什么粮彤?

Python 會進入文件系統(tǒng)根穷,找到這個包里面所有的子模塊,一個一個的把它們都導入進來导坟。

但是很不幸屿良,這個方法在 Windows平臺上工作的就不是非常好,因為Windows是一個大小寫不區(qū)分的系統(tǒng)惫周。

在這類平臺上管引,沒有人敢擔保一個叫做 ECHO.py 的文件導入為模塊 echo 還是 Echo 甚至 ECHO。

(例如闯两,Windows 95就很討厭的把每一個文件的首字母大寫顯示)而且 DOS 的 8+3 命名規(guī)則對長模塊名稱的處理會把問題搞得更糾結褥伴。

為了解決這個問題,只能煩勞包作者提供一個精確的包的索引了漾狼。

導入語句遵循如下規(guī)則:如果包定義文件 __init__.py 存在一個叫做 __all__ 的列表變量重慢,那么在使用 from package import * 的時候就把這個列表中的所有名字作為包內容導入。

作為包的作者逊躁,可別忘了在更新包之后保證 __all__ 也更新了啊似踱。你說我就不這么做,我就不使用導入*這種用法,好吧核芽,沒問題囚戚,誰讓你是老板呢。這里有一個例子轧简,在:file:sounds/effects/__init__.py中包含如下代碼:

__all__= ["echo","surround","reverse"]

這表示當你使用from sound.effects import *這種用法時驰坊,你只會導入包里面這三個子模塊。

如果__all__真的沒有定義哮独,那么使用from sound.effects import *這種語法的時候拳芙,就不會導入包 sound.effects 里的任何子模塊。他只是把包sound.effects和它里面定義的所有內容導入進來(可能運行__init__.py里定義的初始化代碼)皮璧。

這會把 __init__.py 里面定義的所有名字導入進來舟扎。并且他不會破壞掉我們在這句話之前導入的所有明確指定的模塊°参瘢看下這部分代碼:

importsound.effects.echoimportsound.effects.surroundfrom sound.effectsimport*

這個例子中睹限,在執(zhí)行from...import前,包sound.effects中的echo和surround模塊都被導入到當前的命名空間中了讯檐。(當然如果定義了__all__就更沒問題了)

通常我們并不主張使用*這種方法來導入模塊羡疗,因為這種方法經常會導致代碼的可讀性降低。不過這樣倒的確是可以省去不少敲鍵的功夫裂垦,而且一些模塊都設計成了只能通過特定的方法導入顺囊。

記住肌索,使用from Package import specific_submodule這種方法永遠不會有錯蕉拢。事實上,這也是推薦的方法诚亚。除非是你要導入的子模塊有可能和其他包的子模塊重名晕换。

如果在結構中包是一個子包(比如這個例子中對于包sound來說),而你又想導入兄弟包(同級別的包)你就得使用導入絕對的路徑來導入站宗。比如闸准,如果模塊sound.filters.vocoder 要使用包sound.effects中的模塊echo,你就要寫成 from sound.effects import echo梢灭。

from.importechofrom..importformatsfrom..filtersimportequalizer

無論是隱式的還是顯式的相對導入都是從當前模塊開始的夷家。主模塊的名字永遠是"__main__",一個Python應用程序的主模塊敏释,應當總是使用絕對路徑引用库快。

包還提供一個額外的屬性__path__。這是一個目錄列表钥顽,里面每一個包含的目錄都有為這個包服務的__init__.py义屏,你得在其他__init__.py被執(zhí)行前定義哦。可以修改這個變量闽铐,用來影響包含在包里面的模塊和子包蝶怔。

這個功能并不常用,一般用來擴展包里面的模塊兄墅。

好了踢星,本文就給大伙分享到這里,文末分享一波福利

獲取方式:加python群 839383765 即可獲炔斐佟斩狱!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扎瓶,隨后出現(xiàn)的幾起案子所踊,更是在濱河造成了極大的恐慌,老刑警劉巖概荷,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕岛,死亡現(xiàn)場離奇詭異,居然都是意外死亡误证,警方通過查閱死者的電腦和手機继薛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愈捅,“玉大人遏考,你說我怎么就攤上這事±督鳎” “怎么了灌具?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長譬巫。 經常有香客問我咖楣,道長,這世上最難降的妖魔是什么芦昔? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任诱贿,我火速辦了婚禮,結果婚禮上咕缎,老公的妹妹穿的比我還像新娘珠十。我一直安慰自己,他們只是感情好凭豪,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布焙蹭。 她就那樣靜靜地躺著,像睡著了一般墅诡。 火紅的嫁衣襯著肌膚如雪壳嚎。 梳的紋絲不亂的頭發(fā)上桐智,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音烟馅,去河邊找鬼说庭。 笑死,一個胖子當著我的面吹牛郑趁,可吹牛的內容都是我干的刊驴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寡润,長吁一口氣:“原來是場噩夢啊……” “哼捆憎!你這毒婦竟也來了?” 一聲冷哼從身側響起梭纹,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躲惰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后变抽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體础拨,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年绍载,在試婚紗的時候發(fā)現(xiàn)自己被綠了诡宗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡击儡,死狀恐怖塔沃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情阳谍,我是刑警寧澤蛀柴,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站边坤,受9級特大地震影響名扛,放射性物質發(fā)生泄漏谅年。R本人自食惡果不足惜茧痒,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望融蹂。 院中可真熱鬧旺订,春花似錦、人聲如沸超燃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽意乓。三九已至樱调,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笆凌。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工圣猎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乞而。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓送悔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爪模。 傳聞我的和親對象是個殘疾皇子欠啤,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 用 python 解釋器來編程從 Python 解釋器退出再進入,那么你定義的所有的方法和變量就都消失了屋灌。 為此...
    chen_000閱讀 523評論 0 3
  • 把定義存放在文件中洁段,為一些腳本或者交互式的解釋器實例使用,這個文件被稱為模塊共郭。模塊是一個包含所有你定義的函數(shù)和變量...
    S大偉閱讀 280評論 0 0
  • If you quit from the Python interpreter and enter it agai...
    linyk3閱讀 359評論 0 0
  • 本周回顧:(6月3日~6月9日) 1眉撵、百日同行時光之旅正式開啟,進入24站的第一站落塑。 2纽疟、完成寫作一篇,升華對專注...
    跟喜樂學蛻變閱讀 171評論 0 0
  • 不追熱點蟆肆,當然能寫好文章,重要的還是要有內容晦款,有料炎功,能通過你的文章告訴別人一些他不知道或者想知道的東西。 但是現(xiàn)在...
    無敵美麗的daisy閱讀 260評論 0 0