Python之路【第一篇】:Python簡介和入門

python簡介:

1、什麼是pythonpython

Python(英國發音:/ pa θ n/ 美國發音:/ pa θɑ n/),是一種面向對象、直譯式的計算機程序語言。linux

每一門語言都有本身的哲學:程序員

pythonde 設計哲學是:「優雅」、「明確」、「簡單」web

 

2、python由來編程

 1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。之因此選中Python做爲程序的名字,是由於他是BBC電視劇——蒙提·派森的飛行馬戲團(Monty Python‘s Flying Circus)的愛好者。vim

 

3、Python能作什麼windows

Web程序服務器

Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn做爲Web服務器,也可以運行Python語言編寫的Web程序。Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可讓程序員輕鬆地開發和管理複雜的Web程序。網絡

Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡蠕蟲。第三方庫Twisted支持異步在線編寫程序和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。另有gevent這個流行的第三方庫,一樣可以支持高性能高併發的網絡開發。併發

GUI開發

Python自己包含的Tkinter庫可以支持簡單的GUI開發。可是愈來愈多的Python程序員選擇wxPython或者PyQt等GUI包來開發跨平臺的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。經過PyInstaller還能將程序發佈爲獨立的安裝程序包。

操做系統

在不少操做系統裏,Python是標準的系統組件。大多數Linux發佈版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端機下直接運行Python。有一些Linux發佈版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用做業系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。

其餘

NumPy、SciPy、Matplotlib可讓Python程序員編寫科學計算程序。有些公司會使用Scons代替make構建C++程序。

不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。不少遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。

應用範圍大概分爲:數據分析、系統編程、組件集成、網絡服務、圖像處理數值計算和科學計算

 

4、設計哲學與定位

Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確沒有或者不多有歧義的語法。這些準則被稱爲「 Python格言」。在Python解釋器內運行import this能夠得到完整的列表

1.優美勝於醜陋(Python 以編寫優美的代碼爲目標)

2.明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似)

3.簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)

4.複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔,多加註釋!)

5.扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)

6.間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題,一行代碼不能超過80個字符,你能夠換行或起一個新的邏輯來寫)

7.可讀性很重要(優美的代碼是可讀的)

8.即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上),覺對不容許特列必須按照這個規則

9.不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫 except:pass 風格的代碼)

10.當存在多種可能,不要嘗試去猜想!

11.而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法)

12.雖然這並不容易,由於你不是 Python 之父(這裏的 Dutch 是指 Guido )

13.作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量)

14.若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準)

15.命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召)

 我以爲註釋也很重要;我沒辦法記住好久之前的事

編程風格

1、語法要求
–縮進統一
同一級別的代碼必須一致!(而且建議全部級別的代碼的縮進建議是相同的--必須,開發規範裏建議4個空格)建議不要用table由於若是想把代碼在windows上運行,linux和windows的table的定義不一樣!!!!
好的編輯器能提升開發代碼的效率!
全部python,第一行必定要頂到行頭! 同一級別的新的都要頂到行頭。

2、變量
標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下劃線(‘ _ ’)
標識符名稱的其餘部分能夠由字母(大寫或小寫)、下劃線(‘ _ ’)或數字(0-9)組成。
有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。  
無效 標識符名稱的例子有2things、this is spaced out和my-name。
標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和後者中的大寫N。 

常量:數值不變的
變量:數值會變更的量

在python中沒有常量的,全部的數值均可以改變,可是他依然有個常量的概念,可是是人爲的你不去改變他,定義一個常量應該用大寫的形式。

AGE = 10 這個就是常量,他是大寫的!是約定俗成的。可是他是能夠改的!
name =  'Tim Luo' 這個是變量

##這裏須要注意下,設置變量的時候不能設置python自帶的內置方法好比type
如下關鍵字不能聲明爲變量名

1 ['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']

變量的起名的方式就是標識符名稱,經過標識符去調用內存中的數據。

Python環境

1、安裝python

windows:

一、下載安裝包
    https://www.python.org/downloads/
二、安裝
    默認安裝路徑:C:\python27
