1、第一句Python代碼
在 目前目錄下建立 hello.py 檔案,内容如下:
print "hello,world!"
執行 hello.py 檔案,即: python hello.py
注:字尾可以不是.py
python内部執行過程如下:

2、解釋器
上一步中執行 python hello.py 時,明确的指出 hello.py 腳本由 python 解釋器來執行。
如果想要類似于執行shell腳本一樣執行python腳本,例: ./hello.py ,則
- 要有執行(x)權限
- 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 個符号。
顯然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()方法查詢記憶體位址
變量定義的規則:
- 變量名隻能是 字母、數字或下劃線的任意組合
- 變量名的第一個字元不能是數字
- 以下關鍵字不能聲明為變量名
['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
12
7、輸入
1) raw_input
name = raw_input("請輸入使用者名:") # 将使用者輸入的内容指派給 name 變量
print name # 列印輸入的内容
輸入密碼時想要不可見,需要利用getpass 子產品中的 getpass方法,即:
import getpass
pwd = getpass.getpass("請輸入密碼:")
print pwd
2) raw_input與input比較:
例子:
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
- input會假設使用者輸入的是合法的python表達式
- raw_input會把輸入當做原始資料(raw data),然後放入字元串中
8 、流程控制和縮進
需求一、使用者登陸驗證
# 提示輸入使用者名和密碼
# 驗證使用者名和密碼
# 如果錯誤,則輸出使用者名或密碼錯誤
# 如果成功,則輸出 歡迎,XXX!
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 --> 普通管理者
# 其他 --> 普通使用者
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()