目前Python主要應用領域:html
Python在一些公司的應用: java
編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明什麼意思呢,咱們一塊兒來看一下。python
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快; linux
而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的. c++
這是由於計算機不能直接認識並執行咱們寫的語句,它只能認識機器語言(是二進制的形式)git
編譯型
優勢:編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。
缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。web
解釋型
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。算法
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。shell
python是一門動態解釋性的強類型定義語言。編程
先看優勢
再看缺點:
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py
爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py
文件。
因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python
就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>
做爲提示符,而IPython用In [
序號
]:
做爲提示符。
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。
1
2
3
4
5
6
7
|
1
、下載安裝包
https:
/
/
www.python.org
/
downloads
/
2
、安裝
默認安裝路徑:C:\python27
3
、配置環境變量
【右鍵計算機】
-
-
》【屬性】
-
-
》【高級系統設置】
-
-
》【高級】
-
-
》【環境變量】
-
-
》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】
-
-
> 【Python安裝目錄追加到變值值中,用 ; 分割】
如:原來的值;C:\python27,切記前面有分號
|
linux、Mac
1
2
3
|
無需安裝,原裝Python環境
ps:若是自帶
2.6
,請更新至
2.7
|
在linux 下建立一個文件叫hello.py,並輸入
1
|
print
(
"Hello World!"
)
|
而後執行命令:python hello.py ,輸出
1
2
3
|
python hello.py
Hello World!
|
指定解釋器
上一步中執行 python hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。
若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py
,那麼就須要在 hello.py 文件的頭部指定解釋器,以下:
1
2
3
|
#!/usr/bin/env python
print
"hello,world"
|
如此一來,執行: ./hello.py
便可。
ps:執行前需給予 hello.py 執行權限,chmod 755 hello.py
在交互器中執行
除了把程序寫在文件裏,還能夠直接調用python自帶的交互器運行代碼,
1
2
3
4
5
6
|
localhost:~ servyou $ python
Python
2.7
.
10
(default,
Oct
23
2015
,
18
:
05
:
06
)
[GCC
4.2
.
1
Compatible Apple LLVM
7.0
.
0
(clang
-
700.0
.
59.5
)] on darwin
Type
"help"
,
"copyright"
,
"credits"
or
"license"
for
more information.
>>>
print
(
"Hello World!"
)
Hello World!
|
聲明變量
1
2
3
|
#_*_coding:utf-8_*_
name
=
"Alex Li"
|
上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:"Alex Li"
變量定義的規則:
變量的賦值
1
2
3
4
5
6
7
8
|
name
=
"fuyefeng"
name2
=
name
print
(name,name2)
name
=
"Jack"
print
(
"What is the value of name2 now?"
)
|
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:
報錯:ascii碼沒法表示中文
1
2
3
|
#!/usr/bin/env python
print
"你好,世界"
|
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,備註:從python 3.x開始不須要指定編碼也能顯示中文。即:
1
2
3
4
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print
"你好,世界"
|
註釋
當行注視:# 被註釋內容
多行註釋:""" 被註釋內容 """
----------------------------------------------------------------------------------
decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。
encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。
所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼
python bytes和str兩種類型轉換的函數encode(),decode()
-----------------------------------------------------------------------------------
1
2
3
4
5
6
7
|
#!/usr/bin/env python
#_*_coding:utf-8_*_
#name = raw_input("What is your name?") #only on python 2.x
name
=
input
(
"What is your name?"
)
print
(
"Hello "
+
name )
|
輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:
1
2
3
4
5
6
7
8
9
10
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
getpass
# 將用戶輸入的內容賦值給 name 變量
pwd
=
getpass.getpass(
"請輸入密碼:"
)
# 打印輸入的內容
print
(pwd)
|
Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,之後的課程中會深刻講解經常使用到的各類庫,如今,咱們先來象徵性的學2個簡單的。
sys
import
sys
print
(sys.path)
os
1
2
3
4
5
6
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
os
os.system(
"df -h"
)
#調用系統命令
|
本身寫個模塊
1.本身寫個python tab補全模塊
#!/usr/bin/python # python tab 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
2. 查看Python默認的模塊存放地址
[root@realine ~]# python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> >>> sys.path ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gst-0.10', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib64/python2.6/site-packages/webkit-1.0', '/usr/lib/python2.6/site-packages']
3. 拷貝該腳本到默認模塊存放路徑
1
|
cp
tab.py
/usr/lib64/python2
.6/
|
4.使用tab模塊
[root@realine python2.6]# python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> import tab >>> >>> sys. sys.__class__( sys.argv sys.hexversion sys.__delattr__( sys.builtin_module_names sys.maxint sys.__dict__ sys.byteorder sys.maxsize sys.__displayhook__( sys.call_tracing( sys.maxunicode ......
2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4爲實數,j爲虛數,數學中表示覆數是什麼?。
int(整型)
"hello world"
1
2
3
4
|
name
=
"alex"
print
"i am %s "
%
name
#輸出: i am alex
|
PS: 字符串是 %s;整數 %d;浮點數%f
name = input("input you name:") age = int(input("input you age:")) job = input("input you job:") msg = ''' information of %s : --------------- name :%s age : %d job : %s -------end----- ''' % (name,name,age,job) print(msg)
【舉例】:
name = "chris,jack,rain" print(name.split(",")) print("|".join(name)) username = input('your name:') if username.strip() == 'fuyf': print('weblcome') name = 'fu ye feng' print(name.center(40,'-')) print('' in name) print(name.capitalize()) msg = "hello,{name},it's been a long {age} no see" print(msg.format(name='fuyf',age=22)) msg2 = "hahah{0},dddd{1}" print(msg2.format('chris',22)) age = input('your age:') if age.isdigit(): age = int(age) else: print("invalid data type") name = 'fuyf123' print(name.endswith('f')) print(name.startswith('3')) print(name.upper().lower())
字符串經常使用功能:
1
2
3
|
name_list
=
[
'alex'
,
'seven'
,
'eric'
]
或
name_list =
list
([
'alex'
,
'seven'
,
'eric'
])
|
【舉例】:
name = ["fuyf","pxl","ygh"] name[0:] name[2] = "122" name.insert(1,"fff") name.append('最後') name.remove("122") print(name) del name[1:2] print(name[::2]) #步長爲2
基本操做:
1
2
3
|
ages
=
(
11
,
22
,
33
,
44
,
55
)
或
ages
=
tuple
((
11
,
22
,
33
,
44
,
55
))
|
1
2
3
|
person
=
{
"name"
:
"mr.wu"
,
'age'
:
18
}
或
person
=
dict
({
"name"
:
"mr.wu"
,
'age'
:
18
})
|
【舉例】:
id_db = { 11111111:{ 'name':'fuyf1', 'age':21, 'addr':'hunan' }, 222222222:{ 'name':'fuyf2', 'age':21, 'addr':'hunan' } } ''' id_db[11111111]['name']='fuyefeng' id_db[11111111]['qq']=6666 print(id_db[11111111]) id_db[11111111].pop('addr') print(id_db[11111111]) print(id_db.get(222222222)) ''' id_db2 = { 222222222:{ 'name':'fyf3', 'age':'43' } } id_db.update(id_db2) print(id_db2.values()) print(id_db2.keys()) print(222222222 in id_db) id_db2.setdefault('job','it') print(id_db2) for key in id_db2: print(key,id_db2.get(key))
經常使用操做:
比較運算:
賦值運算:
邏輯運算:
成員運算:
身份運算:
位運算:
a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 print "Line 1 - Value of c is ", c c = a | b; # 61 = 0011 1101 print "Line 2 - Value of c is ", c c = a ^ b; # 49 = 0011 0001 #相同爲0,不一樣爲1 print "Line 3 - Value of c is ", c c = ~a; # -61 = 1100 0011 print "Line 4 - Value of c is ", c c = a << 2; # 240 = 1111 0000 print "Line 5 - Value of c is ", c c = a >> 2; # 15 = 0000 1111 print "Line 6 - Value of c is ", c
*按位取反運算規則(按位取反再加1)
場景1、用戶登錄驗證
# 提示輸入用戶名和密碼 # 驗證用戶名和密碼 # 若是錯誤,則輸出用戶名或密碼錯誤 # 若是成功,則輸出 歡迎,XXX! import getpass name = raw_input('請輸入用戶名:') pwd = getpass.getpass('請輸入密碼:') if name == "alex" and pwd == "cmd": print("歡迎,alex!") else: print("用戶名和密碼錯誤")
場景2、猜年齡遊戲
需求:在程序裏設定好你的年齡,而後啓動程序讓用戶猜想,用戶輸入後,根據他的輸入提示用戶輸入的是否正確,若是錯誤,提示是猜大了仍是小了
my_age = 28 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次
for
i
in
range
(
10
):
print
(
"loop:"
, i )
range
函數原型:range(start, end, scan):
參數含義:start:計數從start開始。默認是從0開始。例如range(5)等價於range(0, 5);
end:技術到end結束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
scan:每次跳躍的間距,默認爲1。例如:range(0, 5) 等價於 range(0, 5, 1)
需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環
1
2
3
4
|
for
i
in
range
(
10
):
if
i<
5
:
continue
#不往下走了,直接進入下一次loop
print
(
"loop:"
, i )
|
需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出
1
2
3
4
|
for
i
in
range
(
10
):
if
i>
5
:
break
#不往下走了,直接跳出整個loop
print
(
"loop:"
, i )
|
猜年齡遊戲優化版:
需求:在程序裏設定好你的年齡,而後啓動程序讓用戶猜想,用戶輸入後,根據他的輸入提示用戶輸入的是否正確,最多猜10次,猜對直接退出。若是猜想錯誤,提示是猜大了仍是小了,每猜三次提示用戶是否要繼續。
age = 22 counter = 0 for i in range(10): if counter <3: guess_num = int(input("input you guess num:")) if guess_num ==age: print("you got it!") break elif guess_num > age: print("Thiner smaller!") else : print("Thinker big...") else: continue_confire = input("DO you want to contine:") if continue_confire == 'y': counter = 0 continue else: print("bye") break counter += 1
有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。
海枯石爛代碼
1
2
3
4
5
|
count
=
0
while
True
:
print
(
"你是風兒我是沙,纏纏綿綿到天涯..."
,count)
count
+
=
1
|
需求1:第六、7次不打印,最多循環10次
i = 0 while True: i +=1 if i >5 and i<8: continue print('你是風兒,我是沙',i) if i == 10: print('bye') break
需求2:只打印奇數
i = 0 while i<10: i +=1 if i%2 == 0: continue print(i)