爲何說」人生苦短,我用python「?

本文不扯什麼大道理,只是先介紹Python的背景,而後從實用的角度出發舉一兩個真實栗子。html

首先要想了解要一門語言的好壞,或者爲何招程序員喜歡(臥槽,原來程序員喜歡不是女友?)咱們的先從語言的產生背景開始,好比:他出如今什麼年代,爲了解決什麼問題而出現的等。固然我也只是跟其餘語言作一個比較,不討論誰好誰壞,再說語言也沒有什麼好壞之分,就算有好壞之分,也得從實際應用場景出發,全部咱們不討論這個問題。java

好,好,大兄弟大家都消消氣,上面我扯的太多了,下面直接上重點…python

1. Question

首先仍是按照慣例,上來幾個問題,這樣能讓初學者一目瞭然,有個大概的認識git

1.1 Python是什麼程序員

是一種面向對象、解釋型計算機程序設計語言,由Guido van Rossum於1989年聖誕節爲打發無聊時間,而開發的一個新的腳本解釋程序,能夠感受下什麼叫牛人,是ABC語言的一種繼承,至於爲何選中Python做爲語言名字,是由於他是一叫Monty Python的喜劇團體的愛好者,第一個公開發行版發行於1991年。sql

他的設計哲學是數據庫

優雅
明確
簡單
徹底的面向對象。函數,模塊,數字,字符串都是對象,不想Java中還有基本類型,在Python中一切皆對象,那做爲程序員的咱們懼怕找到對象嗎,直接New一個呀,呵呵apache

1.2 人們爲何用Python編程

這個問題每每是入門者第一個問題,對此我在一本書找到了這樣的解答:windows

軟件質量
開發這效率
程序的可移植性 
衆多標準庫支持 
組件集成 
享受樂趣
其餘的不用多講,須要詳細瞭解的能夠搜索下,我只是提供你們幾個方面讓你們瞭解,由於每每對於初學者,是迷茫的,由於不支持從什麼方向去了解一個事物,而我就是提供方向的,具體的你們能夠本身去了解。我只說下最後一個,詳細的能夠參考下這篇文章每一個程序員都應該學習使用 Python或Ruby文章裏面也說的很明白,我總結幾點就是

代碼量小
維護成本低
編程效率高
同同樣問題,用不一樣的語言解決,代碼量差距太多了,通常狀況下python是java的1/5,因此說人數苦短,我用python,多留點時間泡妹子吧,否則就老了

1.3 Python是腳本語言嗎

他是一種多用戶語言,至於爲何你們的第一感受是腳本語言,我是由於人們看他的他直接寫一個文件,不須要什麼編譯,跟腳本似得,直接運行的就好了。因此說我也很難給你一個肯定答案,我就舉一些常見的應用場景:

腳本:能夠寫一些輔助本身開的腳本,就好比,Android開發,會涉及到一經常使用的命令,可是若是是在windows用bat寫,這樣弄到mac就無法運行的,因此能夠用,python寫。另外若是你是服務器管理員,那麼python腳本很適合你,程序長了用bash寫,你會砸電腦的
網站開發:他有強大的Django,Flask框架
科學計算:有Numpy和Matlab同樣強的數值計算接口
圖形界面程序開發:這個不用多解釋,就是常見的那種界面啦

2. Python版Hello World

一般任何一門語言都有一個hello world的過程,呵呵,因此說咱們這裏也同樣,由於經過他你會學習到該語言的一個最基本的程序框架和運行過程,這對應初學者纔是最重要的。

既然前面也說了,能夠把他當腳本語言,那咱們就來個最簡單的,操做步驟以下:

在你的工做目錄下建立一個hello.py文件,別問我你不知道工做目錄是什麼,那你該學學計算機基礎了

在該文件裏寫入

print 'hello world'

打開命令行,輸入:

python hello.py

順利的話你會看到hello world的輸出,是否是感受好簡單,對,你沒看錯,就這麼簡單,如今你能夠說你是一個python程序員了,呵呵~

3. Example

這裏就舉一個我最近實際應用中的例子,是什麼呢,施主莫急,聽平僧慢慢到來。場景是這樣的最近一個日記軟件自己的客戶端不能用了,可是數據在sqlite數據庫裏呀,咱們的需求是將裏面的一些數據導出爲txt文件,怎麼這需求簡單吧

3.1 Python

首先用python來解決這個問題,據跟上面的描述,咱們很清楚的想到以下步驟:

鏈接sqlite3數據庫
執行查詢語句
打開文件
將查詢的接口寫入的剛剛打開的文件中
關閉數據
關閉文件

呵呵,我有想到了,讓程序員把大象放到冰箱的故事了,能夠參考這篇文章拖放三部曲——從「把大象放進冰箱」提及

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

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

import sqlite3
import HTMLParser
import codecs
import time

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

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

print "Opened database successfully";

#執行查詢語句,返回一個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)

    #由於原理的內容是通過html轉義了,因此要轉回來,形如:今天,
    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() ## 關閉數據庫
f.close() #關閉文件
print "Operation done successfully";

至於邏輯,我在上面步驟也寫的很清楚了,另外程序也謝了很詳細的註釋,因此說就算你不懂python也能很容易的看懂。

能夠看到咱們大概只用了50行代碼就完成了,這個小需求,可是若是用Java是什麼結果呢

3.2 Java

首先的咱們的找一個開發工具,就eclipse吧。建立一個項目,而後添加一個TestMan.java

工程結構以下:

在TestMan.java中寫一個基本的程序框架

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

臥槽,這麼麻煩,搞了半天才把架子搭好,說實話Java確實中規中矩,幹什麼你都得按照他的那一套來,因此說呢,咱們就不能直接貼代碼了,步驟還得細分了,啥?

鏈接sqlite3數據庫 
經過JDBC鏈接:可是由於jdbc(Java Data Base Connectivity,java數據庫鏈接)是java鏈接數據庫的一套抽象設計API,既然是抽象的因此是不能直接使用,要找到他的實現,既然是鏈接sqlite因此應該去sqlite官網或者從bitbucket這裏下載,我下載的版本是sqlite-jdbc-3.8.11.2,下載完後將他放到eclipse的環境變量裏,下載才把準備工做作完,下面纔開始寫代碼
執行查詢語句
打開文件
將查詢的接口寫入的剛剛打開的文件中
關閉數據
關閉文件

如今咱們直接上代碼了

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("              ");

                // 轉義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();
            }
        }
    }
}

如今你們能夠看見了java和python的區別了吧,在java中什麼功能也提供了,可是得引用各類jar,還獲得處找去搜索或下載啦,各類肯爹,不過在python中不少經常使用庫已經內置了,因此省去了不少麻煩,因此說以我我的感受,python個適合解決工做中的一些小問題,固然大問題也是麼有問題的啦~,文章到此基本結束了,固然我也沒有偏袒那一面,另外我也是隻是從個人工做或學習中獲得的一些小領悟特此總結此處,若是你們有什麼好的看法歡迎評論吐槽~

原文連接:

https://blog.csdn.net/woblog/article/details/51051809

-END-


  識別圖中二維碼,領取python全套視頻資料

相關文章
相關標籤/搜索