三、配置環境變量
    【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】
    如:原來的值;C:\python27,切記前面有分號

linux:

無需安裝,原裝Python環境
ps:若是自帶2.6,請更新至2.7

更新Python

windows:

卸載重裝便可

linux:

Linux的yum依賴自帶Python,爲防止錯誤,此處更新其實就是再安裝一個Python

查看默認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

Python 入門

1、第一句Python代碼

  linux寫python代碼要加下面的話

#!/usr/bin/env python    解釋器聲明(告訴系統這個腳本用python執行)
#若是寫中文要用utf-8碼;下面的兩行都是使用utf-8碼;統一要求使用第一個;
# -*- coding:utf-8 -*-
# coding:utf-8

之後全部python腳本都用下面這句
#!/usr/bin/env python    #腳本用env啓動的緣由,是由於腳本解釋器在linux中可能被安裝於不一樣的目錄,env能夠在系統的PATH目錄中查找。同時,env還規定一些系統環境變量。env就是:envirnment 環境變量)
# -*- coding:utf-8 -*-    指定編碼類型爲utf-8

python3.0之後默認編碼是utf-8

2、編碼 

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

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

顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode

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

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

因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),因此若是不指定編碼類型,若是有中文就會報錯。

 

3、註釋

單行註釋;加格井號;如
# -*- coding:utf-8 -*-
多行註釋;用"""和"""括起來(作說明用)

 

4、Python的工做過程

python 把代碼讀到內存  二、詞法語法分析 三、放到編譯器  ---》 生成字節碼   四、執行字節碼 ---》生成機器碼  CPU執行

 

5、執行腳本傳入參數

Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
    Python內部提供的模塊
    業內開源的模塊
    程序員本身開發的模塊
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數

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

import sys
print sys.argv 

 

6、 pyc 文件

執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。

ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。

[root@localhost python]# vim m.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
print "張禹,你好"
在hello.py裏導入m.py文件
[root@localhost python]# vim hello.py 
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#impotr導入模塊(後面能夠跟腳步的名字;如:m.py那麼就寫成impotr m)
import m
print "yaoshen"
執行python hello.py看其結果;是先引用的m.py在執行hello.py內容
[root@localhost python]# python hello.py 
張禹,你好
yaoshen
使用查看命令;發現多了m.pyc文件;當你調用的模塊(m)執行完;會自動生產pyc字節碼文件;
[root@localhost python]# ll
總用量 12
-rwxrwxrwx. 1 root root 368 10月 27 22:27 hello.py
-rwxrwxrwx. 1 root root  69 10月 27 22:22 m.py
-rw-r--r--. 1 root root 124 10月 27 22:27 m.pyc
m.pyc以pyc結尾的是字節碼文件;當內容相同;.pyc文件的優先級高;當.py文件內容更改;則重新生成.pyc字節碼文件

  

7、變量-賦值

name1 = "sishen"
name2 = name1
name1 = "sile"

結果:name1就等於sile;name2就等於sishen;
對於字符串的時候;name1變的時候;name2不變
字符串特性;一旦修改;從新建立(從新分配內存空間);

 

8、輸入輸出

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
# 將用戶輸入的內容賦值給 name 變量
name = raw_input("請輸入用戶名:")
 
# 打印輸入的內容
print name

輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:

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

import getpass
   
# 將用戶輸入的內容賦值給 name 變量
pwd = getpass.getpass("請輸入密碼:")
   
# 打印輸入的內容
print pwd

  

9、流程控制和縮進

if...else                  若是。。。不然

#!/usr/bin/env python
# -*- coding:utf-8 -*-
name = raw_input("請輸入用戶名:")
if name == "zhangyu":                    
        print "登陸成功"
else:
        print "登陸失敗"
############################
root@zhangyu:/python# python zhangyu.py 
請輸入用戶名:zhangyu
登陸成功
root@zhangyu:/python# python zhangyu.py 
請輸入用戶名:python
登陸失敗

if....elif...elif....else            若是。。。不然若是。。。不然若是。。。不然

