Node.js與python相同,一個檔案就是一個模組
Node.js提供了exports和require兩個物件;
exports是模組的公開介面;require用於從外部取得一個模組的介面,就是取得模組的exports物件
Node.js
//module.js var name; exports.setName = function(thyName) { name = thyName; }; exports.sayHello = function { console.log( 'Hello ' + name) };
//get module.js var myModule = require('./module'); myModule.setName('Jack'); myModule.sayHello();
Python
#module.py def setName(input_name): global name #定義name為此module.py模組中的廣義變數 name = input_name return name def sayHello(): print 'Hello ' , name
#getmodule.py import module myModule = module myModule.setName('Jack') myModule.sayHello()
建議改由getmodule.py中取得setName傳回的值寫法較符合python中對於變數的使用方式
#module.py def setName(input_name): name = input_name return name def sayHello(print_name): print 'Hello ' , print_name
#getmodule.py import module myModule = module print_name = myModule.setName('Jack') #新增變數取得setName傳回值 myModule.sayHello(print_name)
因為廣義變數有可能污染其他相同名稱的變數與增加除錯時的難度,小模組中也許看不出來,但在大規模的模組與程式碼中則會造成大麻煩
直接獲得函式
原先由模組取得函式的方式
Node.js
//sayhello.js function Hello(){ console.log('Hello World') }; exports.Hello = Hello;
//sayit.js sayit = require('./sayhello'); sayit.Hello();
Python
#sayhello.py def Hello(): print "Hello World"
#sayit.py import sayhello sayit = sayhello.Hello() sayit
變更後
//sayhello.js function Hello(){ console.log('Hello World') }; //exports.Hello = Hello; 變更為 Module.exports = Hello;
//sayit.js sayit = require('./sayhello'); //sayit.Hello(); 變更為 Sayit();
Python
#sayhello.py 不需變更 def Hello(): print "Hello World"
#sayit.py #import sayhello 變更為 from sayhello import Hello sayit = Hello() sayit
總結一下node.js與pythond 對於模組中的比較
|
Node.js |
Python |
變數 |
廣義,可被函式直接取用 |
模組與函式各有不同的名稱空間 |
載入模組 |
單次載入 |
單次載入 |
載入方式 |
Require(<Module>) |
Import <Module> |
直接獲得模組內的物件 |
Module.exports = hello; |
From module import hello |
文章標籤
全站熱搜
留言列表