windows:python
一、下載安裝包 https://www.python.org/downloads/ 二、安裝 默認安裝路徑:C:\python27 三、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python27,前面有分號
linux:linux
自帶python環境 若是自帶python2.6環境更新至python2.7,推薦使用pyenv進行python版本管理
windows:git
卸載重裝
linux:程序員
源碼方式:github
查看默認Python版本 python -V 一、安裝gcc,用於編譯Python源碼 yum install gcc 二、下載源碼包,https://www.python.org/ftp/python/ 三、解壓並進入源碼文件 四、編譯安裝 ./configure make all make install 五、查看版本 /usr/local/bin/python2.7 -V 六、修改默認Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 七、防止yum執行異常,修改yum使用的Python版本 vi /usr/bin/yum 將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
pyenv方式:算法
一、安裝依賴包 yum install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs -y 二、安裝pyenv git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc exec $SHELL -l 3.安裝python pyenv install --list pyenv install 2.7.9 -v pyenv rehash 四、修改默認python版本 mv /usr/bin/python /usr/bin/python.2.6 ln -s ~/.pyenv/versions/2.7.9/bin/python /usr/bin/python 五、修改yum使用的python版本 vim /usr/bin/yum 將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
linux下建立hello.py文件並輸入:sql
print("Hello World!")
而後執行python shell
[root@KVM01 ~]# echo 'print ("Hello World")' > hello.py [root@KVM01 ~]# python hello.py Hello World
指定解釋器vim
上一步中執行 python hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。windows
若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py
,那麼就須要在 hello.py 文件的頭部指定解釋器,以下:
#!/usr/bin/env python print "Hello World"
執行前須要賦予文件執行權限
chmod +x hello.py ./hello.py
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,因此,ASCII碼最多隻能表示 255 個符號。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:
報錯:ascii碼沒法表示中文
[root@KVM01 ~]# cat hello.py
#!/usr/bin/env python
print ("你好,世界")
[root@KVM01 ~]# ./hello.py File "./hello.py", line 3 SyntaxError: Non-ASCII character '\xe4' in file ./hello.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
改正:應該告訴python解釋器,用什麼編碼來執行源代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"
print
會依次打印每一個字符串,遇到逗號「,」會輸出一個空格,所以,輸出的字符串是這樣拼起來的:
print
也能夠打印整數,或者計算結果:
#!/usr/bin/env python # -*- coding: utf-8 -*- print 100+1 [root@KVM01 ~]# ./hello.py 101
當前行註釋 # 被註釋內容
多行註釋 """ 被註釋內容 """
Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.
聲明變量
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "chuan z"
變量定義的規則:
變量的賦值
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "chuan z"
name2 = "zzc"
print name1,name2
#!/usr/bin/env python # -*- coding:utf-8 -*- name = raw_input('please enter your name:')
print 'hello,',name
輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass # 將用戶輸入的內容賦值給 name 變量 pwd = getpass.getpass("請輸入密碼:") # 打印輸入的內容 print pwd
Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有三種:
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv
[root@KVM01 ~]# ./hello.py zzc
['./hello.py', 'zzc'] #把執行腳本時傳入的參數獲取到了
os模塊,在python程序裏調用系統命令
#!/usr/bin/env python # -*- coding:utf-8 -*- import os os.system("df -h")
示例
#!/usr/bin/env python # -*- coding:utf-8 -*- import os,sys os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數看成一條命令交給os.system來執行
Python Tab補全模塊
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
#!/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
上面本身寫的tab.py模塊只能在當前目錄下導入,若是想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個tab.py放到python全局環境變量目錄裏,基本通常都放在一個叫 Python/2.7/site-packages 目錄下,這個目錄在不一樣的OS裏放的位置不同,用 print(sys.path) 能夠查看python環境變量列表。
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。
一、數字
1 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4爲實數,j爲虛數,數學中表示覆數是什麼?
int(整型)
真或假
1 或 0
"hello world"
字符串拼接:
python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內從中從新開闢一塊空間。
字符串格式化
name = "tom" print "i am %s " % name #輸出: i am tom
name = "i am %s,age %d" %("zz",20)
name = "i am %s,age %d"
name %("zz",20)
name = "i am {0},age {1}"
name.format("zz",20)
PS: 字符串是 %s;整數 %d;浮點數%f
字符串經常使用功能:
移除空白
分割
長度
索引
切片
建立列表:
name_list = ['faker', 'insec', 'pdd'] 或 name_list = list(['faker', 'insec', 'pdd'])
基本操做:
五、元祖(不可變列表)
建立元祖:
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
基本操做:
索引
切片
循環
長度
包含
六、字典(無序)
建立字典:
person = {"name": "insec", 'age': 18} 或 person = dict({"name": "insec", 'age': 18})
經常使用操做:
9、數據運算
算數運算
如下假設變量a爲10,變量b爲20:
運算符 | 描述 | 實例 |
---|---|---|
+ | 加 - 兩個對象相加 | a + b 輸出結果 30 |
- | 減 - 獲得負數或是一個數減去另外一個數 | a - b 輸出結果 -10 |
* | 乘 - 兩個數相乘或是返回一個被重複若干次的字符串 | a * b 輸出結果 200 |
/ | 除 - x除以y | b / a 輸出結果 2 |
% | 取模 - 返回除法的餘數 | b % a 輸出結果 0 |
** | 冪 - 返回x的y次冪 | a**b 爲10的20次方, 輸出結果 100000000000000000000 |
// | 取整除 - 返回商的整數部分 | 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0 |
比較運算
如下假設變量a爲10,變量b爲20
算符 | 描述 | 實例 |
---|---|---|
== | 等於 - 比較對象是否相等 | (a == b) 返回 False。 |
!= | 不等於 - 比較兩個對象是否不相等 | (a != b) 返回 true. |
<> | 不等於 - 比較兩個對象是否不相等 | (a <> b) 返回 true。這個運算符相似 != 。 |
> | 大於 - 返回x是否大於y | (a > b) 返回 False。 |
< | 小於 - 返回x是否小於y。全部比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。 | (a < b) 返回 true。 |
>= | 大於等於 - 返回x是否大於等於y。 | (a >= b) 返回 False。 |
<= | 小於等於 - 返回x是否小於等於y。 | (a <= b) 返回 true。 |
賦值運算
如下假設變量a爲10,變量b爲20:
運算符 | 描述 | 實例 |
---|---|---|
= | 簡單的賦值運算符 | c = a + b 將 a + b 的運算結果賦值爲 c |
+= | 加法賦值運算符 | c += a 等效於 c = c + a |
-= | 減法賦值運算符 | c -= a 等效於 c = c - a |
*= | 乘法賦值運算符 | c *= a 等效於 c = c * a |
/= | 除法賦值運算符 | c /= a 等效於 c = c / a |
%= | 取模賦值運算符 | c %= a 等效於 c = c % a |
**= | 冪賦值運算符 | c **= a 等效於 c = c ** a |
//= | 取整除賦值運算符 | c //= a 等效於 c = c // a |
邏輯運算
如下假設變量 a 爲 10, b爲 20:
運算符 | 邏輯表達式 | 描述 | 實例 |
---|---|---|---|
and | x and y | 布爾"與" - 若是 x 爲 False,x and y 返回 False,不然它返回 y 的計算值。 | (a and b) 返回 20。 |
or | x or y | 布爾"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的計算值。 | (a or b) 返回 10。 |
not | not x | 布爾"非" - 若是 x 爲 True,返回 False 。若是 x 爲 False,它返回 True。 | not(a and b) 返回 False |
成員運算
運算符 | 描述 | 實例 |
---|---|---|
in | 若是在指定的序列中找到值返回 True,不然返回 False。 | x 在 y 序列中 , 若是 x 在 y 序列中返回 True。 |
not in | 若是在指定的序列中沒有找到值返回 True,不然返回 False。 | x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。 |
身份運算
運算符 | 描述 | 實例 |
---|---|---|
is | is是判斷兩個標識符是否是引用自一個對象 | x is y, 若是 id(x) 等於 id(y) , is 返回結果 1 |
is not | is not是判斷兩個標識符是否是引用自不一樣對象 | x is not y, 若是 id(x) 不等於 id(y). is not 返回結果 1 |
位運算
按位運算符是把數字看做二進制來進行計算的。Python中的按位運算法則以下:
下表中變量 a 爲 60,b 爲 13,二進制格式以下:
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
運算符 | 描述 | 實例 |
---|---|---|
& | 按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 | (a & b) 輸出結果 12 ,二進制解釋: 0000 1100 |
| | 按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 | (a | b) 輸出結果 61 ,二進制解釋: 0011 1101 |
^ | 按位異或運算符:當兩對應的二進位相異時,結果爲1 | (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001 |
~ | 按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 | (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011, 在一個有符號二進制數的補碼形式。 |
<< | 左移動運算符:運算數的各二進位所有左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。 | a << 2 輸出結果 240 ,二進制解釋: 1111 0000 |
>> | 右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,">>"右邊的數指定移動的位數 | a >> 2 輸出結果 15 ,二進制解釋: 0000 1111 |
#!/usr/bin/python # -*- coding:utf-8 -*- a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 print "1 - c 的值爲:", c c = a | b; # 61 = 0011 1101 print "2 - c 的值爲:", c c = a ^ b; # 49 = 0011 0001 print "3 - c 的值爲:", c c = ~a; # -61 = 1100 0011 print "4 - c 的值爲:", c c = a << 2; # 240 = 1111 0000 print "5 - c 的值爲:", c c = a >> 2; # 15 = 0000 1111 print "6 - c 的值爲:", c
*按位取反運算規則(按位取反再加1) 詳解http://blog.csdn.net/wenxinwukui234/article/details/42119265
運算符優先級
從最高到最低優先級的全部運算符:
運算符 | 描述 |
---|---|
** | 指數 (最高優先級) |
~ + - | 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法減法 |
>> << | 右移,左移運算符 |
& | 位 'AND' |
^ | | 位運算符 |
<= < > >= | 比較運算符 |
<> == != | 等於運算符 |
= %= /= //= -= += *= **= | 賦值運算符 |
is is not | 身份運算符 |
in not in | 成員運算符 |
not or and | 邏輯運算符 |
如下實例演示了Python全部運算符優先級的操做:
#!/usr/bin/python # -*- coding:utf-8 -*- a = 20 b = 10 c = 15 d = 5 e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5 print "(a + b) * c / d 運算結果爲:", e e = ((a + b) * c) / d # (30 * 15 ) / 5 print "((a + b) * c) / d 運算結果爲:", e e = (a + b) * (c / d); # (30) * (15/5) print "(a + b) * (c / d) 運算結果爲:", e e = a + (b * c) / d; # 20 + (150/5) print "a + (b * c) / d 運算結果爲:", e
以上實例輸出結果:
(a + b) * c / d 運算結果爲: 90 ((a + b) * c) / d 運算結果爲: 90 (a + b) * (c / d) 運算結果爲: 90 a + (b * c) / d 運算結果爲: 50
場景1、用戶登錄驗證
# 提示輸入用戶名和密碼 # 驗證用戶名和密碼 # 若是錯誤,則輸出用戶名或密碼錯誤 # 若是成功,則輸出 歡迎,XXX! #!/usr/bin/env python # -*- coding:encoding -*- import getpass name = raw_input('請輸入用戶名:') pwd = getpass.getpass('請輸入密碼:') if name == "insec" and pwd == "cmd": print("歡迎,insec!") else: print("用戶名和密碼錯誤")
場景2、猜年齡遊戲
在程序裏設定好你的年齡,而後啓動程序讓用戶猜想,用戶輸入後,根據他的輸入提示用戶輸入的是否正確,若是錯誤,提示是猜大了仍是小了
#!/usr/bin/env python # -*- coding:utf-8 -*- my_age = 27 user_input = int(input("input your guess num:")) if user_input == my_age: print("Congratulations, you got it !") elif user_input < my_age: print("Oops,think bigger!") else: print("think smaller!")
循環10次程序
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'illusion' for i in range(10): print("loop:", i )
執行輸出
('loop:', 0) ('loop:', 1) ('loop:', 2) ('loop:', 3) ('loop:', 4) ('loop:', 5) ('loop:', 6) ('loop:', 7) ('loop:', 8) ('loop:', 9)
需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環
for i in range(10): if i<5: continue #不往下走了,直接進入下一次loop print("loop:", i )
需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出
for i in range(10): if i>5: break #不往下走了,直接跳出整個loop print("loop:", i )
死循環,應用在須要持續循環監控的場景下
count = 0 while True: print("while loop...",count) count +=1
上面的死循環程序循環到101次就退出
count = 0 while True: print("while loop...",count) count +=1 if count == 101: print("第101次的loop...") break
回到上面for 循環的例子,如何實現讓用戶不斷的猜年齡,但只給最多3次機會,再猜不對就退出程序。
#!/usr/bin/env python # -*- coding:utf-8 -*- my_age = 27 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: print("今日機會已用完.")
習題一:編寫登錄接口