#####################下面是流程控制#####################
"""
下面的代碼是一層一層的往下判斷;
若是是eric;輸出普通
不然,若是是tony;輸出超級
不然,若是是alex;輸出超神
"""
name = raw_input("請輸入用戶名:")
if name == "eric":
    print "普通"
elif name =="tony":
    print "超級"
elif name =="alex":
    print "超神"
else:
    print "非法用戶"
#####################下面是用戶名密碼#####################
"""
練習;三個用戶;eric,tony,alex;密碼123456
"""
"""
import getpass
name = raw_input("請輸入用戶名:")
pwd = getpass.getpass("請輸入密碼:")
if name == "eric" and pwd == "123456":
    print "登陸成功;普通"
elif name == "tony" and pwd == "123456":
    print "登陸成功;超級"
elif name == "alex" and pwd == "123456":
    print "登陸成功;超神"
else:
    print "登陸失敗"
"""
#####################還能夠這樣寫#####################
import getpass
name = raw_input("請輸入用戶名:")
pwd = getpass.getpass("請輸入密碼:")
if pwd == "123456":
    if name == "eric":
        print "登陸成功;普通"
    elif name == "tony":
        print "登陸成功;超級"
    elif name == "alex":
        print "登陸成功;超神"
    else:
        print "登陸失敗"
else:
print "登陸失敗"
外層變量,能夠被內層變量使用
內層變量,沒法被外層變量使用
 
for循環
for i in range(100)    and   for i in xrange(1,100)

需求1、猜數字遊戲

有3次機會,若是3次中沒有猜中給予提示,3次都沒有猜中,鼓勵!

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import random   #隨機模塊
rand_num = random.randrange(10)
  
for i in range(3):
    guess_num = int(raw_input("請猜想數字:"))
    if guess_num == rand_num:
        print "太棒了你猜對了"
        break
    elif guess_num > rand_num:
        print "你猜想的有點大了,請嘗試小點的數字"
    else:
        print "你猜想的有點小了,請嘗試大點的數字"
else:
    print "不要灰心,此次只是運氣很差,請下次嘗試"
  
print "這個真正的數字是:%" % rand_num

輸出結果:

root@tim:/home/tim# python zhangyu.py
請猜想數字:8
你猜想的有點大了,請嘗試小點的數字
請猜想數字:7
你猜想的有點大了,請嘗試小點的數字
請猜想數字:6
你猜想的有點大了,請嘗試小點的數字
不要灰心,此次只是運氣很差,請下次嘗試
這個真正的數字是:6
root@tim:/home/tim# python zhangyu.py
請猜想數字:5
太棒了你猜對了
這個真正的數字是:5
#!/usr/bin/env python
# -*- coding:utf-8 -*-
name_list = ["alex","seven","eric"]
for ele in name_list:
    if ele == "alex":
        print "kkk"
        continue        本次循環不在繼續執行;從新開始下個循環
    if ele == "eric":
        print "kkk"
        break        不想讓for循環繼續;就用這個
    else:
        pass

while 循環

他的原理是:當條件爲真的時候運行,當條件爲假的時候中止!

沒有一個規定次數,不設置條件永遠循環下去。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
count = 0
while True:
    count +=1
    print "loop",count
    time.sleep(3)
#這個循環3秒鐘自+1 ,後無線循環只要這個條件爲」真「,就無限循環下去
那看下下面的例子
#!/usr/bin/env python
#-*- coding:utf-8 -*-
  
import time
cout = 0
  
while cout < 3:
    cout +=1
    print "shuai",cout
    time.sleep(3)
      
#這個循環每3秒循環一次,當條件cout < 3的時候爲真(本身設置的條件),當cout 不小於3的時候爲假(false)中止。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
import random
rand_num = random.randrange(10)
try_cout = 0
  
while try_cout < 3:
    guess_num = int(raw_input("請輸入猜想的數字:"))
    if guess_num > 10:
        print "輸入的數字超出範圍了"
        continue
    if guess_num == rand_num:
        print "哇!太棒了你猜對了"
        break
    elif guess_num < rand_num:
        print "你猜的數字有點小了,請嘗試大點的數字"
    else:
        print "你猜的數字有點大了,請嘗試小點的數字"
  
    try_cout +=1
