Python全棧之路-----基礎篇


Python誕生

Python是著名的”龜叔Guido van Rossum(吉多·范羅蘇姆)在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個編程語言。
python-day01-01

Python語法很多來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,比如強制縮進。但這些語法規定讓Python容易讀。
Guido van Rossum著名的一句話就是Life is short, you need Python,譯為:人生苦短,我用Python
python-day01-02
截至到目前2016年4月28日,Python在Tiobe的排名還是很靠前的,而且近幾年來說Python上升的趨勢已經超過PHP緊隨C#。
python-day01-03
查詢網站:http://www.tiobe.com/tiobe_index?page=index
總之,Python就是非常好非常好非常好的語言,重要的事情說三遍。

Python實現方式

Python身為一門編程語言,但是他是有多種實現方式的,這里的實現指的是符合Python語言規范的Python解釋程序以及標准庫等。

  • Python的實現方式主要分為三大類
  1. Cpython
  2. PyPy
  3. Jpython、IronPython等等類似的實現方式
  • CPython

這是Python的官方版本,使用C語言實現,使用最為廣泛,新的語言特性一般也最先出現在這里。
CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然后運行在Python虛擬機上。

  • PyPy

Python(RPython Python)的Python實現版本,原理是這樣的,PyPy運行在CPython(或者其它實現)之上,用戶程序運行在PyPy之上。它的一個目標是成為Python語言自身的試驗場,因為可以很容易地修改PyPy解釋器的實現(因為它是使用Python寫的),PyPy的代碼性能是Cpython的五倍以上。

  • 性能對比圖

python-day01-09python-day01-09

  • Jython

Jython是個Python的一種實現方式,Jython編譯Python代碼為Java字節碼,然后由JVM(Java虛擬機)執行,這意味着此時Python程序與Java程序沒有區別,只是源代碼不一樣。此外,它能夠導入和使用任何Java類像Python模塊。

  • IronPython

IronPython是Python的C#實現,並且它將Python代碼編譯成C#中間代碼(與Jython類似),然后運行,它與.NET語言的互操作性也非常好。

安裝Python

Windows安裝Python2.7.11

  • 下載Python軟件

64位下載地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi
32位下載地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi

  • 安裝Python軟件

下載下來之后雙擊安裝,安裝時一路下一步下一步即可,Windows一貫的作風,默認的安裝路徑是:C:\Python27

  • 配置環境變量

右鍵計算機 —> 屬性 —> 高級系統設置 —> 高級 —> 環境變量 —> 在第二個內容框中找到變量名為Path的一行,雙擊 —> Python安裝目錄追加到變值值中,用;分割
如圖:
python-day01-05
如:原來的值``;C:\python27,切記前面有分號

Windows 10安裝后默認會把環境變量配置好。

  • cmd測試

win+r調出運行窗口,然后輸入cmd
python-day01-06
在cmd窗口中輸入python指令
python-day01-07
如果你得到的結果和我一樣,那么你就安裝好了windows下的python環境

CentOS升級到Python2.7.11

CentOS6.7默認自帶Python2.6.6版本,如果你不需要升級到2.7.11請跳過這段,如果需要升級請繼續往下看。

  • 下載python2.7.11源碼包

下載地址:https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz

[root@mosson ~]# wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
  • 安裝開發工具包
[root@mosson~]# yum -y groupinstall "debugging Tools"
  • 編譯安裝
[root@mosson ~]# tar xf Python-2.7.11.tgz
[root@mosson ~]# cd Python-2.7.11
[root@mosson Python-2.7.11]# ./configure -prefix=/usr/local/python2.7.11
[root@mosson Python-2.7.11]# make
[root@mosson Python-2.7.11]# make install
  • 更改配置

創建鏈接來使系統默認python變為python2.7

[root@mosson Python-2.7.11]# ln -fs /usr/local/python2.7.11/bin/python2.7 /usr/bin/python

  查看Python版本

[root@mosson Python-2.7.11]# python -V
Python 2.7.11

修改yum配置(否則yum無法正常運行)

[root@mosson Python-2.7.11]# vim /usr/bin/yum
#!/usr/bin/python
#將第一行改為
#!/usr/bin/python2.6

Python簡單入門

Hello Word

一般情況下程序猿的第一個小程序都是簡單的輸出Hello Word!,當然Python也不例外,下面就讓我們來用Python輸出一句Hello Word!吧!

  • 創建一個以py結尾的文件
[root@mosson python_code]# touch hello.py

  其內容為:

