為什么說”人生苦短,我用python“

首先我們要說明的是本文不扯什么大道理,只是先介紹Python的背景,然后從實(shí)用的角度出發(fā)舉一兩個(gè)真實(shí)栗子。

這里寫圖片描述

首先要想了解要一門語(yǔ)言的好壞,或者為什么招程序員喜歡(臥槽,原來程序員喜歡不是女朋友?)我們的先從語(yǔ)言的產(chǎn)生背景開始,比如:他出現(xiàn)在什么年代,為了解決什么問題而出現(xiàn)的等。當(dāng)然我也只是跟其他語(yǔ)言做一個(gè)比較,不討論誰(shuí)好誰(shuí)壞,再說語(yǔ)言也沒有什么好壞之分,就算有好壞之分,也得從實(shí)際應(yīng)用場(chǎng)景出發(fā),所有我們不討論這個(gè)問題。

這里寫圖片描述

好,好,大兄弟你們都消消氣,上面我扯的太多了,下面直接上重點(diǎn)...

1. Question

首先還是按照慣例,上來幾個(gè)問題,這樣能讓初學(xué)者一目了然,有個(gè)大概的認(rèn)識(shí)

1.1 Python是什么

是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由Guido van Rossum于1989年圣誕節(jié)為打發(fā)無聊時(shí)間,而開發(fā)的一個(gè)新的腳本解釋程序,可以感覺下什么叫牛人,是ABC語(yǔ)言的一種繼承,至于為什么選中Python作為語(yǔ)言名字,是因?yàn)樗且唤蠱onty Python的喜劇團(tuán)體的愛好者,第一個(gè)公開發(fā)行版發(fā)行于1991年。

他的設(shè)計(jì)哲學(xué)是

  • 優(yōu)雅
  • 明確
  • 簡(jiǎn)單

完全的面向?qū)ο蟆:瘮?shù),模塊,數(shù)字,字符串都是對(duì)象,不想Java中還有基本類型,在Python中一切皆對(duì)象,那作為程序員的我們害怕找到對(duì)象嗎,直接New一個(gè)呀,呵呵

這里寫圖片描述

1.2 人們?yōu)槭裁从肞ython

這個(gè)問題往往是入門者第一個(gè)問題,對(duì)此我在一本書找到了這樣的解答:

軟件質(zhì)量
開發(fā)這效率
程序的可移植性
眾多標(biāo)準(zhǔn)庫(kù)支持
組件集成
享受樂趣

其他的不用多講,需要詳細(xì)了解的可以搜索下,我只是提供大家?guī)讉€(gè)方面讓大家了解,因?yàn)橥鶎?duì)于初學(xué)者,是迷茫的,因?yàn)椴恢С謴氖裁捶较蛉チ私庖粋€(gè)事物,而我就是提供方向的,具體的大家可以自己去了解。我只說下最后一個(gè),詳細(xì)的可以參考下這篇文章每個(gè)程序員都應(yīng)該學(xué)習(xí)使用 Python或Ruby文章里面也說的很明白,我總結(jié)幾點(diǎn)就是

  • 代碼量小
  • 維護(hù)成本低
  • 編程效率高

同一樣問題,用不同的語(yǔ)言解決,代碼量差距太多了,一般情況下python是java的1/5,所以說人數(shù)苦短,我用python,多留點(diǎn)時(shí)間泡妹子吧,不然就老了

這里寫圖片描述

1.3 Python是腳本語(yǔ)言嗎

·
他是一種多用戶語(yǔ)言,至于為什么大家的第一感覺是腳本語(yǔ)言,我是因?yàn)槿藗兛此乃苯訉懸粋€(gè)文件,不需要什么編譯,跟腳本似得,直接運(yùn)行的就行了。所以說我也很難給你一個(gè)確定答案,我就舉一些常見的應(yīng)用場(chǎng)景:

  • 腳本:可以寫一些輔助自己開的腳本,就比如,Android開發(fā),會(huì)涉及到一常用的命令,但是如果是在windows用bat寫,這樣弄到mac就沒法運(yùn)行的,所以可以用,python寫。另外如果你是服務(wù)器管理員,那么python腳本很適合你,程序長(zhǎng)了用bash寫,你會(huì)砸電腦的
  • 網(wǎng)站開發(fā):他有強(qiáng)大的Django,F(xiàn)lask框架
  • 科學(xué)計(jì)算:有Numpy和Matlab一樣強(qiáng)的數(shù)值計(jì)算接口
  • 圖形界面程序開發(fā):這個(gè)不用多解釋,就是常見的那種界面啦