else:
    print "不要灰心你,此次只是運氣很差,請下次嘗試"
print "這個真正的數字是:%d"  % rand_num
#當執行到guess_num> 10 若是你輸入的是大於10的數字那麼將會執行continue,就會跳出檔次循環,沒有執行try_cout +=1 因此沒有計數!

註釋:

continue:【當即結束本次循環;用於while和for】
break:【當即跳出循環結構】
pass:【空操做;爲了節省沒必要要的代碼】

 

標誌位

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while True:
    print "我是第一層"
    while True:
        print "我是第二層"
        while True:
            print "我是第三層"

這就是個死循環,當執行到第三個循環的時候就無限循環

#!/usr/bin/env python
#-*- coding:utf-8 -*-
count = 0
while True:
    print "我是第一層"
    jump_1_flag = False
    while True:
        print "我是第二層"
        jump_2_flag = False
        while True:
            count += 1
            print "我是第三層"     
            if count > 3:
                jump_2_flag = True
                break
        if jump_2_flag:
            print "第三層跳到我這裏來了,我也要跳到第一層"
            jump_1_flag = True
            break
    if jump_1_flag:
        print "第二層和第三層跳到第一層了,我也要跳"
        break

執行結果:

root@zhangyu:/python# python zhangyu.py 
我是第一層
我是第二層
我是第三層
我是第三層
我是第三層
我是第三層
第三層跳到我這裏來了,我也要跳到第一層
第二層和第三層跳到第一層了,我也要跳

  

10、Pthon運算符

什麼是運算符?

本章節主要說明Python的運算符。舉個簡單的例子 4 +5 = 9 。 例子中,4和5被稱爲操做數,"+"號爲運算符。

 


Python算術運算符

如下假設變量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

如下實例演示了Python全部算術運算符的操做:

>>> a = 21>>> b = 10
>>> c = 0
>>> c = a + b ; print c
31>>> c = a -b ; print c11>>> c = a * b ; print c210
>>> c = c / b ; print c
21
>>> c = c % b ; print c
1

Python的比較操做符:

運算符 描述 示例
== 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 (a == b) 不爲 true.
!= 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a != b) 爲 true.
<> 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 (a <> b) 爲 true。這個相似於 != 運算符
> 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 (a > b) 不爲 true.
< 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 (a < b) 爲 true.
>= 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 (a >= b) 不爲 true.
<= 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 (a <= b) 爲 true.

 

>>> a = 21>>> b = 10
>>> c = 0
>>> c = a + b ; print c
31>>> c = a -b ; print c11>>> c = a * b ; print c210
>>> c = c / b ; print c
21
>>> c = c % b ; print c
1

 Python賦值運算符:

運算符 描述 示例
= 簡單的賦值運算符,賦值從右側操做數左側操做數 c = a + b將指定的值 a + b 到  c
+= 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 c += a 至關於 c = c + a
-= 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 c -= a 至關於 c = c - a
*= 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 c *= a 至關於 c = c * a
/= 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 c /= a 至關於= c / a
%= 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 c %= a is equivalent to c = c % a
**= 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 c **= a 至關於 c = c ** a
//= 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 c //= a 至關於 c = c // a

 

>>> a = 21
>>> b = 10
>>> c = 0
>>>
>>> c = a +b
>>> c += a ; print c
52
>>> c += a is c = c + a

Python位運算符:

二進制換算成10進制網絡學過的東西回憶下:
128 64 32 16 8 4 2 1
二進制是8位的好比說:01001111    換成10進制的就是:1+2+4+8+64  和上面的對比取值
操做符 描述 示例
& 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 (a & b) = 12 即 0000 1100
| 二進制或複製操做了一個比特,若是它存在一個操做數中。 (a | b) = 61 即 0011 1101
^ 二進制異或運算符的副本,若是它被設置在一個操做數而不是兩個比特。 (a ^ b) =  49 即  0011 0001
~ 二進制的補運算符是一元的,並有「翻轉」位的效果。 (~a ) =  -61 即 1100 0011以2的補碼形式因爲帶符號二進制數。
<< 二進位向左移位運算符。左操做數的值左移由右操做數指定的位數。 a << 2 = 240 即 1111 0000
>> 二進位向右移位運算符。左操做數的值是由右操做數指定的位數向右移動。 a >> 2 = 15 即 0000 1111

