Python(一)-基礎不牢,地動山搖

第1章 Python介紹

1.1 python應用領域

  python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域,目前業內幾乎全部大型互聯網企業都在時用python。java

1.1.1 目前python主要領域

  • 雲計算:雲計算最火的語言,典型應用openstack。
  • WEB開發:衆多優秀的web框架,衆多大型網站均爲python開發,典型web框架Django。
  • 科學運算、人工智能:典型開發庫numpy、scipy、matplotlib、enthought、libarys、pandas等。
  • 系統運維:自動化開發。
  • 金      融:量化交易、金融分析,不只僅在用python,還在逐年提升,緣由就是做爲動態語言的python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c、c++、java,尤爲是擅長策略回測。

1.2 python是一門什麼樣的語言?

  編程語言主要從如下幾個角度進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明的意思以下:python

1.2.1 編譯和解釋的區別

  由於計算機不能直接認識並執行咱們寫的語言代碼,它只能認識機器語言,既0、1代碼二進制的形式。linux

  一、編譯器

   是吧源代碼的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以計算機語言來運行此程序,速度很快。c++

   舉個栗子:中國人和美國人對話,因爲語言的不通,須要一個翻譯,中國人有錢就僱一個翻譯來進行翻譯語言,即這個翻譯就是編譯器,中國人每說一次過後,翻譯官是將中國人全部說的話提早翻譯好成英文,並寫在文件中,而後交給美國人看,這樣美國人就很快的而且以母語的形式方便看完。這就叫編譯型,一次性提早編譯好。web

  二、解釋器

   解釋器是在執行程序時,才一條一條的解釋成機器語言給計算機逐一執行,因此運行速度相對編譯後的程序運行的慢。算法

   舉個栗子:仍是一箇中國人和美國人,在交流的時候在現場有個翻譯官,中國人說一句,翻譯官翻譯一句,即翻譯官就是解釋器。編程

1.2.2 低級語言和高級語言

  一、低級語言

   一句話說,低級語言就是面向機器、更接近底層的語言。c#

   即0、1序列表示的機器指令都是用來符號助記,這些與機器指令一一對應的助記符就時彙編指令,不管是機器指令仍是彙編指令都是面向機器的,統稱爲低級語言。windows

  二、高級語言

   一句話說,高級語言就是面向人類思惟邏輯開發的語言。瀏覽器

   抽象程度大大提高,須要通過編譯成特定機器的彙編代碼才能執行,一條高級語言的語句每每須要若干機器指令來完成,高級語言獨立於機器的特性是靠編譯器爲不一樣機器生成不一樣的目標代碼(或機器指令)來實現的,那具體的說,要將高級語言編譯到什麼程度呢?這要跟編譯技術有關了,既能夠編譯成直接可執行多目標代碼,也能夠編譯成一種中間表示,而後拿到不一樣的機器和系統上執行,這種狀況一般又須要支撐環境,好比解釋器或虛擬機的支持,java程序編譯成bytecode,再由不一樣平臺的虛擬機執行就是很好的例子,而經過編譯器解釋的到多目標代碼去適應不一樣的機器,從這個意義上來講,經過交叉彙編,一些彙編程序也能夠得到不一樣機器的可移植性,但這種途徑的可移植性遠遠不一樣高級語言來的方便和實用性大。

  三、低級語言與高級語言小結

  • 低級語言是更接近底層的語言。
  • 高級語言是更接近人類思惟邏輯的語言。
  • 計算機只識別0、1代碼,而人類有本身的語言,所以須要編譯器或解釋器來編譯成0、1代碼或者中間語言。

1.2.3 動態語言和靜態語言

   一般咱們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

  一、動態類型語言

   動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來,python和ruby就是這種典型的動態類型語言。

  二、靜態類型語言

   靜態類型語言與動態類型語言恰好相反,它的數據類型在編譯期間檢查的,也就是說在程序時要聲明全部變量的數據類型,c、c++是靜態類型語言的典型表明,其餘的靜態類型語言還有c#、java等。