#!/usr/vin/env python
print "Hello World!"
  • 用Python執行
[root@mosson python_code]# python hello.py
Hello Word!

Python代碼執行流程

 釋意:當Python執行代碼的時候,會先把源碼讀取到內存當中,然后由Cpython進行編譯,編譯成字節碼,最后由Cpython的虛擬機一行一行的解釋其內容,再輸出到屏幕上,然后釋放內存,退出程序。

pyc文件

執行Python代碼時,如果導入了其他的.py文件,那么,執行過程中會自動生成一個與其同名的.pyc文件,該文件就是Python解釋器編譯之后產生的字節碼。

代碼經過編譯可以產生字節碼;字節碼通過反編譯也可以得到代碼

指定Python解釋器

在Python文件的開頭加入以下代碼就制定了解釋器。

  • 第一種方式  告訴shell這個腳本用/usr/bin/python執行
#!/usr/bin/python
  • 第二種方式  在操作系統環境不同的情況下制定這個腳本用python來解釋。
#!/usr/bin/env python

執行Python文件

執行python文件有兩種方式:

  • 第一種執行方式
[root@mosson python_code]# python my.py
Life is short, you need Pytho
  • 第二種執行方式
[root@mosson python_code]# chmod +x my.py 
[root@mosson python_code]# ./my.py 
Life is short, you need Pytho

字符編碼

ASCII

python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)

ASCII(American Standard Code for Information Interchange,美國標准信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號

顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode

Unicode  缺點:浪費空間如果是字母特殊字符數字的話

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多

UTF-8

一個漢字3個字節 

gbk1個漢字是2個字節

UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

所以,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),如果是如下代碼的話:

報錯:ascii碼無法表示中文

#!/usr/bin/env python
print("你好,世界")

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print("你好,世界")

代碼注釋:

單行注釋:在代碼前加上#

多行注釋:

"""
注釋內容
"""

pyc文件

執行Python代碼時,如果導入了其他的 .py 文件,那么,執行過程中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯之后產生的字節碼。

ps:代碼經過編譯可以產生字節碼;字節碼通過反編譯也可以得到代碼。

Py轉pyc  其實 就是你的程序代碼交給虛擬機轉換成機器可以識別的二進制的過程。 就是字節碼轉換

不是編譯過程  

為什么生成pyc文件

緩存的問題。 轉換字節碼的數據寫到硬盤上, 下次執行的時候不用翻譯了。

python中的變量

變量的命名規則:

      1 變量名只能是 字母、數字或下划線的任意組合

      2 不能以數字開頭

      3 不能是python的已用的變量名

      例如:['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']

變量賦值:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
name1 = "zhangsan" 
name2 = "licsi"

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

name1 = "wupeiqi"
name2 = name1

模塊導入:

模塊導入是大大簡化你的程序的可讀性。

比如 1.py

#!/usr/bin/env python
#_*_coding:utf-8_*_

import 2.py
print("hello")

而2.py

#!/usr/bin/env python
#_*_coding:utf-8_*_

print("world")

而執行python 1.py結果是

world

hello

大家看到了吧,import xxx.py 就是將這個文件的內容導入進來替換這個import行。

數據類型

按照特征划分

數字類型: 
  整形: 
     布爾型:True  False  必須大寫第一個字母 
     長整形: 
     標准整形: 
  
  非整型: 
     雙精度浮點型 
     復數 
     decimal(不是內建類型) 
  
  序列類型: 
     字符串:引號引起來的 
     元祖:tuple 不可變 
     列表: 
  
  鍵值: 
     字典: 
  
  集合類型: 
     可變集合 
     不可變集合 

按照可變性划分:

可哈希的不可變數據類型: 
    數字類型 
    不可變集合 
    字符串 
    元組 
 
 可變數據類型 
    字典 
    列表 
    可變集合 

流程控制和縮進

注釋:if語句,當且僅當if后的條件為真時才會執行if條件下的代碼塊,

 if 多層判斷

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 __author__ = 'Administrator'

inp = raw_input(">>>")
if inp == "1":
    print('1')
elif inp == "2":
    print('2')
else:
    print("other")

while 循環

while 條件:

     動作

當條件一旦滿足就不會再執行動作

while的退出循環方法1

例子: 打印數字當數字為7 則退出循環

重點:利用了 flag的布爾類型來做賦值控制。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 __author__ = 'Administrator'start = 1
flag = True
while flag:
    print(start)
    if start == 7:
        flag = False