二進制「與」計算:(1和1=1  0和任意都爲0)
a = 10
b = 49
a&b
 
10        0    0    0    0       1    0    1    0
49        0    0    1    1       0    0    0    1
=0        0    0    0    0       0    0    0    0
 
 
二進制「或」計算:(遇1得1)
a|b
a = 60 # 60 = 0 0 1 1    1 1 0 0
b = 13 #13 =  0 0 0 0    1 1 0 1
=                     0 0 1 1    1 1 0 1   = 0+0+32+16+8+4+0+1 = 61
                   
 
二進制「異或」運算:(相同爲0,不一樣爲1)
a^b
 
a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
                                  0011 0001  = 0+0+32+16+0+0+0+1=49
 
二進制取反運算:(0置換爲1,1置換爲0)
~a
 a = 60            # 60 = 0011 1100
那麼  -a = 1100 0011     128 + 64 +2 +1 =         
 
二進位向左、右移位運算符:
a=2 那麼 往左移1位就是4以下:
a<<1 =  4        ;         a>>1 = 1

Python邏輯運算符:

運算符 描述 示例
and 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 (a and b) 爲 true.
or 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 (a or b) 爲 true.
not 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。

not(a and b) 爲 false.

 

 

例子:
and運算,都爲真時爲真
>>> 9 > 8 and 9 < 10
True
>>> 9 > 8 and 9 > 10
False
 
or運算,有一個爲真的時候便可爲真
>>> 9 > 8 or 9 > 10
True
>>> 9 < 8 or 9 > 10
False
>>>
 
not運算,假爲真真爲假
>>> not 6.2 <= 6
True
>>> not 6.2 >= 6
False
>>>

Python成員運算符

除了以上的一些運算符以外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。

運算符 描述 實例
in 若是在指定的序列中找到值返回True,不然返回False。 x 在 y序列中 , 若是x在y序列中返回True。
not in 若是在指定的序列中沒有找到值返回True,不然返回False。 x 不在 y序列中 , 若是x不在y序列中返回True。

如下實例演示了Python全部成員運算符的操做:

>>> name_list
['eric', 'tony', 'seven']
查看在與不在:in
>>> "alex" in (name_list)                    判斷alex在不在name_list列表裏;返回結果false表示再也不
False
>>> "tony" in (name_list)                   判斷tony在不在name_list列表裏;返回結果true表示再
True

Python運算符優先級

如下表格列出了從最高到最低優先級的全部運算符:

運算符 描述
** 指數 (最高優先級)
~ + - 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算符
& 位 'AND'
^ | 位運算符
<= < > >= 比較運算符
<> == != 等於運算符
= %= /= //= -= += *= **= 賦值運算符
is is not 身份運算符
in not in 成員運算符
not or and 邏輯運算符

如下實例演示了Python全部運算符優先級的操做:

#!/usr/bin/python

a = 20
b = 10
c = 15
d = 5
e = 0

e = (a + b) * c / d       #( 30 * 15 ) / 5
print "Value of (a + b) * c / d is ",  e

e = ((a + b) * c) / d     # (30 * 15 ) / 5
print "Value of ((a + b) * c) / d is ",  e

e = (a + b) * (c / d);    # (30) * (15/5)
print "Value of (a + b) * (c / d) is ",  e

e = a + (b * c) / d;      #  20 + (150/5)
print "Value of a + (b * c) / d is ",  e

以上實例輸出結果:

Value of (a + b) * c / d is 90
Value of ((a + b) * c) / d is 90
Value of (a + b) * (c / d) is 90
Value of a + (b * c) / d is 50

 