2. Python版Hello World

通常任何一門語(yǔ)言都有一個(gè)hello world的過程,呵呵,所以說我們這里也一樣,因?yàn)橥ㄟ^他你會(huì)學(xué)習(xí)到該語(yǔ)言的一個(gè)最基本的程序框架和運(yùn)行過程,這對(duì)應(yīng)初學(xué)者才是最重要的。

既然前面也說了,可以把他當(dāng)腳本語(yǔ)言,那我們就來個(gè)最簡(jiǎn)單的,操作步驟如下:

  1. 在你的工作目錄下創(chuàng)建一個(gè)hello.py文件,別問我你不知道工作目錄是什么,那你該學(xué)學(xué)計(jì)算機(jī)基礎(chǔ)了

  2. 在該文件里寫入

print 'hello world'
  1. 打開命令行,輸入:
python hello.py

順利的話你會(huì)看到hello world的輸出,是不是感覺好簡(jiǎn)單,對(duì),你沒看錯(cuò),就這么簡(jiǎn)單,現(xiàn)在你可以說你是一個(gè)python程序員了,呵呵~

3. Example

這里就舉一個(gè)我最近實(shí)際應(yīng)用中的例子,是什么呢,施主莫急,聽平僧慢慢到來。場(chǎng)景是這樣的最近一個(gè)日記軟件本身的客戶端不能用了,但是數(shù)據(jù)在sqlite數(shù)據(jù)庫(kù)里呀,我們的需求是將里面的一些數(shù)據(jù)導(dǎo)出為txt文件,怎么這需求簡(jiǎn)單吧

3.1 Python

首先用python來解決這個(gè)問題,據(jù)跟上面的描述,我們很清楚的想到如下步驟:

  1. 連接sqlite3數(shù)據(jù)庫(kù)
  2. 執(zhí)行查詢語(yǔ)句
  3. 打開文件
  4. 將查詢的接口寫入的剛剛打開的文件中
  5. 關(guān)閉數(shù)據(jù)
  6. 關(guān)閉文件

呵呵,我有想到了,讓程序員把大象放到冰箱的故事了,可以參考這篇文章拖放三部曲——從“把大象放進(jìn)冰箱”說起

好了,不廢話了,直接上代碼

#!/usr/bin/python
# -*- coding: cp936 -*-

import sqlite3
import HTMLParser
import codecs
import time

f=codecs.open('note.txt','a',"utf-8") #以追加方式打開一個(gè)文件

conn = sqlite3.connect('note.db') #打開sqlite數(shù)據(jù)庫(kù)

print "Opened database successfully";

#執(zhí)行查詢語(yǔ)句,返回一個(gè)cursor
cursor = conn.execute("select created,weather,address,latitude,longitude,content from tb_notescontents,tb_notes where tb_notescontents.note_guid=tb_notes.guid")

#遍歷每一行
for row in cursor:
  
    #取出改行的每一列
    created= row[0]
    weather= row[1]
    address= row[2]
    latitude= row[3]
    longitude= row[4]
    content= row[5]

    html_parser = HTMLParser.HTMLParser()

    d = time.localtime(created/1000)
    currentTime = time.strftime('%Y-%m-%d %H:%M:%S',d)

    #因?yàn)樵淼膬?nèi)容是經(jīng)過html轉(zhuǎn)義了,所以要轉(zhuǎn)回來,形如:今天,
    weather = html_parser.unescape(weather) 
    address = html_parser.unescape(address) 
    content = html_parser.unescape(content) 

    
    f.write(currentTime) #寫入文件
    f.write('              ')
    f.write(weather)
    f.write('              ')
    f.write(address)
    f.write('              ')
    f.write(content)

    f.write('\n')
    f.write('\n')
    f.write('\n')

conn.close() ## 關(guān)閉數(shù)據(jù)庫(kù)
f.close() #關(guān)閉文件
print "Operation done successfully";

至于邏輯,我在上面步驟也寫的很清楚了,另外程序也謝了很詳細(xì)的注釋,所以說就算你不懂python也能很容易的看懂。