1.2.4 強類型定義語言和弱類型定義語言

  一、強類型定義語言

   強制數據類型的語言,也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼他就永遠是這個類型,舉個栗子:若是你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理,強類型定義語言是類型安全的語言。

  二、弱類型定義語言

   數據類型能夠被忽略的語言,它與強類型定義語言相反,一個變量能夠複製不一樣數據類型的值。

1.2.5 python總結

  python時動態語言,強類型定義語言。

1.3 python的優缺點

1.3.1 python的優勢

  一、簡單明確

   python定位就是優雅、明確、簡單,因此python程序看上去老是簡單易懂,初學者python,不但入門容易,並且未來深刻下去,能夠編寫哪些很是複雜的大程序。

  二、開發效率很是高

   python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。

  三、高級語言

   當你用python語言編寫程序的時候,你無需考慮諸多如何管理你的程序使用等內存一類的底層細節。

  四、可移植性

   因爲它對開源本質,python已經被移植到許多平臺上,(通過改動使它可以工做在不一樣平臺上。)

  五、可擴展性

   若是你須要你的一段關鍵代碼運行的更快活着但願某些算法不公開,你能夠把你的部分程序用c或者c++編寫,而後再你的python程序中使用。

  六、可嵌入性

   你能夠把python嵌入你的c/c++程序中,從而醒你對程序用戶提供腳本功能。

1.3.2 python缺點

  一、速度慢

   python的運行速度相比c語言確實慢不少,跟java相比也要慢一些,可是python的慢通常用戶是沒法直接感知到的,而且如今不斷的完善。

  二、代碼不能加密

   由於python是解釋性語言,它的源碼都是以明文對形勢存在的。

  三、線程問題

   線程不能利用多cpu問題,GIL(global interpreter lock)即全集解釋器鎖,是計算機程序設計語言解釋器用語同步線程的工具,使得任什麼時候刻僅有一個線程在執行,python的線程時操做系統的原成線程,在linux上爲pthread,在windows上爲win thread,徹底由操做系統調度線程的執行,一個python解釋器進程內有一條主線成,以及多用戶程序執行線程,即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行,關於這個問題的折衷解決方法。

1.4 python解釋器

     當咱們編寫python代碼時,咱們獲得的是一個包含python代碼的以.py爲擴展名到文本文件,要運行代碼,就須要python解釋器去執行.py文件。

     因爲整個python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫python解釋器來執行python代碼,事實上,確實存在不少種python解釋器。

  一、CPython

     當咱們從python官方網站下載並安裝好python2.7後,咱們就直接得到來一個官方版本的解釋器CPython,這個解釋器使用c語言開發,因此叫cpython,在命令行訓醒python就是啓動cpython解釋器。

   cpython是使用最爲普遍的python解釋器。

  二、IPython

     IPython是基於cpython之上多個交互式解釋器,也就是說,IPython只在交互式上有所加強,可是執行python代碼的功能和cpython是徹底同樣的,比如不少國家瀏覽器雖然外觀不一樣,但內核其實都是調用了ie。

  cpython用>>>做爲提示符,而IPython用In[序號]:做爲提示符。

  三、pypy

     pypy是另外一種python解釋器,他的目的是執行速度,pypy採用jit技術,對python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升python代碼到執行速度。

  絕大部分python代碼均可以在pypy下運行,可是pypy和cpython有一些是不一樣的,這就致使形同的python代碼在兩種解釋器下執行可能會有不一樣的結果,若是你的代碼要放在pypy下執行,就須要瞭解pypy和cpython的同點。

  四、Jython

     Jython是運行在java平臺上的python解釋器,能夠直接把python代碼編譯成java字節碼執行。

  五、ironpython

     ironpython和jython相似,只不過是運行在微軟.net平臺的python解釋器,能夠直接把python代碼編譯成.net字節碼。

