最近學 python 的人比較多,今天講一下 python 的基礎:python 腳本的規範、縮進、編寫功能函數時注意事項等,這些都是自己編程過程中的心得體會。  <h2>一、python 腳本的規範:</h2>


    每個腳本都有自己的規範,以下的規範不是強製的,但是規範一下,可以使你的腳本規範、易懂、方便使用。


    #!/usr/bin/env python    # -*- coding: utf-8 -*-  </pre>


    這個寫在開頭,定義腳本編碼。現在多數都是 utf8 格式,所以寫腳本盡量用這個編碼,遇到中文可以做編碼處理,字符串編碼處理主要就是 encode 和 decode


    import os,urllib,mysqldb,time,tform  </pre>


    導入需要的模塊。


    main:     pass  </pre>


    定義函數


    if __name__ == "__main__":   main  </pre>


    這個就是說腳本從這裏往下執行,如果是其他的腳本調用這個腳本,這個腳本不至於執行其他的部分


    提示:以上是整個腳本中的規範,大家在寫腳本的時候盡量這麽做。  <h2>二、python 的縮進</h2>


    python 的對縮進要求很嚴格,縮進不對,就會報語法錯誤;python 中縮進就是一個 tab 鍵或是 4 個空格,4 個空格比較麻煩,直接一個 tab 鍵簡單,所以沒有特別的需求,縮進一般用 tab 鍵。縮進類似於分層,同一縮進就是相同的層次。見如下實例:


    if a==0:   print aelse:   print b  </pre><h2>三、每一個功能對應一個函數</h2>


    這一點我認為最重要,每一個功能就寫一個函數,這樣你的腳本清晰易懂,腳本其他複用這個功能也方便,腳本也不冗餘。不建議不要一個函數裏麵有好多功能,使函數模塊化。  <h2>四、係統命令的引用</h2>


    引用係統命令的時候,特別是 linux 命令,一定要寫命令的全路徑,比如:


    os.popen("/sbin/ifconfig eth0").read  </pre>


    這個你直接


    os.popen("ifconfig eth0").read  </pre>


    這樣也是沒有問題的,起碼是你手動執行腳本時,這個是會執行的,但是腳本做 cron 的時候,就不會執行了。所以這個要特別注意。  <h2> 五、異常處理</h2>


    try:   passexcept exception,e:  print e  </pre>


    其中 e 就是錯誤錯誤信息。try 的異常處理這麽寫就足夠用了,還有其他的方法,不常用。


    以下是一個獲取本地 ip 地址,從數據庫查詢 ip 的用途,去連接一個 url,判斷這個 url 是否可以用,並寫日誌。主要講了講 python 操作數據庫的常用用法。


    #!/usr/bin/env python # -*- coding: utf-8 -*-import os,urllib,mysqldb,time,tformdef log_w(text):    logfile = "/tmp/websocket.log"    if os.path.isfile(logfile):if (os.path.getsize(logfile)/1024/1024) > 100:    os.remove(logfile)    now = time.strftime("%y-%m-%d %h:%m:%s")    tt = str(now) + "t" + str(text) + "n"    f = open(logfile,\''a+\'')    f.write(tt)    f.closedef get_iame(ip):    try:conn = mysqldb.connect(host = \''192.168.8.43\'',port=3306,user = \''read_app\'',passwd = \''123456\'',charset=\''utf8\'',connect_timeout=20)cursor = conn.cursor#查詢出的結果是元組形式,元組和列表基本一樣#cursor = conn.cursor(cursorss = mysqldb.cursors.dictcursor)#查詢結果是字典形式sql = "select host,user from mysql.user where host=\''%s\''" % ip#python中執行sql語句一次隻能是一個sql語句,一次隻執行一條,如果用分號分開寫多條的話是會報錯的,如果是多條sql語句可以多寫幾個sql和cursor.execute來分開執行cursor.execute(sql)#執行sql語句#cursor.executemany("""insert into dist_sniffer.sniffer_order_day values(%s,%s,%s,%s,%s,%s,%s,%s,%s) """,values)#執行組合插入數據庫的時候可以用這個,每個%s代表一個數據庫字段,values是一個元組或是一個列表alldata = cursor.fetchall#接收sql執行結果,如果是寫操作的,這個就不用了#connmit如果是寫操作,需要這個去提交cursor.closeconn.close#關閉數據庫回話return alldata[0][0].encode(\''utf8\'')#如果是寫操作的話就沒有返回值了。    except exception,e:return 0def get_ip:    os = tform.system    if os == "linux":ip = os.popen("/sbin/ifconfig eth0|grep \'' addr\''").read.strip.split(":")[1].split[0]    elif os == "windows":import wmic=wmi.wmwork = c.win32workadapterconfiguration (ipenabled=1)for interface inwork:    if interface.defaultipgateway:ip = interface.ipaddress[0]return ip#print interface.ipaddress[0],interface.macaddress,interface.ipsu[0],interface.defaultipgateway[0],interface.dnsserversearchorder[0],interface.dnsserversearchorder[1]#獲取出網的ip地址、mac地址、子網掩碼、默認網關、dnsdef web_status:    ip = get_ip    idc_name = get_iame(ip)    url = "http://.text/index.php?idc_ip=%s&idc_name=%s" % (ip,idc_name)    get = urllib.urlopen(url)    if get.getcode == 200:aa = int(get.read.strip)if aa == 1:    text = "webservice return ok"else:    text =  "webservice return error"    else:text = "conect webservice error"    print text    log_w(text)if __name__ == "__main__":    web_status </pre>


    一開始就要養成一個好習慣,這樣對以後 python 編程是十分有益的。自己的深切體會。

章節目錄

閱讀記錄

Python實戰-從菜鳥到大牛的進階之路所有內容均來自互聯網,鉛筆小說網隻為原作者極客學院的小說進行宣傳。歡迎各位書友支持極客學院並收藏Python實戰-從菜鳥到大牛的進階之路最新章節