? ? ? ?Python不使用括號(hào)來(lái)表示代碼的類和函數(shù)定義塊或流程控制。代碼塊是由行縮進(jìn),這是嚴(yán)格執(zhí)行表示方式。在縮進(jìn)位的數(shù)目是可變的,但是在塊中的所有語(yǔ)句必須縮進(jìn)相同的量,在Python中所有的連續(xù)線縮進(jìn)的空格數(shù)同樣的會(huì)結(jié)成塊。
Python中命名規(guī)則

Python?腳本與其它語(yǔ)言的腳本的基本格式完全一樣,本身都是純文字文件,而在文件頭要以#!?指定直譯程序(解釋器)的位置:
[root@importer1~]# whereis python
python: /usr/bin/python2.6 /usr/bin/python/usr/lib/python2.6 /usr/lib64/python2.6 /usr/include/python2.6/usr/share/man/man1/python.1.gz
#可以在腳本首行指定路徑如下
#!/usr/bin/python
習(xí)慣上會(huì)給Python?程序取個(gè)擴(kuò)展名.py?,但Linux?的腳本并不需要綴上擴(kuò)展名,把*.py?改成*?,程序一樣會(huì)正常執(zhí)行。.py?擴(kuò)展名對(duì)Python?仍有特別的意義,但只在撰寫(xiě)Python?模塊的時(shí)候才有用處。
對(duì)于指定Python?解釋器標(biāo)頭,一般還有另外一種寫(xiě)法。
#!/usr/bin/envpython
于是會(huì)以/usr/bin/env?程序去環(huán)境變量中調(diào)用python?解釋器,處理Python?程序檔案。
Windows\linux腳本格式轉(zhuǎn)換
? ? ? windows下編輯的python文件在linux系統(tǒng)上執(zhí)行時(shí),一個(gè)常見(jiàn)錯(cuò)誤是“-bash:
/usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or
directory”。
這是不同系統(tǒng)編碼格式引起的:在windows系統(tǒng)中編輯的.sh .py文件可能有不可見(jiàn)字符,所以在Linux系統(tǒng)下執(zhí)行會(huì)報(bào)以上異常信息。一般是因?yàn)閣indows行結(jié)尾和linux行結(jié)尾標(biāo)識(shí)不同造成的。有如下解決方法:
在windows下轉(zhuǎn)換,利用一些編輯器如UltraEdit或EditPlus等工具先將腳本編碼轉(zhuǎn)換,再放到Linux中執(zhí)行。轉(zhuǎn)換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
linux下直接替換,sed -i 's/^M//g'??filename?(注意^M 在linux 下寫(xiě)法按^M 是回車換行符,輸入方法是按住CTRL+v,松開(kāi)v,按m)。
?????? 也可用vi編輯在腳本中轉(zhuǎn)換,首先要確保文件有可執(zhí)行權(quán)限
#>chmod +x filename
#然后修改文件格式
#>vi filename
?
#利用如下命令查看文件格式
#:set ff 或:setfileformat
#可以看到如下信息
#fileformat=dos 或fileformat=unix
#利用如下命令修改文件格式
#:set ff=unix????????????????? 或:set fileformat=unix
#回車、存盤(pán),并退出
? ? ? 在Windows中 '\r'? 回車(Carriage Return),回到當(dāng)前行的行首,而不會(huì)換到下一行, '\n'? 換行(Line Feed),換到當(dāng)前位置的下一行,而不會(huì)回到行首。
? ? ? ? 在計(jì)算機(jī)還沒(méi)有出現(xiàn)之前,有一種叫做電傳打字機(jī)(Teletype Model 33,Linux/Unix下的tty概念也來(lái)自于此)的玩意,每秒鐘可以打10個(gè)字符。但是它有一個(gè)問(wèn)題,就是打完一行換行的時(shí)候,要用去0.2秒,正好可以打兩個(gè)字符。要是在這0.2秒里面,又有新的字符傳過(guò)來(lái),那么這個(gè)字符將丟失。于是,研制人員想了個(gè)辦法解決這個(gè)問(wèn)題,就是在每行后面加兩個(gè)表示結(jié)束的字符。一個(gè)叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個(gè)叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來(lái)歷,從它們的英語(yǔ)名字上也可以看出一二。
后來(lái),計(jì)算機(jī)發(fā)明了,這兩個(gè)概念也就被搬到了計(jì)算機(jī)上。那時(shí),存儲(chǔ)器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個(gè)字符太浪費(fèi)了,加一個(gè)就可以。于是就出現(xiàn)了分歧。
Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即"\n";Windows系統(tǒng)里面,每行結(jié)尾是“<換行><回 車>”,即“\r\n”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”,即"\n"。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在 Windows里打開(kāi)的話,所有文字會(huì)變成一行;而Windows里的文件在Unix/Mac下打開(kāi)的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。
Python?直譯器還會(huì)讀取另一組格式為# -*- setting
-*-?的標(biāo)頭(?通常接在第一行以后)?,其中常用的是:
# -*- coding: UTF-8 -*-
用途是指定腳本中包含了非ASCII字符?。如果你想要寫(xiě)中文批注,這就非常重要;Python?自己有一套字符編碼轉(zhuǎn)換的機(jī)制,實(shí)作在codecs?模塊里面,但直到Python 2.4?之前,繁體中文常用的Big5?編碼并未進(jìn)入標(biāo)準(zhǔn)的codecs?模塊。如果腳本使用了Python?看不懂的字符編碼(?就是指華文世界用的Big5?和GB)?,程序雖然仍可執(zhí)行,但Python?解釋器會(huì)送出警告。使用上述語(yǔ)句,僅指明腳本中包含了非ASCII字符,而并未將字符編碼轉(zhuǎn)換為utf-8編碼。如果需要將字符編碼改為utf-8,則需要在保存的時(shí)候選擇保存為utf-8格式。
Windows下如果要執(zhí)行.py腳本,在命令行中通過(guò) python *.py這樣的格式運(yùn)行,這種情況需要將.py文件放入python.exe程序所在目錄下。另一種方式是通過(guò)python的IDLE打開(kāi).py文件,然后按F5在python
shell內(nèi)運(yùn)行。
Python腳本語(yǔ)句注釋
? ? ? ?python單行注釋符號(hào)(#),井號(hào)(#)常被用作單行注釋符號(hào),在代碼中使用#時(shí),它右邊的任何數(shù)據(jù)都會(huì)被忽略,當(dāng)做是注釋。在python中也會(huì)有注釋有很多行的時(shí)候,這種情況下就需要批量多行注釋符了。多行注釋是用三引號(hào)’’’ ’’’包含的。
長(zhǎng)字符串的跨行連接
? ? ? ?一個(gè)(對(duì))雙引號(hào)或單引號(hào)一般用于引用寫(xiě)在一行的字符串,如s1="hello,world."。但如果字符串很長(zhǎng),需要寫(xiě)成多行,就用到了續(xù)行符\。
>>> s1="hello,?? \
... world"
>>> s1
'hello,?? world'
>>>?
???? 除最后一行字符串外,后面加上 \ 即可實(shí)現(xiàn)續(xù)行。續(xù)行符(\)多用于一行寫(xiě)不下的情況,\前可以有多個(gè)空格,空格也會(huì)加到原字符串中。續(xù)行字符之后的一行中,縮進(jìn)并不重要。
?????? 要避免空格的出現(xiàn),需要借助于連接符+。但要注意連接符和續(xù)行符之間有空格。
>>> s2="hello,"+ \
???????? " chen ping"
>>> s2
'hello, chen ping'
>>>?
在此基礎(chǔ)上,如果使用三個(gè)雙引號(hào)的話,連行符就省了,即:
>>>s2=""" hello’s
... world
...haha!"""
>>> s2
'hello’s\nworld\nhaha!'
>>>?
這種情況下,調(diào)用顯示s1時(shí)為 hello’s\nworld\nhaha,注意其中的換行符\n??梢钥闯?,以上這兩者還是有區(qū)別的,前面的連行符(\)需要顯式寫(xiě)出,但實(shí)際不包含在字符串中的;而使用三個(gè)雙引號(hào)時(shí)換行符(\n)不用顯式寫(xiě)出,但實(shí)際是隱式包含于字符串中的。
? ? ? ?python 三引號(hào)的形式用來(lái)輸入多行文本,也就是說(shuō)在三引號(hào)之間輸入的內(nèi)容將被原樣保留,其中的單號(hào)和雙引號(hào)不用轉(zhuǎn)義,其中的不可見(jiàn)字符比如/n和/t都會(huì)被保留,這樣的好處是你可以替換一些多行的文本。所見(jiàn)即所得,對(duì)于一段html或xml格式的字符串時(shí)用三引號(hào)更直觀點(diǎn)(此時(shí)要用單引號(hào)或雙引號(hào)時(shí)候需要進(jìn)行轉(zhuǎn)義)。
而在PHP當(dāng)中單引號(hào)和雙引號(hào)的有些是不一樣的,雖然表示的字符串,但是在php的單引號(hào)解析速度比雙引號(hào)快,如果在Python用單號(hào)那么在字符串中就可以直接收寫(xiě)雙引號(hào)了,反之亦然。這就是python為什么允許用兩種方式的原因。在實(shí)際應(yīng)用中,python 單引號(hào)和python 雙引號(hào)用得比較多,有兩種表示方式后,就不用老用轉(zhuǎn)義字符了。
此外,還可以把一個(gè)長(zhǎng)字符串寫(xiě)在一個(gè)()中,達(dá)到拆分成多行書(shū)寫(xiě)。如
js_fun2=("function
investfun(investamount){for(i=0;i<10;i++){var "
???????? "invest=document.getElementsByClassName('projectList')[0].getElementsByTagName('a')[i];"
???????? "var
invest_text=invest.querySelector('div.INVESTING').innerText;"
???????? "if(invest_text=='立即投資')"
???????? "{var
invest_remainamount=invest.querySelector('div.INVESTING').nextSibling.innerText;"
???????? "var
remainamount=Number(invest_remainamount.match(/\d+/g)"
???????? ");if(remainamount>investamount){invest.click();break;}}}};investfun("+str(amount)+");")
Python腳本中調(diào)用shell命令和工具
1、os.system(string cmd | scriptname.sh)
? ? ? ?可用于在遠(yuǎn)程類unix上執(zhí)行shell 命令,如在android底層命令行上執(zhí)行。該操作將輸出打印到標(biāo)準(zhǔn)輸出中,這也意味著無(wú)法用變量去接收命令執(zhí)行結(jié)果,只返回腳本退出時(shí)的狀態(tài)碼,如
>>>a=os.system("cat /proc/cpuinfo")
>>>a
0
2、os.popen(cmd)
要得到命令的輸出內(nèi)容,只需再調(diào)用下read()或readlines()等 。
[NSOS1.1 ~]# python
Python2.4.3 (#1, Dec 10 2010, 17:24:35)
[GCC4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help","copyright", "credits" or "license" for moreinformation.
>>> import os
>>> b=os.popen("cat /usr/local/liveupdate/version").readlines();???????????? #按行讀取,返回列表
>>> b
['#Local version information,SHOULD NOT be modified.\n', 'Product_name=Traffic Control\n','Current_Version=5.0\n', 'Last_Patch_SN=1\n', 'DB_Patch_SN=0\n','Last_Build_SN=0\n', 'Last_Hotfix_SN=0\n', 'Type=tc\n']
>>> b[1]
'Product_name=Traffic Control\n'
>>>type(b)
>>>?
給Python腳本傳參數(shù)
? ? ? 如果想對(duì)python腳本傳參數(shù),需要先導(dǎo)入模塊:sys。
腳本調(diào)用方式為
[root@localhosttest]#python downloadximala.py? 參數(shù)1 參數(shù)2 …
? ? ? 則在腳本找那個(gè),可使用變量來(lái)接收這些參數(shù),其中,腳本名為 sys.argv[0],參數(shù)1為sys.argv[1],參數(shù)2為?sys.argv[2],各參數(shù)以空格分割,如果參數(shù)中帶有空格,需要用引號(hào)引用起來(lái)。
如果腳本中引用的參數(shù)超過(guò)了傳參的個(gè)數(shù),將會(huì)報(bào)IndexError: list index out of range錯(cuò)誤。
腳本退出代碼,sys.exit(0)?表示正常退出??,sys.exit(1)表示非正常退出。
Python 交互命令行中執(zhí)行.py文件
? ? ? 只需要3個(gè)步驟,
1.? ? ? ? import?sys
2.? ? ? ? 往系統(tǒng)路徑中加入自己存放py文件的地址
>>>sys.path.append("/newtest")
3.? ? ? ? 然后就可以開(kāi)始通過(guò)import的方法導(dǎo)入,如從test.py文件中加載所有的內(nèi)容
>>>from test import *
? ? ? ? ? 這樣就可以使用test.py中相關(guān)的方法和內(nèi)容了。