1.4.1 python解釋器小結

  python的解釋器不少,但使用最普遍的仍是cpython,若是要和java或者.net平臺交互,最好的辦法不是用jython或者ironpython,而是經過網絡調用來交互,確保各程序之間的獨立性。

第2章 Python簡單基礎

2.1 變量

  一、變量的定義

   變量是一個在內存存儲的數據。

  二、變量的意義

   爲何要有變量,由於他保存程序的中間結果或狀態,以供應後面的代碼進行調用。

2.1.1 變量的要求定義

  一、等號右邊永遠是變量名

  二、打印字符串時使用雙引號

  三、打印時的分隔符使用逗號

  四、在變量中數字不須要加引號,加引號就變成字符串了

  五、python是由上到下逐行(hang)處理執行的,所以變量要先定義好再調用

2.1.2 定義變量的方式

  一、定義變量簡潔化標準:強烈推薦「_」下劃線,其次也能夠是用駝峯表示法。

  二、變量不可所有大寫,所有大寫爲常量,常量是永遠不變的變量,若是程序中有永遠不變的量,可使用大寫來暗示別人或提醒本身。

  三、變量不能以數字開頭,數字能夠在變量名的中間。

  四、變量名不能使用特殊字符,僅除下劃線。

  五、不能使用關鍵字做爲變量名,關鍵字就是程序內部語法,如:print等。

2.1.3 變量賦值實例

  一、正確打印

1 #!/usr/bin/env python3
2 name = "chenx"
3 name2 = "oldboy"
4 print name,name2
輸出結果:
chenx oldboy

  二、錯誤打印

1 #!/usr/bin/env python3
2 name = "chenxin"
3 name2 = "oldboy"
4 print "name,name2"
輸出結果:
name,name2
 

  備註:變量飲用不可以使用引號引用。

2.2 字符編碼

  因爲計算機只能識別0、1代碼,所以字符編碼由2**8表示,每一個字符有8個比特位,一個二進制數字佔1比特bit,所以一個字符有8比特,即1字節,加入各國符號後出現了萬國編碼(unicode),每一個字符有4字節,最後演變成utf-8,可變長的編碼集,英文按照ascll存儲,一個字符爲1字節,一箇中文存3字節,歐洲2字節。

  python的開發規範,每行不能超過80個字符。

  python2默認不支持中文,python3版本以上使用了utf-8,默認就支持中文,若是是python2必須在代碼中作字符集的聲明:

1 #!/usr/bin/env python2
2 # _*_ coding: utf-8 _*_
3 print ("你好")

2.3 交互式輸入

2.3.1 python3.0中

1 #!/usr/bin/env python
2 name = input("what is your name:") 3 print ("holle" + name)

2.3.2 python2.0中

  raw_input就是3.0中點input。

  可是在2.0中也有一個input,這個input不能輸入字符串,只能輸入變量和數字。(沒什麼卵用。)

2.3.3 格式化輸出佔位符

#!/usr/bin/env python
name = input("your name :") age = int(input("your age :")) job = input("your jpb :") meg = ''' 這是%s的基本信息。 ------------------- name : %s age : %d job : %s ---------end----- ''' % (name,name,age,job) print(meg)

  小結:

  %s:表示輸出字符串

  %d:表示輸出整數

  %f:表示輸出浮點數(小數)

2.4 經常使用模塊使用

2.4.1 getpass

#!/usr/bin/env python
import getpass username = input("usename:") password = getpass.getpass("password:") print(username,password)

  備註:getpass模塊使密碼變成不可見形式體現,可是在pycharm中很差使,只能在命令行中使用。

2.4.2 os

  一、模塊方法

   os.system()   :直接調用系統命令

   os.mkdir()    :在python腳本或進入pyrhon的目錄下建立目錄

   os.popen("df -h").read()  保存輸出結果

  二、模塊實踐