start+=1
print("end")    

continue  break練習

continue 是跳出本次循環,繼續下次循環

break是跳出本層循環

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Administrator'

import time
i=0
while i<=10:
    time.sleep(0.1)
    i+=1
    if i == 7:
        continue
    print i
print("end")
檢測是否是跳出本層循環
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Administrator'
a=0
b=0
while a<10:
    while b<3:
        if b==2:
break
        b+=1
        print b
    a+=1
    print a

作業:

練習題 
1、使用while循環輸入 1 2 3 4 5 6     8 9 10 
  
2、求1-100的所有數的和 
  
3、輸出 1-100 內的所有奇數 
  
4、輸出 1-100 內的所有偶數 
  
5、求1-2+3-4+5 ... 99的所有數的和 
  
6、用戶登陸(三次機會重試) 

num one

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Administrator'

i=0
while i<=10:
    time.sleep(0.1)
    i+=1
    if i == 7:
        continue
    print i
print("end")

 num two

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Administrator'

#1到100求和

j=0
i=1
while i<=100:
     j+=i
     i+=1
print j

  linux命令行求和 

awk 'BEGIN{i=1;do{sum+=i;i++}while (i<=100);print sum}'
  
awk 'BEGIN{i=1;while (i<=100){sum+=i;i++};print sum}'
  
awk 'BEGIN{sum=0;for (i=1;i<=100;i++)sum+=i;print sum}'
  
declare sum=0;for i in `seq 1 100`;do let sum+=$i;done;echo $sum 

num three

#!/usr/bin/env python
#—*— coding:utf-8 —*—
#奇數求和
j = 0
i = 1
while i < 100:
    j += 1
    i += 2
print (j)

num four

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#偶數求和
i = 0 
j = 0 
while i < 100:
    j +=i
    i += 2
print(j)

num five

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Administrator'
 
# 奇數 求和
j=0
i=1
while i<=100:
    j+=i
    i+=2
print j
 
#偶數 求和
k=0
l=0
while l<=100:
     k+=l
     l+=2
print k
print(j-k

三次登錄:

import sys
 
i = 0
while i < 3:                                                        #只要用戶登錄異常不超過3次就不斷循環
    username = input("請輸入用戶名:")
 
    lock_file = open('user_lock.txt','r+')                          #當用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經LOCK了
    lock_list = lock_file.readlines()
 
    for lock_line in lock_list:                                     #循環LOCK文件
        lock_line = lock_line.strip('\n')                           #去掉換行符
        if username == lock_line:                                   #如果LOCK了就直接退出
            sys.exit('=======WARNING:該賬號 %s 已經被凍結========' % username)
 
    user_file = open('user_id.txt','r')                             #打開帳號文件
    user_list = user_file.readlines()
    for user_line in user_list:                                     #對帳號文件進行遍歷
        (user,password) = user_line.strip('\n').split()             #分別獲取帳號和密碼信息
        if username == user:                                        #如用戶名正常匹配
            m = 0
            while m < 3:                                            #只要用戶密碼異常不超過3次就不斷循環
                passwd = input('請輸入密碼:')              #輸入密碼,相對安全
                if passwd == password:                              #密碼正確,提示歡迎登錄
                    print('HI,%s,歡迎登錄系統' % username)
                    sys.exit(0)                                     #正常退出
                else:
                    if m != 2:                                      #m=2時,是最后一次機會,不用在提示還剩余0次機會了
                        print('用戶 %s 密碼錯誤,請重新輸入,還有 %d 次機會' % (username,2 - m))
                m += 1                                              #密碼輸入錯誤后,循環值增加1
            else:
                lock_file.write(username + '\n')                    #密碼輸入三次錯誤后,將該用戶追加到LOCK文件
                sys.exit('用戶 %s 達到最大登錄次數,請聯系管理員!!' % username)
        else:
            pass                                                    #當用戶沒匹配時,跳過並繼續循環
    else:
        if i != 2:                                                  #i=2時,是最后一次機會,不用在提示還剩余0次機會了
            print('用戶 %s 不存在,請重新輸入,還有 %d 次機會' % (username,2 - i))
    i += 1                                                          #當用戶輸入錯誤時,循環值增加1
else:
    sys.exit('用戶 %s 不存在,退出' % username)                           #用戶輸入三次錯誤后,異常退出
 
lock_file.close()                                                   #關閉lock文件
user_file.close()                                                   #關閉user_id文件

  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM