終端窗口運行.py程序
首先你要安裝python,命令行輸入 python 有python提示符 >>> 出現說明安裝成功
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import sys def test(): args = sys.argv if len(args)==1: print('Hello, world!') elif len(args)==2: print('Hello, %s!' % args[1]) else: print('Too many arguments!') if __name__=='__main__': test()
第1行和第二行是標准注釋,第一行可以讓這個hello.py文件直接在Unix/Linux/Mac上運行,第二行可以表示該.py文件使用的標准UTF-8編碼;
第四行是一個字符串,表示模塊的文檔注釋,任何模塊的第一個字符串都默認為文檔的注釋
以上就是Python模塊的標准文件模板,當然也可以全部刪掉不寫,但是,按標准辦事肯定沒錯。
補充
1)導入sys
模塊后,我們就有了變量sys
指向該模塊,利用sys
這個變量,就可以訪問sys
模塊的所有功能。sys
模塊有一個argv
變量,用list存儲了命令行的所有參數。argv
至少有一個元素,因為第一個參數永遠是該.py文件的名稱
2)當我們在命令行運行hello
模塊文件時,Python解釋器把該模塊內的一個特殊變量__name__
置為__main__
,而如果在其他地方導入該hello
模塊時,if
判斷將失敗,因此,這種if
測試可以讓一個模塊通過命令行運行時執行一些額外的代碼,最常見的就是運行測試。
輸入命令格式
這里的地址是完整的地址,
python D:\desktop\forTest.py #文件的完整目錄
結果:
命令行里的 python shell 環境
打開cmd后直接輸入 python 會進入 python 的 shell 環境,這里可以可以輸入命令,還有就是 shell 里會有提示符 >>>
如 print('I love you')
運行結果:
使用 exit() 退出 python 的 shell 環境
File "<stdin>", line 1 錯誤:
在shell 里面輸入 python +程序名字 ,會出現這個錯誤,應該在終端下運行(見上)
模塊內的作用域
參考鏈接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017455068170048
這個模塊內的作用域和變量的作用域有些區別,前者區分的是不同模塊內的變量名,即該模塊被導入后模塊內的變量是否能被新模塊引用。(但是通過增加下划線確實能將public變量變為private變量,在一個模塊中的變量也能受到影響,參見面向對象編程
在模塊中,我們可能會定義很多函數和變量,有的函數和變量我們希望給別人使用,但是有的變量和函數我們不希望被別人使用。在python中,是通過_前綴來實現的。
正常的函數和變量名是公開的(public),可以被直接引用,比如:abc
,x123
,PI
等;
類似__xxx__
這樣的變量是特殊變量,可以被直接引用(但是不可以自己創建),但是有特殊用途,比如上面的__author__
,__name__
就是特殊變量,hello
模塊定義的文檔注釋也可以用特殊變量__doc__
訪問,我們自己的變量一般不要用這種變量名;
類似_xxx
和__xxx
這樣的函數或變量就是非公開的(private),不應該被直接引用,比如_abc
,__abc
等;
之所以我們說,private函數和變量“不應該”被直接引用,而不是“不能”被直接引用,是因為Python並沒有一種方法可以完全限制訪問private函數或變量,但是,從編程習慣上不應該引用private函數或變量。
#被導入的模塊forTest2.py代碼 #__arbitrarily__=='不能任意命名的特殊變量'#不能這樣,會報錯 arbitrarily='能被直接引用的變量' _arbitrarily='非公開,不應該被直接引用,但是能' __arbitrarily='非公開,不應該被直接引用,但是能,和上面的一樣' #作為測試的模塊,其中導入了forTest2.py import forTest2 print(forTest2.arbitrarily) print(forTest2._arbitrarily) print(forTest2.__arbitrarily) print(forTest2.__name__) #輸出 能被直接引用的變量 非公開,不應該被直接引用,但是能 非公開,不應該被直接引用,但是能,和上面的一樣 forTest2
private函數或者變量不應該被別人引用,那么可以用來干什么呢,可以用來做代碼封裝和抽象,如:
def _private_1(name): return 'Hello, %s' % name def _private_2(name): return 'Hi, %s' % name def greeting(name): if len(name) > 3: return _private_1(name) else: return _private_2(name)
在模塊里公開greeting函數,而把內部邏輯用private函數隱藏起來了,這樣,調用greeting函數不用關心內部的private函數細節,這也是一種非常有用的代碼封裝和抽象的方法,即:外部不需要引用的函數全定義為private,只有外部需要引用的函數才定義為public
數據封裝、繼承和多態是面向對象編程的三大特點
模塊的搜索路徑
當我們試圖導入一個模塊時,python會在指定的路徑下搜索對應的.py文件,如果找不到就會報錯
>>> import mymodule Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named mymodule
默認情況下,python會搜索當前目錄,所有已安裝的內置模塊和第三方模塊,搜索路徑存放在sys的path變量當中
>>> import sys >>> sys.path ['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
有兩種辦法可以添加自己的搜索目錄
一是直接修改sys.path,添加要搜索的目錄
>>> import sys >>> sys.path.append('/Users/michael/my_py_scripts')
這種方法是在運行時修改,運行結束后失效
第二種方法時修改環境變量PYTHONPATH,該環境變量的內容會被自動添加到模塊搜索路徑中,設置方式與設置Path環境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響