天天看點

進擊python第一篇:相遇

1、第一句Python代碼

  在 目前目錄下建立 hello.py 檔案,内容如下:

print "hello,world!"

執行 hello.py 檔案,即: python hello.py

注:字尾可以不是.py

  python内部執行過程如下:

進擊python第一篇:相遇

2、解釋器

  上一步中執行 python hello.py 時,明确的指出 hello.py 腳本由 python 解釋器來執行。

如果想要類似于執行shell腳本一樣執行python腳本,例: ./hello.py ,則

  1. 要有執行(x)權限
  2.  hello.py 檔案的頭部指定解釋器,如下:
1 #!/usr/bin/env python
2 
3 print "hello,world"      

如此一來,執行: ./hello.py 即可。

  同C語言相比解釋器編譯過程:

python語句—>位元組碼—>機器碼

C語言語句—>機器碼

ps:給予 hello.py 執行權限,chmod 755 hello.py

  pyc檔案:執行Python代碼時,如果導入了其他的 .py 檔案,那麼,執行過程中會自動生成一個與其同名的 .pyc 檔案,該檔案就是Python解釋器編譯之後産生的位元組碼。

當.py檔案裡的内容發生改變時,當調用此檔案當子產品時.pyc會重新生成一個新檔案

ps:代碼經過編譯可以産生位元組碼;位元組碼通過反編譯也可以得到代碼

3、内容編碼

  python解釋器在加載 .py 檔案中的代碼時,會對内容進行編碼(預設ascill)

  ASCII(American Standard Code for Information Interchange,美國标準資訊交換代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256,是以,ASCII碼最多隻能表示 256 個符号。

進擊python第一篇:相遇
進擊python第一篇:相遇

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

  Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼。Unicode 是為了解決傳統的字元編碼方案的局限而産生的,它為每種語言中的每個字元設定了統一并且唯一的二進制編碼,規定雖有的字元和符号最少由 16 位來表示(2個位元組),即:2 **16 = 65536,

注:此處說的的是最少2個位元組,可能更多

  UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是将所有的字元和符号進行分類:ascii碼中的内容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存...

是以,python解釋器在加載 .py 檔案中的代碼時,會對内容進行編碼(預設ascill),如果是如下代碼的話:

1 #!/usr/bin/env python
2 
3 print "你好 " 
4 
5 報錯:ascii碼無法表示中文( SyntaxError: Non-ASCII character '\xc4' in file hello.txt on line 2)      

改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 print "你好
5 
6        

4、注釋

  單行注視:# 被注釋内容

  多行注釋:""" 被注釋内容 """ 或’’’ 被注釋内容’’’

5、執行腳本傳入參數

  Python有大量的子產品,進而使得開發Python程式非常簡潔。類庫有包括三中:

  • Python内部提供的子產品
  • 業内開源的子產品
  • 程式員自己開發的子產品

例子:Python内部提供一個 sys 的子產品,其中的 sys.argv 用來捕獲執行python腳本時傳入的參數

1 #!/usr/bin/env python
 2 
 3 # -*- coding: utf-8 -*-
 4 
 5 import sys
 6 
 7 print sys.argv 
 8 
 9 結果:
10 
11 F:\python>python hello.py localhost:80
12 
13 ['hello.py', 'localhost:80']      

6、變量

  1)     聲明變量

#!/usr/bin/env python

# -*- coding: utf-8 -*-

name = "lenliu"

上述代碼聲明了一個變量,變量名為: name,變量name的值為:"lenliu"

  變量的作用:昵稱,引用位址,其代指記憶體裡某個位址中儲存的内容;用id()方法查詢記憶體位址

進擊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']

2)、變量的指派

1 #!/usr/bin/env python
 2 
 3 # -*- coding: utf-8 -*-
 4 
 5 name1 = "wupeiqi"
 6 
 7 name2 = "lenliu"

        
進擊python第一篇:相遇
8 name1 = "wupeiqi" 9 10 name2 = name1 11
進擊python第一篇:相遇
12        

7、輸入

  1)     raw_input

name = raw_input("請輸入使用者名:")      # 将使用者輸入的内容指派給 name 變量

print name                            # 列印輸入的内容

輸入密碼時想要不可見,需要利用getpass 子產品中的 getpass方法,即:

import getpass

pwd = getpass.getpass("請輸入密碼:") 

print pwd

  2)    raw_input與input比較:

例子:

進擊python第一篇:相遇
進擊python第一篇:相遇
1 >>> name = input("what is your name?")
 2 
 3 what is your name?lzl
 4 
 5 Traceback (most recent call last):
 6 
 7   File "<stdin>", line 1, in <module>
 8 
 9   File "<string>", line 1, in <module>
10 
11 NameError: name 'lzl' is not defined
12 
13  
14 
15 >>> name = input("what is your name?")
16 
17 what is your name?"lzl"  #字元串必須加雙引号
18 
19  
20 
21 >>> age=raw_input("How old are you?")
22 
23 How old are you?18
24 
25 >>> type(age)
26 
27 <type 'str'>      #存為字元串      

View Code

  1.  input會假設使用者輸入的是合法的python表達式
  2. raw_input會把輸入當做原始資料(raw data),然後放入字元串中

8 、流程控制和縮進

需求一、使用者登陸驗證