#!/usr/bin/env python3
import os os.mkdir("python_mkdir") os_system = os.system("ls") print(os_system) os_popen = os.popen("df -h").read() print(os_popen)
輸出結果: {0:21}~/s15/scripts ➭ python3 os.py 1.txt openfile.py os.py python_mkdir test_1.py 0 Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1     112Gi  109Gi  2.9Gi    98% 28568128 753598   97%   / devfs 182Ki 182Ki 0Bi 100%      630      0  100%   /dev map -hosts       0Bi    0Bi    0Bi   100%        0      0  100%   /net map auto_home 0Bi 0Bi 0Bi 100%        0      0  100%   /home

2.4.3 sys

  一、模塊方法

   sys.path  :查看python默認存放模塊的路徑(全局環境變量)

  二、模塊實踐

#!/usr/bin/env python3
import sys print(sys.path)
直接結果: {0:26}~/s15/scripts ➭ python3 sys.py ['/Users/cx/s15/scripts', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages']

2.4.4 python命令行補全模塊

  一、for mac

import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete")  # linux and python3 on mac

  二、for linux

#!/usr/bin/env python  # python startup file 
import sys import readline import rlcompleter import atexit import os # tab completion 
readline.parse_and_bind('tab: complete') # history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter

  備註:將自定義模塊放在統一的python默認環境變量下,並隨便命名便可,以備後面方便調用。

2.5 if判斷語句

  一、簡單用戶登陸判斷

#!/usr/bin/env python
user = 'chenx' passwd = 'cx199222814' username = input("username:") password = input("password:") if user == username: print("username is correct...") if password == passwd: print("welcom to...") else: print("密碼錯誤") else: print("用戶名錯誤"

  二、登陸優化代碼

#!/usr/bin/env python
user = 'chenxin' passwd = 'cx1994814' username = input("username:") password = input("password:") if user == username and password == passwd: print("歡迎使用") else: print("用戶名密碼錯誤")

  三、猜年齡代碼(聯合判斷)

#!/usr/bin/env python
age = 21 age_num = int(input("input your age:")) if age == age_num: print("回答正確") elif age > age_num: print("猜小了") else: print("猜大了")

2.6 for循環

  一、猜年齡循環不能超過三次

#!/usr/bin/env python
age = 21
for i in range(10): if i <3 :    #循環判斷不能超過三次
        age_num = int(input("input your age:")) if age == age_num: print("回答正確") break
        elif age_num < age: print("猜小了") else: print("猜大了") else: print("猜想次數太多,你太笨了。。。") break

  二、猜年齡代碼優化v2

#!/usr/bin/env python
age = 21 counter = 0 for i in range(10): print("---->counter:",counter) if counter <3: #循環判斷不能超過三次
        age_num = int(input("input your age:")) if age == age_num: print("回答正確") break #終止整個循環,
        elif age > age_num: print("猜小了") else: print("猜大了") else: conuter_confim = input("你是否確認繼續猜y/n?") if conuter_confim == "y": counter = 0 continue #跳出當次循環
        else: exit("再見笨蛋") counter += 1 #counter = counter +

 

2.6 while循環

    有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。

2.6.1 海枯石爛代碼

count = 0
while True:
    print("你是風兒我是沙,纏纏綿綿到天涯...",count)
    count +=1

2.6.1 循環100次的代碼

count = 0
while True:
    print("你是風兒我是沙,纏纏綿綿到天涯...",count)
    count +=1
    if count == 100:
        print("去你媽的風和沙,大家這些脫了褲子是人,穿上褲子是鬼的臭男人..")
        break

2.6.1 循環到3次終止的代碼

#!/usr/bin/env python
# -*- coding: utf-8 -*-
my_age = 20

count = 0
while count < 3:
    user_input = int(input("input your guess num:"))

    if user_input == my_age:
        print("Congratulations, you got it !")
        break
    elif user_input < my_age:
        print("Oops,think bigger!")
    else:
        print("think smaller!")
    count += 1  # 每次loop 計數器+1
else:
相關文章
相關標籤/搜索