Day1-python理論基礎

来源:http://www.cnblogs.com/Merlin-li/archive/2017/01/10/6270913.html
-Advertisement-
Play Games

一、python介紹 Python 的創始人為Guido van Rossum。Guido為了打發聖誕節的無趣,於1989年發明,在荷蘭國家數學和電腦科學研究所設計出來的(作為ABC 語言的一種繼承),之所以起名Python,是因他是Monty Python的喜劇團體的愛好者。Python第一個公 ...


 一、python介紹

  Python 的創始人為Guido van Rossum。Guido為了打發聖誕節的無趣,於1989年發明,在荷蘭國家數學和電腦科學研究所設計出來的(作為ABC 語言的一種繼承),之所以起名Python,是因他是Monty Python的喜劇團體的愛好者。Python第一個公開發行版發行於1991年。現在,全世界差不多有600多種編程語言,但流行的編程語言也就那麼20來種。如果聽說過TIOBE排行榜,那就一定可以知道編程語言的大致流行程度。下圖是2017年最新發佈的編程語言排行榜 TOP20 榜單,可以很明顯的看出python已經越來越得到開發人員的認可。

  上圖中排名前五的語言中,C、C++、C#都是編譯型語言,python與java則都是解釋型語言,那麼什麼是編譯型語言,什麼是解釋型語言?

  編譯型語言:程式在執行之前需要一個專門的編譯過程,把程式編譯成為機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。

        優點是只需要編譯一次,運行時不需要編譯,所以程式執行效率高,缺點相對就很明顯,跨平臺性差,要針對不同平臺生成不同的執行文件。

  解釋型語言:程式不需要編譯,程式在運行時才翻譯成機器語言,每執行一次都要翻譯一次。

        優點是有良好的平臺相容性,直接修改代碼後快速部署就可以直接運行,缺點是由於每次運行都需要編譯一次,性能上相對編譯型語言自然就會差一些。

  二、python的優缺點

  python的優點:

  1、簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣。它使你能夠專註於解決問題而不是去搞明白語言本身。
  2、易學:Python極其容易上手,因為Python有極其簡單的說明文檔。
  3、速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,運行速度非常快。
  4、免費、開源:Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發佈這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
  5、高層語言:用Python語言編寫程式的時候無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。
  6、可移植性:由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。
  7、解釋性:一個用編譯性語言比如C或C++寫的程式可以從源文件(即C或C++語言)轉換到一個你的電腦使用的語言(二進位代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。
  8、面向對象:Python既支持面向過程的編程也支持面向對象的編程。
  9、可擴展性:如果需要一段關鍵代碼運行得更快或者希望某些演算法不公開,可以部分程式用C或C++編寫,然後在Python程式中使用它們。
  10、可嵌入性:可以把Python嵌入C/C++程式,從而向程式用戶提供腳本功能。
  11、規範的代碼:Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程式不需要編譯成二進位代碼。

  python的缺點:

  1、單行語句和命令行輸出問題:很多時候不能將程式連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程式,不需要如Python一樣,必須將程式寫入一個.py文件。
  2、運行速度慢:這裡是指與C和C++相比。
  3、代碼無法加密。

三、python2.7 or python3.x

  其實對於python的版本選擇,由於以前工作的時候做的工作都是和python2.7打交道所以一直使用的是python2.7;選擇3.x的原因主要有幾點,首先2.7版本於2020年將停止更新服務,再者3.x的相容性、編碼等原因。

四、安裝python

  windows下安裝python

    下載安裝包:

      https://www.python.org/downloads/

 

    安裝:

      預設安裝路徑:

      C:\PYTHON35

 

    配置環境變數:

      1. 右鍵電腦;
      2. 屬性;
      3. 高級系統設置;
      4. 高級;
      5. 環境變數;
      6. 在第二個框中找到Path雙擊;
      7. 將python安裝目錄追加到值中,用;分隔。


五、Hello World!

  新建一個hello.py 文件,並輸入:

    print("Hello World")

  在命令行中執行命令:

    python hello.py

  即可看到系統返回:

       E:\>python hello.py
       Hello World!

 六、變數

  1、變數的作用:    

    變數是只不過保留的記憶體位置用來存儲值。這意味著,當創建一個變數,那麼它在記憶體中保留一些空間。

 

    根據一個變數的數據類型,解釋器分配記憶體,並決定如何可以被存儲在所保留的記憶體中。因此,通過分配不同的數據類型的變數,你可以存儲整數,小數或字元在這些變數中。

 

  2、變數賦值:

 

    Python的變數不必顯式地聲明保留的存儲器空間。當分配一個值給一個變數的聲明將自動發生。等號(=)來賦值給變數。

    操作數=操作符的左邊是變數,操作數=操作符的右側的名稱在變數中存儲的值。例如:

 

      counter = 100          
      miles   = 1000.0       
      name    = "John"      

  3、命名規則:

    變數名只能是字母、數字或者下劃線的任意組合,並且首字母不能是數字,同時也不可以使用以下關鍵字聲明變數:

    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import','in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

七、編碼格式

  1. ASCII

    ASCII(American Standard Code for Information Interchange),是一種單位元組的編碼。電腦世界里一開始只有英文,而單位元組可以表示256個不同的字元,可以表示所有的英文字元和許多的控制 符號。不過ASCII只用到了其中的一半(\x80以下),這也是MBCS得以實現的基礎。

  2. MBCS

    然而電腦世界里很快就有了其他語言,單位元組的ASCII已無法滿足需求。後來每個語言就制定了一套自己的編碼,由於單位元組能表示的字元太少,而且同時也需要與ASCII編碼保持相容,所以這些編碼紛紛使用了多位元組來表示字元,如GBxxx、BIGxxx等等,他們的規則是,如果第一個位元組是\x80以下,則仍然表示ASCII字元;而如果是\x80以上,則跟下一個位元組一起(共兩個位元組)表示一個字元,然後跳過下一個位元組,繼續往下判斷。

    這裡,IBM發明瞭一個叫Code Page的概念,將這些編碼都收入囊中並分配頁碼,GBK是第936頁,也就是CP936。所以,也可以使用CP936表示GBK。

    MBCS(Multi-Byte Character Set)是這些編碼的統稱。目前為止大家都是用了雙位元組,所以有時候也叫做DBCS(Double-Byte Character Set)。必須明確的是,MBCS並不是某一種特定的編碼,Windows里根據你設定的區域不同,MBCS指代不同的編碼,而Linux里無法使用 MBCS作為編碼。在Windows中你看不到MBCS這幾個字元,因為微軟為了更加洋氣,使用了ANSI來嚇唬人,記事本的另存為對話框里編碼ANSI就是MBCS。同時,在簡體中文Windows預設的區域設定里,指代GBK。

  3. Unicode

    後來,有人開始覺得太多編碼導致世界變得過於複雜了,讓人腦袋疼,於是大家坐在一起拍腦袋想出來一個方法:所有語言的字元都用同一種字元集來表示,這就是Unicode。

    最初的Unicode標準UCS-2使用兩個位元組表示一個字元,所以你常常可以聽到Unicode使用兩個位元組表示一個字元的說法。但過了不久有人覺得256*256太少了,還是不夠用,於是出現了UCS-4標準,它使用4個位元組表示一個字元,不過我們用的最多的仍然是UCS-2。

    UCS(Unicode Character Set)還僅僅是字元對應碼位的一張表而已,比如"漢"這個字的碼位是6C49。字元具體如何傳輸和儲存則是由UTF(UCS Transformation Format)來負責。

    一開始這事很簡單,直接使用UCS的碼位來保存,這就是UTF-16,比如,"漢"直接使用\x6C\x49保存(UTF-16-BE),或是倒過來使用\x49\x6C保存(UTF-16-LE)。但用著用著美國人覺得自己吃了大虧,以前英文字母只需要一個位元組就能保存了,現在大鍋飯一吃變成了兩個位元組,空間消耗大了一倍……於是UTF-8橫空出世。

    UTF-8是一種很彆扭的編碼,具體表現在他是變長的,並且相容ASCII,ASCII字元使用1位元組表示。然而這裡省了的必定是從別的地方摳出來 的,你肯定也聽說過UTF-8里中文字元使用3個位元組來保存吧?4個位元組保存的字元更是在淚奔……(具體UCS-2是怎麼變成UTF-8的請自行搜索)

    另外值得一提的是BOM(Byte Order Mark)。我們在儲存文件時,文件使用的編碼並沒有保存,打開時則需要我們記住原先保存時使用的編碼並使用這個編碼打開,這樣一來就產生了許多麻煩。 (你可能想說記事本打開文件時並沒有讓選編碼?不妨先打開記事本再使用文件 -> 打開看看)而UTF則引入了BOM來表示自身編碼,如果一開始讀入的幾個位元組是其中之一,則代表接下來要讀取的文字使用的編碼是相應的編碼:

BOM_UTF8 '\xef\xbb\xbf' 

BOM_UTF16_LE '\xff\xfe' 

BOM_UTF16_BE '\xfe\xff'

    並不是所有的編輯器都會寫入BOM,但即使沒有BOM,Unicode還是可以讀取的,只是像MBCS的編碼一樣,需要另行指定具體的編碼,否則解碼將會失敗。

 

八、數據類型:

  1、數字

    int(整型):

      在32位機器上,整數的位數為32位,取值的範圍為-2**31 ~2**31-1,即-2147483648~2147483648

      在64位機器上,整數的位數為64位,取值的範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807

    long(長整型):

      和C語言不通,python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器記憶體有限,我們使用的長整數數值不可能無限大。

      在Python2.2開始,如果整數發生溢出,Python會自動將整數數據轉換為長整數,所以如今在長整數數字後面不加字母L也不會導致嚴重後果。

    float(浮點型):

      浮點數用於處理實數,也就是帶有小數的數字,占用8個位元組(64位),其中52位表示低,11位表示指數,剩下的一位表示符號。

    complex(複數):

      複數是由實數部分和虛數部分組成,一般形式為x+yj,其中x是複數的實數部分,y是複數的虛數部分,這裡的x和y都是實數。

  2、布爾值

    真或假  True  False

  3、字元串

    Python中最常用的數據類型,可以使用引號('或“)來創建字元串。

  var1 = 'Hello World'
  var2 = "Python"

    下麵介紹一下字元串常用的幾個功能:

    (1)移除空白

    strip()方法可以移除字元串中頭尾指定的字元,當括弧中為空的時候預設為空格,如下所示:

    >>> s = '   abc'
    >>> s.strip()
    'abc'

    也可以在括弧中指定一個值,如下所示:

    >>> str = "0000000this is string example....wow!!!0000000";
    >>> str.strip('0')
    'this is string example....wow!!!'

    (2)分割

    split()方法通過制定分隔符,對字元串進行切片,如果參數num有置頂值,則只分隔num個字元串

    split()的語法:

    str.split(str="", num=string.count(str)).

    實例:

    >>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
    >>>
    >>> str.split()
    ['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
    >>>
    >>> str.split(' ',1)
    ['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

    (3)長度

    len()可以輸出字元串的長度

    >>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
    >>> len(str)
    35

    (4)索引

    索引獲取特定偏移的元素:

    字元串中第一個元素的偏移為0,字元串中最後一個元素的偏移為-1,str[0]獲取第一個元素,str[-2]獲取倒數第二個元素。

  >>> str='abcd'
  >>> str[0]
  'a'
  >>> str[-1]
  'd'
  >>> str[-2]
  'c'

    (5)切片

    通常上邊界不包括在提取字元串內,如果沒有指定值,則分片的邊界預設為0和序列的長度

    str[1:3]獲取從偏移為1的字元一直到偏移為3的字元串,不包括偏移為3的字元串 “tr”
    str[1:] 獲取從偏移為1的字元一直到字元串的最後一個字元(包括最後一個字元) “tring”
    str[:3] 獲取從偏移為0的字元一直到偏移為3的字元串,不包括偏移為3的字元串 “str”
    str[:-1] 獲取從偏移為0的字元一直到最後一個字元(不包括最後一個字元串) “strin”
    str[:] 獲取字元串從開始到結尾的所有元素 “string”
    str[-3:-1] 獲取偏移為-3到偏移為-1的字元,不包括偏移為-1的字元 “in”
    str[-1:-3]和str[2:0] 獲取的為空字元,系統不提示錯誤 “”
    分片的時候還可以增加一個步長,str[::2] 輸出的結果為 “srn”

    (6)格式化輸出 

    1. 列印字元串

  >>> print ("His name is %s"%("Aviad"))
  His name is Aviad

    2.列印整數

  >>> print ("He is %d years old"%(25))
  He is 25 years old

    3.列印浮點數

    >>> print ("His height is %f m"%(1.83))
    His height is 1.830000 m

    4.列印浮點數(指定保留小數點位數)

  >>> print ("His height is %.2f m"%(1.83))
  His height is 1.83 m

    5.指定占位符寬度

  >>> print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
  Name: Aviad Age: 25 Height: 1.83

     6.指定占位符寬度(左對齊)

  >>> print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
  Name:Aviad Age:25 Height:1.83

    7.指定占位符(只能用0當占位符?)

  >>> print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
  Name:Aviad Age:00000025 Height:00001.83

    8.科學計數法 

  >>> format(0.0015,'.2e')
  '1.50e-03'

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 20170110問題解析請點擊今日問題下方的“【Java每日一題】20170111”查看(問題解析在公眾號首發,公眾號ID:weknow619) 今日問題: 請問主程式有無編譯錯誤?(點擊以下“【Java每日一題】20170111”查看20170110問題解析) 題目原發佈於公眾號、簡書:【Java ...
  • 進程相關的概念 程式與進程 程式,是指編譯好的二進位文件,在磁碟上,不占用系統資源(CPU、記憶體、打開的文件、設備、鎖等等)。 進程,是一個抽象的概念,與操作系統原理聯繫緊密。進程是活躍的程式,占用系統資源。在記憶體中執行(程式運行起來,產生一個進程)。 程式 --> 劇本(紙),進程 -->戲(舞臺 ...
  • 通過前面幾章,我們已經掌握了一些基本的開發知識,但是代碼結構比較簡單,缺乏統一的標準,模塊化,也缺乏統一的異常處理,這一章我們主要來學習如何封裝一個輕量級的MVC框架,規範以及簡化開發,並且提供類似php所見即所得的能力 統一入口 通常來說一個mvc框架會有一個統一的入口點,類似於spring mv ...
  • 最近用springmvc spring mybatis框架寫程式,請求成功並獲得數據,唯獨css樣式不能載入,但路徑正確,css文件編碼也是utf-8,用火狐debug總是顯示未請求到(都快懷疑自己寫路徑有問題了),今天終於搞定了。發現三種解決方式,但有一個我不知道什麼原因用不了。 方案一(個人認為 ...
  • Java 中的 static 使用之靜態方法 Java 中的 static 使用之靜態方法 1、 靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。如: 如果希望在靜態方法中調用非靜態變數,可以通過創建類的對象,然後通過對象來訪問非靜態變數。如: 2、 在普通成員方法中,則可以直接訪 ...
  • 知識點: 文件讀,寫操作,if 判斷, for 迴圈 salary = input("輸入你的工資:") bought_list = [] product_list = {} with open("product_list","r",encoding="utf-8") as f1: for item ...
  • Hibernate3 第二天 第一天回顧: 三個準備 創建資料庫 準備po和hbm文件 準備靈魂文件hibernate.cfg.xml 七個步驟 1 載入配置文件Configuration 2 創建會話工廠SessionFactory 3 獲取連接Session 4 開啟事務Transaction ... ...
  • 上篇我們學會瞭如何使用及定義變數。按照尿性,一般接下來就該學基本數據類型的運算了。 沒錯,本篇就仍是這麼俗套的來講講這無聊但又必學的基本數據類型的運算了。 基本數據類型運算 操作符 符號 | 語義 | 描述 | | + | 加 | 10+10,結果為20 | 減 | 10 3, 結果為7 | 乘 | ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...