字符串(string)

字符串格式化

"字符串 %s %d" %("s表明的字符串", d表明的數字)
name = "i am %s" %"alex"
name = "i am %s ,age %d" % ("alex",73)
%s字符串是佔位符;就是表明後邊的alex
%d數字是佔位符;就是表明後邊的73
name = "i am %s ,age %d"
name %("alex", 123)
如:
>>> name = "i am %s" %"alex"
>>> name
'i am alex'
###################################################

>>> name = "i am {0},age {1}"
>>> name.format("alex", 999)
'i am alex,age 999'
>>>new_name = name.format("alex", 999)
>>>print new_name
i am alex,age 999

' ' 單行字符串
" " 單行字符串
""" """ 多行字符串|也能夠當字符串

>>> print 'aaaaaa',"bbbbbb","""
... abc
... def
... ghi
... """
aaaaaa bbbbbb 
abc
def
ghi 

索引
如:

name = "alex"
#name[0]="a"        第一個字符用0表示;第一個字符是a
>>> print name[0]        打印第一個字符
a
>>> print name[0:2]        打印前兩個字符(打印小於2的字符;如:al)
al
>>> print name[0:]        打印到結尾
alex
>>> print name[-1]        打印最後一個字符
x
>>> print len(name)        查看多少個字符;下標是從0開始
4
>>> print name[-1] == name[len(name)-1]

>>> name = "    alex    "
>>> print name.strip()        去除兩頭的空格
alex
>>> print name.lstrip()        去除左邊的空格
alex    
>>> print name.rstrip()        去除右邊的空格
    alex

集合

建立列表
name_list = ["alex","seven","eric"]
或(下面這句很重要)
name_list = list(["alex","seven","eric"])

定義一個列表
>>> name_list = ['alex','eric','tony']
>>> name_list
['alex', 'eric', 'tony']
>>> id(name_list)
140346760921456
追加:append    給name_list列表裏追加abc
>>> name_list.append('seven')
>>> name_list
['alex', 'eric', 'tony', 'seven']
>>> id(name_list)                (在列表裏修改;不會重新分配內存空間)
140346760921456
刪除:del        刪除第一個字符
>>> name_list    
['alex', 'eric', 'tony', 'seven']
>>> del name_list[0]
>>> name_list       
['eric', 'tony', 'seven']
長度:len
>>> len(name_list)

編譯分隔符:join    表示以雙引號裏的符號;從新分割列表

>>> "_".join(name_list)
'eric_tony_seven'
>>> name_list
['eric', 'tony', 'seven']

元組

建立元祖:
ages = (11,22,33,44)
或(下面這句很重要)
ages = tuple((11,22,33,44))
["alex","seven","eric"]列表可修改
("alex","seven","eric")元祖不可修改
[
"alex",("seven","eric")
]
#列表包含兩個元素;第一:字符串;第二:元祖
增刪改列表的最小元素

字典
字典:dict;字典無序存儲;特殊的for循環

#####################下面是字典#####################
#冒號前面是鍵;後面是值
person = {
    "name": "alex",
    "age": 18,
    "gender": "不知道"
}
for ele in person:
    print ele
#####################下面是字典#####################
#冒號前面是鍵;後面是值
person = {
    "name": "alex",
    "age": 18,
    "gender": "不知道"
}
for k,v in person.items():
    print k
    print v
    print "========="
root@zhangyu:/python# python m.py 
gender
不知道
=========
age
18
=========
name
alex
=========

person = {
    "name": "alex",
    "age": 18,
    "gender": "1"
}
print person.keys()
print person.values()
C:\Python27\python.exe E:/python學習/python練習/m.py
['gender', 'age', 'name']
['1', 18, 'alex']


person.keys()           因此key;列表
person.values()          因此valu;列表
person.items()          全部的元素;鍵值對;僅for循環使用;將元素賦值給k,v

  

重要的;
相同:都有切片;索引(-1);len();包含,循環
不一樣:
str字符串:
  從新開闢空間
list表:
  修改後內存地址不變
tuple元組:
  不容許修改
