Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
ython文檔資源包括下面幾種:
序號 | 形式 | 描述 |
1 | #注釋 | 程序語句對應的注釋 |
2 | dir() | 查看對象全部屬性 |
3 | doc | 文檔字符串 |
4 | help() | 查看對象具體屬性用法 |
5 | HTML報表 | html格式幫助文檔 |
6 | 標準手冊 | python語言和庫的說明 |
7 | 網站資源 | 在線教程、技術博客 |
8 | 書籍資源 | 相關書籍 |
python井號(#)用于程序語句對應的注釋。
#號后面直到行末的內容都會當做注釋,不被執行。
python通過#注釋的內容只能在程序原文件查看。
python的dir(對象)內置函數,返回對象全部屬性組成的列表。
示例
# 通過常量表達式生成實例后查看
>>> dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
# 通過類型名生成實例后查看
>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> dir('')==dir(str)
python文檔字符串doc,值為模塊文件開頭、函數開頭、類開頭、方法開頭的注釋,python會自動封裝這些注釋,并且保存在doc。這些注釋寫在三引號內。
文檔字符串可以通過不同位置路徑對象的doc獲取。
不同路徑對象屬性名(函數名、類名、方法名)可以通過dir(模塊)獲取。
模塊:模塊名.doc
函數:模塊名.函數名.doc
類:模塊名.類名.doc
方法名:模塊名.類名.方法名.doc
示例
'''
模塊文件名:docstr.py
模塊開頭的文檔字符串
'''
S='梯閱線條'
def hellof(name):
'''
函數開頭的文檔字符串
'''
print('hello ',name)
class Student:
'''
類開頭處的文檔字符串
'''
def study(self):
'''
方法開頭的文檔字符串
'''
pass
# 查看不同對象的__doc__文檔字符串
>>> path=r'E:\documents\F盤'
>>> import os
>>> os.chdir(path)
>>> import docstr
>>> dir(docstr)
['L', 'S', 'Student', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hellof']
>>> print(docstr.__doc__)
模塊文件名:docstr.py
模塊開頭的文檔字符串
>>> print(docstr.hellof.__doc__)
函數開頭的文檔字符串
>>> print(docstr.Student.__doc__)
類開頭處的文檔字符串
>>> print(docstr.Student.study.__doc__)
方法開頭的文檔字符串
python的help()內置函數查看傳入對象的使用說明,傳入對象可以是模塊名、函數名、類名、方法名、變量引用。
示例
>>> path=r'E:\documents\F盤'
>>> import os
>>> os.chdir(path)
>>> import docstr
>>> help(docstr)
Help on module docstr:
NAME
docstr
DESCRIPTION
模塊文件名:docstr.py
模塊開頭的文檔字符串
CLASSES
builtins.object
Student
class Student(builtins.object)
| 類開頭處的文檔字符串
|
| Methods defined here:
|
| study(self)
| 方法開頭的文檔字符串
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
FUNCTIONS
hellof(name)
函數開頭的文檔字符串
DATA
L=['梯', '閱', '線', '條']
S='梯閱線條'
FILE
e:\documents\f盤\docstr.py
>>> help(docstr.hellof)
Help on function hellof in module docstr:
hellof(name)
函數開頭的文檔字符串
用法
python -m pydoc -w docstr
描述
進入到docstr.py文件的目錄,執行用法里面的語句。
執行pydoc模塊,將docstr的文檔字符串寫入到docstr.html文件,成為幫助文檔。
-m:表示運行模塊(module),后面接模塊名
-w:后接要生成html文檔的模塊名,表示將模塊的文檔字符串寫入到模塊名.html文件中。
示例
E:\documents\F盤>python -m pydoc -w docstr
wrote docstr.html
會生成類似下面的html文件內容:
python安裝目錄的doc目錄下python378.chm。
更多內容參考python知識分享或軟件測試開發目錄。
日,我的一位同事向我尋求建議,她打算為自己構建一個博客。于是,我對靜態網站生成器和博客引擎進行了一番研究,發現 Hugo 是一個很不錯的選擇。但是,我的同事還有一些特殊要求,比如,她想要一個自定義的博客網址和 CSS 主題。盡管這些 Hugo 都可以實現,但我并不打算花時間來學習它。我想自己創建一個簡單的靜態網站生成器,以便我的同事在她已經準備好的 HTML 中編寫博客文章。
這個靜態網站生成器的代碼大約 100 行,非常簡潔。它提供了詳細代碼和示例博客 。眾所周知,GitLab 提供靜態頁面的免費托管服務,還帶有 CI/CD 功能,它允許你在部署之前編譯頁面。
以下教程將帶你使用 Node.js 設置自己的靜態網站生成器,Node.js 的版本需要 “>=8.11.x”。
npm init npm i --save-exact bluebird chokidar fs-extra mustache mkdir src mkdir public
首先,設置項目:
開始之前,我們需要弄清楚一個問題:為什么需要靜態網站生成器?因為某些情況并不需要靜態網站生成器。假如你的博客訪問量很小,你只需簡單地手工創建 HTML 頁面并發布它們即可。實際上,在服務器編程興起之前,在很長時間內這就是大多數 Web 的發布方式。但是,一旦頁面和內容增加,對這些頁面中的通用部分(例如頁面底部)進行更改將會變得非常重復和乏味。因此,我們開始尋找一種更加理想的方法,嘗試使用某種簡單的模板引擎來分離常見內容,然后在特定的地方插入所需的內容。
開始研究模板引擎之前,先設置我們的網站。我們需要在項目根目錄下創建 2 個文件夾 :
我們的目標是將 src 目錄的內容復制到 public 目錄中。在項目根目錄下創建 index.js 文件,其內容如下:
const Promise=require("bluebird"); const fse=require("fs-extra"); Promise.resolve().then(async ()=> { await main(); }); const main=async()=> { await generateSite(); }; const generateSite=async()=> { await copyAssets(); }; const copyAssets=async()=> { await fse.emptyDir("public"); await fse.copy("src", "public"); };
執行命令 node index.js,即可啟動該腳本。
祝賀你!此刻,你已榮升為一名后端開發人員。
接下來,我們將添加文件監視器,src 文件夾中的內容一旦發生更改就將重新生成網站。該博客總共包含 500-1000 個文件,我們可以在任何變化發生時重新生成整個網站:
const chokidar=require("chokidar"); const main=async()=> { await generateSite(); watchFiles(); }; const watchFiles=()=> { const watcher=chokidar.watch( [ "src" ], { ignored: /(^|[/\])../, // chokidar will watch folders recursively ignoreInitial: false, persistent: true } ); watcher.on("change", async path=> { console.log("changed " + path + ", recompiling"); await generateSite(); }); // catch ctrl+c event and exit normally process.on("SIGINT", function() { watcher.close(); }); };
上面的代碼清楚地說明了為什么初始版本有一個名為 generateSite 的函數。現在執行命令 node index.js 啟動我們的靜態網站生成器,如果在 src 目錄中編輯任何文件,public 都會發生變化。此時,我們還將添加一個環境變量來區分開發和生產模式。在開發模式中,我們將關注更改情況并重新生成網站,而在生產模式中,我們只需重新生成:
const env=process.env.NODE_ENV || "dev"; const main=async ()=> { console.log("Running app in " + env); await generateSite(); if (env==="dev") { watchFiles(); } };
我們可以執行命令 export NODE_ENV=prod || set NODE_ENV=prod && node index.js 來運行以上代碼。請注意,觀察源目錄的更改和重新編譯并不是每次都必須的,你可以跳過此步驟,只需在每次進行更改時運行腳本即可。
至此,差不多完成了!現在來說說模板。我們將使用 Mustache.js 模板,它非常簡單易用,并且我們的需求并不復雜。創建一個文件夾 src/partials,用來存放網站的公共部分。然后稍微修改我們的網站結構,保證所有頁面都存放在 src/pages 目錄中。接下來加載頁面并使用 Mustache 渲染:
const fs=require("fs"); const generateSite=async ()=> { await copyAssets(); await buildContent(); }; const buildContent=async ()=> { const pages=await compilePages(); await writePages(pages); }; const compilePages=async ()=> { const partials=await loadPartials(); const result={}; const pagesDir=path.join("src", "pages"); const fileNames=await fs.readdirAsync(pagesDir); for (const fileName of fileNames) { const name=path.parse(fileName).name; const fileContent=await fs.readFileAsync(path.join(pagesDir, fileName)); result[name]=Mustache.render(fileContent.toString(), {}, partials); } return result; }; const loadPartials=async ()=> { const result={}; const partialsDir=path.join("src", "partials"); const fileNames=await fs.readdirAsync(partialsDir); for (const fileName of fileNames) { const name=path.parse(fileName).name; const content=await fs.readFileAsync(path.join(partialsDir, fileName)); result[name]=content.toString(); } return result; }; const writePages=async pages=> { for (const page of Object.keys(pages)) { await fs.writeFileAsync(path.join("public", page + ".html"), pages[page]); } };
想要了解最終版本,請查看 Software Dawg 項目(https://gitlab.com/wheresvic/software-dawg)。它與本教程有一些細微差別:
此外,你還可以安裝 browser-sync 軟件包,然后通過命令 npm run live-reload 運行它,如此一來,只要有任何更改發生瀏覽器就會自動刷新。請注意,由于任何更改都將重新生成整個網站,因此并不適用于 Windows。
GitLab 提供靜態網站免費托管,只需一個 .gitlab-ci.yml 配置文件即可。真正令人難以置信之處在于,你可以自定義構建過程,這意味著在該例中,我們可以在部署之前生成網站!有關此功能的詳細信息,請參見https://about.gitlab.com/features/pages/。
本教程到此結束,我的同事對此非常滿意,該方案非常靈活,它允許她根據自己的喜好進行自定義,也希望對你有所助益!
原文:https://smalldata.tech/blog/2018/08/16/building-a-simple-static-site-generator-using-node-js
作者簡介:Victor Parmar,是一位全棧工程師,熱愛旅行,熱愛 DIY。
譯者:安翔,責編:屠敏
一階段:WEB網頁基礎
1 HTML5+CSS3基礎入門
課程內容
熟悉HTML5入門基本內容(代碼文件、基本結構、注釋、編程問題規范、基本標簽等);掌握CSS3的基礎入門知識;
項目實戰
京東登錄注冊案例(HTML+CSS) 登錄界面指的是需要提供帳號密碼驗證的界面,有 控制用戶權限、記錄用戶行為,保護操作安全的作 用。登錄界面是所有在線系統的入口。
2 HTML5+CSS3進階
課程內容
掌握繼承與優先級;選擇器、盒子模型、布局樣式等使用方法;能夠 進行合理的網頁布局。
項目實戰
個人博客(HTML5+CSS3) 個人博客是學員涉足前端領域的第一個項目,運用 前端基礎知識,培養項目思維,在入學2周內搭建 屬于自己的個人信息分享平臺。
3 Photoshop
課程內容
采用商業案例來學習Photoshop使用,掌握Photoshop基本操作;能 夠獨立的進行網頁切圖。
項目實戰
企業網站
(HTML5+CSS3+Photoshop+PxCook) 企業網站作為一家公司的互聯網名片,是每家企業必備。強化學員對HTML+CSS+PS(切圖)、各種布局等初期所學全部知識的綜合應用,由于是第一個企業級項目,著重熟悉項目開發流程和培養使用HTML+CSS遇到問題時的分析和調試能力。
第二階段:WEB編程基礎
1 JavaScript基礎
課程內容
了解最前沿JavaScript知識。掌握JS基礎基本語法和基本語句以及ES6&ES7新特性,培養編程邏輯思維,實現網頁的動態交互。
2 BOM+DOM編程
課程內容
認識和了解BOM和DOM模型; 掌握window、 location、 history、 navigator、document、 Form、Table等對象的使用;掌握事件處 理和DOM節點。理解BOM和DOM模型:掌握各瀏覽器API的使用、熟練操作元素節點理解網站事件類型與機制
項目實戰
案例實踐-H5音樂播放器、H5小游戲 (HTML5+CSS3+Javascript) 通過游戲應用開發,培養學員開發興趣和參與感, 強化Javascript基礎、DOM操作和事件機制在實際 場景的應用。
3 JavaScript交互及動畫效果
課程內容
掌握運動框架的封裝(勻速運動 緩沖運動 多物體運動) 分享到案例 右側邊欄滾動案例 透明度運動 輪播效果案例
項目實戰
企業網站交互進階(HTML5+CSS3+JavaScript) 掌握動畫原理,利用原生JS技術編寫動畫交互效果 實現企業站的輪播,選項卡,樓層跳轉等常規功能
4 jQuery+交互及動畫 +jQuery優質插件
課程內容
認識jQuery;熟悉選擇器;屬性與樣式; jQuery基本DOM操作;事件處理;文檔處理;數組和對象操作。學會使用jQuery和JavaScript 和DOM編程的動畫效果制作。 掌握jQuery生態圈的流行框架使用; 培養學員利用前端工具解決開發過程中問題的能力。
項目實戰
案例實踐-樓層跳動&輪播&表單驗證(HTML5+ CSS3+jQuery)jQuery的流行得益于他龐大的插件 生態圈,掌握jQuery插件的使用,將是前端開發者 網站開發的利器。
5 版本控制工具SVN&GIT
課程內容
掌握SVN/GIT版本控制工具來維護項目的整個藍圖;熟練使用github 來管理云端代碼倉庫,快速項目組成員多人協作。
6 jQuery EasyUI
課程內容
熟悉jQueryEasyUI框架環境搭建, 掌握EasyUI常用插件, 使用Easy UI快速搭建后臺
項目實戰
電子購物網站(HTML5+CSS3+jQuery +EasyUI)通過本階段的學習,具備常見動畫需求 的開發能力常用插件的使用及開發;逐步培養良好 的編程習慣強化企業項目開發流程,培養團隊協作能力。
第三階段:響應式網站與項目自動化開發
1 HTML5、CSS3高級進階
課程內容
掌握HTML5時代多媒體、Web存儲技術及基于瀏覽器的(LBS)地理定位技術,熟悉基于高德地圖、百度地圖等地圖API的應用開發;介 紹了H5圖形技術SVG和Canvas;能夠動手編寫圖形報表和使用百度 echarts地圖API的能力。掌握CSS3新選擇器, 響應式原理及CSS3媒體查詢,移動端流行的伸縮布局,Web字體、漸變、過渡動畫等技 術使用動畫庫實現基于網頁的酷炫動畫效果。
項目實戰
H5動效簡歷/H5原生移動商城(HTM L5+CSS3+Swiper+動畫框架)H5動效簡歷是每 一
個H5er的個性化名片,H5原生移動商城和適配 調試是面向前端是時代的必須技術。
2 Bootstrap4
課程內容
掌握來自Twitter工程師開發的目前流行度很高的前端響應式框架, 包括內置樣式、組件和JavaScript插件;掌握基于Bootstrap 打造的電影主題頁設計。
項目實戰
電影主題頁設計 (HTML5+CSS3+Bootstrap) 快速打造能夠適應多端的信息展示網站
3 前端依賴管理+CSS預處理 語言(Less+Sass)
課程內容
熟練使用bower來管理前端庫,達到一個命令搞定所有項目依賴。
掌握基于CSS的預處理框架Less/Sass,以最簡單的代碼實現復雜 樣式;目前主流的前端框架都是基于css預處理語言搭建,學會后 具備Bootstrap等框架的閱讀和使用能力。
項目實戰
響應式股票交易平臺(Bootstrap4+Sa ss+PHP+Mysql+GIT)通過本階段學習,通過Boot
strap等框架具備響應式開發能力;并使用多種版本 控制工具,進行企業項目的迭代;同時使用預處理 框架完成樣式重用和擴展。具備高效快速開發企業 項目的能力。
4 Grunt/Gulp自動化構建工具
課程內容
了解前端自動化構建工具的原理;掌握基于Node平臺的Grunt和Gulp 兩大自動化構建工具。
5 Mysql
課程內容
了解Mysql背景,快速搭建Mysql環境,熟悉Sql基礎語法,實現對數據 的CRUD操作
項目實戰
響應式股票交易平臺(Bootstrap4+Sa ss+PHP+Mysql+GIT)通過本階段學習,通過Boot
strap等框架具備響應式開發能力;并使用多種版本 控制工具,進行企業項目的迭代;同時使用預處理 框架完成樣式重用和擴展。具備高效快速開發企業項目的能力
第四階段:Web高級編程與框架原理
1 JavaScript高級編程
課程內容
掌握jJavaScript面向對象思想;原型設計原理及使用。了解 JavaScript程序的編譯原理;掌握遞歸、惰性載入、匿名、閉包及 回調等高級函數的使用。掌握ES6前沿新特性。
2 jQuery插件開發
課程內容
學習插件開發模式,并自己動手實現動態表格查詢和表單驗證等插件。
案例實踐
原生表單驗證插件(HTML5+CSS3+ ES6)能夠通過面向對象思想開發jQuery插件,學
習實踐JS設計模式,具備初級JS框架的編寫能力。
3 NodeJS
課程內容
掌握Node服務端編程技術,Expres搭建服務器,基于Express框架編寫 后端代碼,實現前端和后端全棧開發
4 WebSocket
課程內容
掌握掌握HTTP協議、客戶端數據傳輸方式,掌握WebSocket 在 HTML5 領域的應用場景,用于實現客戶端和服務器的長鏈接。
案例實戰
在線聊天室 (HTML5+CSS3+JS+WebSocket) 快速打造能夠多人在線聊天的聊天室案例。
5 MVVM架構源碼解析
課程內容
掌握MVC、MVP和MVVM架構的演變歷史,掌握分層開發的思想,了 解雙向綁定原理,實現基于面向對象方式實現一個基于MVVM架構的 minVue框架。
案例實踐
miniVue框架(面向對象編程) 動手打造第一款屬于自己的前端主流框架。
第五階段:VUE全家桶與多端項目管理
1 VUE2-VUE3
課程內容
掌握Vue2框架的環境搭建,指令,表達式,計算屬性、偵聽器、生命 周期和組件開發,掌握主流的VUE2組件高階、消息通訊,熟悉Vant、 iView、MintUI移動端框架,使用Vue-cli來搭建工程和開發Vue項目。
2 ElementUI+ Koa2(Node.js)+Mysql
課程內容
熟練使用基于Vue2的餓了么前端視圖框架ElementUI,高效打造大型 復雜的用戶界面。Koa是Express 原班人馬打造 更小、更健壯、更富 有表現力Node框架,使用Koa2打開更前沿的后臺開發模式,使用甲 骨文公司的Mysql關系數據庫來管理更為大型并發的數據。
項目實戰
大型超市管理系統、外賣后臺管理系統 (ElementUI+Koa2+Mysql+GIT) 通過最熱門的Node+Koa2+Mysql開發模式獨立完成網站開發 通過NPM生態圈通過分享和實踐編碼進行自我提升 成為一名真正的全棧工程師。
3 TypeScript
課程內容
TypeScript是一種由微軟開發的自由和開源的編程語言。它是 JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態 類型和基于類的面向對象編程
4 webpack模塊加載器 &打包工具
課程內容
掌握最前沿模塊化打包工具,形成組件化開發思想,極大簡化項目開 發的成本。
項目實戰
外賣APP、源碼音樂App (TS+Vue+Vuex+Vant+axios+GIT) 熟練掌握Vue全家桶項目架構。
5 uniapp/Taro微信小程序
課程內容
微信小程序作為引爆H5時代的標識技術,通過學習了解視圖層、邏 輯 層相關知識,深入小程序框架和組件的使用。uni-app 是一個使用 Vue.js 開發跨平臺應用的前端框架,開發者編寫一套代碼,可編譯到 iOS、Android、H5、小程序等多個平臺。Taro是來自京東凹凸實 驗室的多端統一開發框架Taro,可以讓你使用一套代碼打通WebApp、 微信小程序、支付寶小程序、百度智能小程序、字節跳動小程序等。
項目實戰
源碼電影小程序/四海香美食小程序 (WXML + WXSS + JS + 豆瓣開放接口API)通過
本階段學習,具備微信、支付寶小程序、百度智能 小程序和字節跳動小程序的開發能力。
第六階段:React移動混合式開發
1 React
課程內容
掌握來自Facebook工程師開發的流行前端框架-ReactJs;熟練使 用ReactJs基本語法、聲明周期、React-Router及基于ES6的 React組件開發;掌握React Redux架構在實際項目中的應用。掌 握基于ReactJS衍生出來的本地化跨平臺框架;
項目實戰
源碼房產App、源碼電影App (TS+React+Redux+Webpack+Antd-mobile+ GIT)熟練掌握React全家桶項目架構
2 React Native/Flutter
課程內容
熟練搭建ReactNative環境、掌握本地化布局和常見組件。 Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高 質量的原生用戶界面(原生應用)。 Flutter可以與現有的代碼一起 工作。在全世界,Flutter正在被越來越多的開發者和組織使用,并 且Flutter是完全免費、開源的。
項目實戰
源碼生活APP(ReactNative/Flutter +AntD+DVA+高德地圖API)通過本階段學習,具
備與移動端開發人員的合作完成低成本、高性能、 高健壯的App應用的能力。
第七階段:就業與服務
1 就業指導
企業通用面試技巧、知識點面試技巧、模擬面試、項目面試技巧、語言表達練習、互面總結、總結和復習面試題。
2 面試直通車
面試經驗交流、面試技術解惑、面試項目跟蹤。
3 售后服務
隨時隨地為同學們提供全方位工作問題解決方案!源碼時代是獨家具有售后的服務機構!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。