可以看到我們大概只用了50行代碼就完成了,這個(gè)小需求,但是如果用Java是什么結(jié)果呢

3.2 Java

首先的我們的找一個(gè)開發(fā)工具,就eclipse吧。創(chuàng)建一個(gè)項(xiàng)目,然后添加一個(gè)TestMan.java

工程結(jié)構(gòu)如下:

這里寫圖片描述

在TestMan.java中寫一個(gè)基本的程序框架

public class TestMain {
    public static void main(String[] args) {
        
    }
}

臥槽,這么麻煩,搞了半天才把架子搭好,說實(shí)話Java確實(shí)中規(guī)中矩,干什么你都得按照他的那一套來,所以說呢,我們就不能直接貼代碼了,步驟還得細(xì)分了,啥?

  1. 連接sqlite3數(shù)據(jù)庫(kù)
    通過JDBC連接:但是因?yàn)閖dbc(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是java連接數(shù)據(jù)庫(kù)的一套抽象設(shè)計(jì)API,既然是抽象的所以是不能直接使用,要找到他的實(shí)現(xiàn),既然是連接sqlite所以應(yīng)該去sqlite官網(wǎng)或者從bitbucket這里下載,我下載的版本是sqlite-jdbc-3.8.11.2,下載完后將他放到eclipse的環(huán)境變量里,下載才把準(zhǔn)備工作做完,下面才開始寫代碼
  2. 執(zhí)行查詢語(yǔ)句
  3. 打開文件
  4. 將查詢的接口寫入的剛剛打開的文件中
  5. 關(guān)閉數(shù)據(jù)
  6. 關(guān)閉文件

現(xiàn)在我們直接上代碼了

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.lang3.StringEscapeUtils;

public class TestMain {
    public static void main(String[] args) {
        // load the sqlite-JDBC driver using the current class loader

        Connection connection = null;
        BufferedWriter bufferedWriter = null;
        try {
            Class.forName("org.sqlite.JDBC");
            // create a database connection
            connection = DriverManager.getConnection("jdbc:sqlite:note.db");
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30); // set timeout to 30 sec.

            ResultSet rs = statement
                    .executeQuery("select created,weather,address,latitude,longitude,content from tb_notescontents,tb_notes where tb_notescontents.note_guid=tb_notes.guid");

            bufferedWriter = new BufferedWriter(
                    new FileWriter("note.txt", true));
            while (rs.next()) {
                // read the result set

                String created = rs.getString("created");
                String weather = rs.getString("weather");
                String address = rs.getString("address");
                String latitude = rs.getString("latitude");
                String longitude = rs.getString("longitude");
                String content = rs.getString("content");

                // write to file
                bufferedWriter.write(created); // 寫入文件
                bufferedWriter.write("              ");
                bufferedWriter.write(weather);
                bufferedWriter.write("              ");
                bufferedWriter.write(address);
                bufferedWriter.write("              ");

                // 轉(zhuǎn)義html,可以看到我們又引用了commons-lang jar包
                content = StringEscapeUtils.unescapeHtml4(content);

                bufferedWriter.write(content);

                bufferedWriter.newLine();
            }
        } catch (SQLException e) {
            // if the error message is "out of memory",
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (connection != null)
                    connection.close();
            } catch (SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
            try {
                if (bufferedWriter != null) {
                    bufferedWriter.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

現(xiàn)在大家可以看見了java和python的區(qū)別了吧,在java中什么功能也提供了,但是得引用各種jar,還得到處找去搜索或下載啦,各種肯爹,不過在python中很多常用庫(kù)已經(jīng)內(nèi)置了,所以省去了很多麻煩,所以說以我個(gè)人感覺,python個(gè)適合解決工作中的一些小問題,當(dāng)然大問題也是么有問題的啦,文章到此基本結(jié)束了,當(dāng)然我也沒有偏袒那一面,另外我也是只是從我的工作或?qū)W習(xí)中得到的一些小領(lǐng)悟特此總結(jié)此處,如果大家有什么好的見解歡迎評(píng)論吐槽

感謝:
java連接sqlite參考:http://blog.csdn.net/litaoshoujiao/article/details/8535444

commom-lang:http://commons.apache.org/proper/commons-lang/download_lang.cgi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容