dict字典;鍵值對;字典無序;特殊的for循環

文件裏寫讀

一、找到文件
E:/log
二、打開文件
open
file_obj = file("文件的路徑","模式")
模式:r讀 w寫 a追加內容 r+讀寫 w+寫讀
三、文件操做、讀寫
file_obj.read() 將全部讀入內存
file_obj.readlines() [行,行]讀入
for line in file_obj.xreadlines(): 一行一行的讀(這句被廢棄;用下面那句)
print line
for line in file_obj: 每次循環;只讀一行;避免所有讀入內存
file_obj.write() 寫入文件
file_obj.writeline() 以行模式寫入
四、文件關閉
file_obj.close()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#打開log文件
file_obj = file("E:\log.txt","r")
#讀取文件
print file_obj.read()
#關閉文件
file_obj.close
C:\Python27\python.exe E:/python學習/python練習/m.py
alex;123;1
eric;456;2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#打開log文件
file_obj = file("E:\log.txt","r")
#讀取文件
#print file_obj.read()
#print file_obj.readlines()
line_list = file_obj.readlines()
#關閉文件
file_obj.close
for ele in line_list:
    print ele
C:\Python27\python.exe E:/python學習/python練習/m.py
alex;123;1
eric;456;2

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#打開log文件
file_obj = file("E:\log.txt","r")
#讀取文件
line_list = file_obj.readlines()
#關閉文件
file_obj.close
for ele in line_list:
    #用strip去掉空格
    print ele.strip()
C:\Python27\python.exe E:/python學習/python練習/m.py
alex;123;1
eric;456;2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#打開log文件
file_obj = file("E:\log.txt","r")
#讀取文件
line_list = file_obj.readlines()
#關閉文件
file_obj.close
for ele in line_list:
    #定義line等於去除空格的ele變量
    line = ele.strip()
    #定義values等於以分號分割的列表
    values = line.split(";")
    #打印values變量所表明的字符串
    print values
C:\Python27\python.exe E:/python學習/python練習/m.py
['alex', '123', '1']
['eric', '456', '2']


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使登陸次數自動加1(顯示)
#打開log文件
file_obj = file("E:\log.txt","r+")
#讀取文件
line_list = file_obj.readlines()
for ele in line_list:
    #定義line等於去除空格的ele變量
    line = ele.strip()
    #定義values_list等於以分號分割的列表
    value_list = line.split(";")
    #定義last_value等於(使用int包裹表示字符串最後一個值的變量value_list[-1];表示最後一個值爲整型)
    last_value = int(value_list[-1])
    #使用(+=1)讓last_value自動加1
    last_value += 1
    #使自動加1的值等於字符串最後一個值
    value_list[-1] = last_value
    #打印value_list
    print value_list
#關閉文件
file_obj.close

C:\Python27\python.exe E:/python學習/python練習/m.py
['alex', '123', 2]
['eric', '456', 3]


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#打開log文件
file_obj = file("E:\log.txt","r+")
#讀取文件
line_list = file_obj.readlines()
#創建空列表
my_list =[]
for ele in line_list:
    #定義line等於去除空格的ele變量
    line = ele.strip()
    #定義values_list等於以分號分割的字符串line
    value_list = line.split(";")
    #定義last_value等於(使用int包裹表示字符串最後一個值的變量value_list[-1];表示最後一個值爲整型)
    last_value = int(value_list[-1])
    #使用(+=1)讓last_value自動加1
    last_value += 1
    #使自動加1的值等於字符串最後一個值
    value_list[-1] = str(last_value)
    #編輯分割後列表;以分號隔開
    value_str = ';'.join(value_list)
    #在空列表my_list裏追加value_str的內容
    my_list.append(value_str)
#定義my_str變量;以換行符\n鏈接my_list
my_str = "\n".join(my_list)
#將my_str寫入文件
file_obj.write(my_str)
#關閉文件
file_obj.close
View Code

 

 

學習用;

博客裏的內容有老師的;同窗的;本身整理的;應該不算亂

相關文章
相關標籤/搜索