# 提示輸入使用者名和密碼

# 驗證使用者名和密碼

# 如果錯誤,則輸出使用者名或密碼錯誤

# 如果成功,則輸出 歡迎,XXX!

進擊python第一篇:相遇
進擊python第一篇:相遇
1 #!/usr/bin/env python
 2 
 3 # -*- coding: encoding -*-
 4 
 5  
 6 
 7 import getpass
 8 
 9 name = raw_input('請輸入使用者名:')
10 
11 pwd = getpass.getpass('請輸入密碼:')
12 
13  
14 
15 if name == "lenliu" and pwd == "cmd":
16 
17       print "歡迎,lenliu!"
18 
19 else:
20 
21       print "使用者名和密碼錯誤"      

需求二、根據使用者輸入内容輸出其權限

# 根據使用者輸入内容列印其權限

# lenliu --> 超級管理者

# amy --> 普通管理者

# 其他 --> 普通使用者

進擊python第一篇:相遇
進擊python第一篇:相遇
1 #!/usr/bin/env python
 2 
 3 # -*- coding: encoding -*-
 4 
 5  
 6 
 7 name = raw_input('請輸入使用者名:')
 8 
 9  
10 
11 if name == "lenliu":
12 
13       print "超級管理者"
14 
15 elif name == "amy":
16 
17       print "普通管理者"
18 
19 else:
20 
21       print "普通使用者"      

PS:外層變量,可以被内層變量使用,但内層變量,無法被外層變量使用

  學習Python與其他語言最大的差別就是,Python的代碼塊不使用大括号({})來控制類,函數以及其他邏輯判斷。python最具特色的就是用縮進來寫子產品。

縮進的空白數量是可變的,但是所有代碼塊語句必須包含相同的縮進空白數量,這個必須嚴格執行

9.多行語句

Python語句中一般以新行作為為語句的結束符。

但是我們可以使用斜杠( \)将一行的語句分為多行顯示,如下所示:

1 total = item_one + \
2 
3         item_two + \
4 
5         item_three      

語句中包含[], {} 或 () 括号就不需要使用多行連接配接符。如下執行個體:

1 days = ['Monday', 'Tuesday', 'Wednesday',
2 
3         'Thursday', 'Friday']      

10、初識基本資料類型

  1)、數字

int(整型)

  在32位機器上,整數的位數為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647

  在64位系統上,整數的位數為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(長整型)

  跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由于機器記憶體有限,我們使用的長整數數值不可能無限大。

  注意,自從Python2.2起,如果整數發生溢出,Python會自動将整數資料轉換為長整數,是以如今在長整數資料後面不加字母L也不會導緻嚴重後果了。

float(浮點型)

  浮點數用來處理實數,即帶有小數的數字。類似于C語言中的double類型,占8個位元組(64位),其中52位表示底,11位表示指數,剩下的一位表示符号。

      PS:3.23和52.3E-4是浮點數的例子。E标記表示10的幂。在這裡,52.3E-4表示52.3 * 10-4

complex(複數)

  複數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裡的x和y都是實數。

      PS:(-5+4j)和(2.3-4.6j)是複數的例子

注:Python中存在小數字池:-5 ~ 257,即

  2)、布爾值

  真或假 (1 或 0)

  3)、字元串

"lenliu"

  萬惡的字元串拼接“+”:

  python中的字元串在C語言中展現為是一個字元數組,每次建立字元串時候需要在記憶體中開辟一塊連續的空間,并且一旦需要修改字元串的話,就需要再次開辟空間,萬惡的+号每出現一次就會在内從中重新開辟一塊空間。

  字元串格式化

1 name = "lzl"
2 
3 print "I am %s " % name
4 
5 輸出: I am lzl      

PS: 字元串是 %s    整數 %d    浮點數%f

字元串常用功能:

     移除空白、分割(split)、長度、索引、切片、連接配接(join)

  4)清單

建立清單:

name_list = ['lenliu', 'seven']   或

name_list = list(['lenliu', 'seven'])

基本操作:

     索引、切片、追加、删除、長度、切片、循環、包含

  5)元祖 (不能修改和删除)

建立元祖:

ages = (11, 22, 33, 44, 55)  或

ages = tuple((11, 22, 33, 44, 55))

    索引、切片、循環、長度、包含

  6)字典(無序)

建立字典:

person = {"name": "lenliu", 'age': 18}   或

person = dict({"name": "lenliu", 'age': 18})

常用操作:

  索引、新增、删除、鍵、值、鍵值對、循環、長度

PS:循環,range,continue 和 break

11、初識文本的基本操作

打開檔案:

  file_obj = file("檔案路徑","模式")  或 file_obj = open("檔案路徑","模式")

打開檔案的模式有:

  • r,以隻讀方式打開檔案
  • w,打開一個檔案隻用于寫入。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。
  • a,打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。
  • w+,打開一個檔案用于讀寫。如果該檔案已存在則将其覆寫。如果該檔案不存在,建立新檔案。

讀取檔案的内容:

obj.read()         # 一次性加載所有内容到記憶體  

obj.readlines()    # 一次性加載所有内容到記憶體,并根據行分割成字元串

for line in obj:   # 每次僅讀取一行資料

  print line

寫檔案的内容:

obj.write('内容')

關閉檔案句柄:

obj.close()