軟件準備
python-3.5.1.exe
pycharm-community-4.5.4.exe
安裝 python-3.5.1.exe
勾選add python 3.5 to path 選項
然後選自定義安裝
該頁面全部選中,進入到下一頁面
勾選第一個,第五個會自動勾選,下一步安裝即可,可調整目錄
看是否安裝成功,在cmd中輸入python,可以看到版本
python安裝完成後,pip也會自動安裝完成,
查看方式 pip --version
pip相當於手機的應用市場,管理python使用的軟件包
pip就是包管理工具
安裝git
默認是一路下一步,但是有些步驟要知道
勾選如下選項
windows explorer integration
simple context menu
git bash here
git gui here
run git from windows command prompt
checkout windows-style, commit unix-style line endings
安裝完成後
如果只有一個版本的話,直接在cmd中運行python
print("aaa") #回車即可
exit() #退出python
交互只能運行一行,如果要運行很多行,要創建文件
創建test.py,用editIDLE來編輯,這是python自帶的
print("hello")
for i in range(2):
print i
運行 python tp.py,運行是在相應的目錄下
如果有多個版本的話
py -2 tp.py #以python第二個版本運行
py -3 tp.py #以python第三個版本運行
第2課 常量和變量
常量:值不能改變
數字常量:1 100 3.5
字符串常量:'a' "123"
'''
可跨多行
''' #3個引號是保留原來3引號字符串中的格式
布爾值常量:True False
高級類型常量:[] {}
變量:值能改變
通過等號改變它的值,也就是賦值
a=1
a=20 #改變了值
a="hi" #改變了類型
變量的命名:只能包含數字、字母和下劃線。
數字不能開頭
區分大小寫
Aname和aname是不同的變量
12name是非法變量名
第3課 數值計算
基礎四則
1+2
9-7
23*45
7/8
2**3 #表示2的3次方
在Python3中: 7 / 2 == 3.5 , 即整數除以整數,得到的是浮點數。
真假判斷
1 > 2
9 < 7
23 >= 45
7 <= 8
2 == 3
True != False
邏輯運算
not 條件
真假值反轉
條件A and 條件B
A,B均爲真才真
條件A or 條件B
A,B一個爲真極爲真
可通過括號改變運算順序
一種簡寫
a=a+1 等價於 a+=1
a=a-1 等價於 a-=1
第4講 列表與For循環
列表:一排
[1,2,3]
["a","b","c"]
[True, 1, "a"]
列表取值
a=[1,"a","3","6","google"] #從0開始
a[1]是"a"
a[-1]是"google"
a[1:4]是["a",3,6] #[) 是前閉後開的區間
列表添加刪除值
a.insert(0,"fir") #插入第0個元素
del a[2] #刪除第2個元素
a.append("ch") #插入最後
列表的遍歷
for item in a:
print(item)
第5講 控制流
控制代碼的執行順序
if語句
if score>90:
is_best=True
elif score>80:
is_better=True
else:
failed=True
break和continue
row=[1,2,3,4,5]
for item in row:
if item == 2:
continue
if item == 4:
break
while 條件
#do something
例子
a=[1,2,3,4,5]
while len(a) > 0: #a還有元素
if a[-1] == 4:
continue
else
print( a.pop() ) #打印出列表最後一個元素
第6講 函數
函數定義:
def clean_room():
clean_table()
clean_floor()
clean_trash()
形參:
def clean_room(room_name):
clean_table(room_name)
clean_floor(room_name)
clean_trash(room_name)
clean_room("主臥")
位置參數:
def clean_room(room_name, level):
#clean code
clean_room("主臥", 2)
關鍵字參數:
def clean_room(room_name, level):
#clean code
clean_room(level=2, room_name="主臥") #明確指明給哪個參數賦值
默認參數:
def clean_room(room_name, level=2):
#clean code
clean_room(room_name="主臥") #level默認傳2
返回值
def clean_room(room_name, level=2):
#clean code
finished=True
return finished #如果沒有值會返回NULL
success = clean_room(room_name="主臥")
多值返回
def clean_room(room_name, level=2):
#clean code
finished=True
error_msg = "沒有清潔劑了"
return finished, error_msg
success, msg = clean_room(room_name="主臥") #需要定義兩個變量進行接收
文檔字符串
def clean_room(room_name, level=2):
'''這個函數用來清理房間 #這是註釋,必須放在函數定義的下面,說明功能
'''
finished=True
#clean code
error_msg = "沒有清潔劑了"
return finished, error_msg
第7講課 模塊
模塊:以.py結尾的文件稱爲模塊
包:可包含包和模塊,但是其中要包含一個文件, __init__.py
文件夾可包含模塊和文件夾,文件夾與包同級,差別在於文件夾沒有 __init__.py文件
例子1:
test包下文件
__init__.py #該文件就是一個空文件
input.py
def get_input():
print("input")
parse.py
from .input import get_input #同包的調用
def do_parse():
get_input()
print("parse")
tp.py--與test包平級
from test.parse import do_parse #不同包的調用
do_parse()
例子2:目錄結構如下
server.py
models.py
deps---------tools.py
|
-----__init__.py
|
-----adapter--------__init__.py
|
-----xml.py
|
-----json.py (class JsonAdapter)
server.py中要使用到JsonAdapter, 那麼導入的語句應該是:
from deps.adapter.json import JsonAdapter
說明:模塊被導入時,代碼會運行一次,放到緩存中
再次導入,不會再運行
小技巧
1 dir(模塊) -- 查看這個模塊,具體的使用需要再學習
2 模塊有一個內置變量 __name__
一般情況下值爲相對引用路徑,如"lib.parse"
在入口模塊中值爲"__main__"
if __name__=="__main__"
#do something
第8講 高級數據類型
元組
1 與列表很相似,定義爲
(1, "123", 56)
2 不同是,原組是不能改變的,類似於常量
a=["a", 1, 2]
a.append(3)
但是原組是不能增加或刪除元素的
3 (2)其實是2,(2,)就是原組
字典
字典定義爲
{
"123":123,
456:"hello"
}
是一種映射的關係
a={"123":123,456:"hello"}
a["123"] #字典取值,得123
a[456]="world" #字典設置值
字符串
字符串其實是一個特殊的列表,列表中每個元素是一個字符
a="hello lilei"
a[:5] #"hello",這是字符串切片 字符串本質是常量,可以查詢,不能修改
a="hello %s" % "lilei" #佔位符替換
a="%s %s" % {"hello", "lilei"}
a="%{verb}s %{name}s" % {"verb":"hello", "name":"lilei"} #字符串中替換變量的使用
有關函數
當一個函數返回多個值的時候,它實際上返回了一個原組,如 a,b=fun()
a,b=(1,2)
#元組傳參
param=(1,2)
add(* param)
與
add(1,2)一樣
#字典傳參
param={"a":1,"b":2}
param(**param) --> param(a=1, b=2)
第9課 類和對象
定義一個貓類
class Cat:
leg_cnt = 4 #類屬性
def __init__(self, cat_name):
self.name=cat_name
def change_name(self, cat_name):
self.name=cat_name
def climb(self):
print("cat %s climb a tree" %self.name)
使用Cat這個類
tom = Cat("Tom") #self由python自動傳遞
tom.change_name("ATom")
tom.climb()
tom.leg_cnt == 4 #訪問類屬性
類的繼承
class PersianCat(Cat):
def __init__(self, cat_name):
super().__init__(cat_name)
def jump(self):
print("try jump")
jack = PersianCat("jack")
jack.jump()
jack.climb()
第10課 文件處理
寫入文件
poem='''\
Programming is fun
When the Work is done
if you wanna work also fun:
use Python!
'''
# '''\ 這個斜線表示讓結尾的換行符失效。
# '''表示按文本自身的格式
f=open('poem.txt', 'w') #w(重新寫入) r a(追加) 該文件寫入當前文件夾
f.write(poem) #write text to file
f.close()
讀取文件
f=open('poem.txt') #默認是r
while True:
line = f.readline()
if len(line) == 0:
break
print(line, end="")
#print內容後面默認會增加一個\n
#這裏end禁止結尾加\n,改爲加""
f.close()
讀寫文件的簡便方式
#write
with open('poem.txt', 'w') as f:
f.write(poem)
#read
with open('poem.txt') as f:
while True:
line = f.readline()
if len(line) == 0:
break
print(line, end="")
#說明:離開with語句會自動關閉文件
第11課 異常處理
Exception--AssertError ValueError--異常對象
格式
try:
一段可能出錯的代碼
except ValueError as e:
print(e) #處理這個異常
except Exception:
處理其餘所有的異常
else:
沒有異常的處理代碼
說明:try下面的三段代碼只有一段會執行
格式:
try:
一段可能出錯的代碼
finally:
最後一定會執行的代碼,例如
f.close()
格式:拋出異常
raise e
例子:
try:
int("a")
except ValueError as e:
print(e) #打印異常
raise e #加上這句讓是拋出異常,讓外面來處理
====補充課程====
第一課 裝飾器
具體內容參見ppt
1 函數可作爲參數進行傳遞,函數就是變量,類型爲函數
def make_list(a, b)
return [a,b]
def add(a, b)
return a+b
def play_with_number(do_func, a, b)
return do_func(a, b)
print(play_with_number(add, 2, 1))
print(play_with_number(make_list, 2, 1))
2 函數可以作爲返回值返回
import random
def random_action(): #函數裏面定義兩個函數
def make_list(a, b):
return [a, b]
def add(a, b):
return a+b
actions = [make_list, add]
return random.choice(actions) #隨機返回一個函數
action=random_action()
print(action(2,1))
3 函數可以使用外層空間的變量,圖片中畫星星的變量都可以使用
import random
def random_action(n): #注意n的使用
def make_list(a, b):
return [a, b] * n
def add(a, b):
return (a+b) * n
actions = [make_list, add]
return random.choice(actions)
action=random_action(3)
print(action(2,1))
4 根據上面3點性質,以函數爲參數,並返回一個函數
輸入函數A ---- 函數(增強) ---- 輸出函數B
這個 函數(增強) 就是裝飾器
5 裝飾器的使用--打印函數的調用參數
增強函數的使用@符號
原始
DEBUG = True
def print_args(funcA):
def funcB(a, b):
if DEBUG:
print(a, b)
return funcA(a, b)
return funcB
def make_list(a, b):
return [a, b]
action = print_args(make_list)
action(1,2)
裝飾
DEBUG = True
def print_args(funcA):
def funcB(a, b):
if DEBUG:
print(a, b)
return funcA(a, b) #調用函數A
return funcB
@print_args #我的理解 make_list 作爲參數傳給 print_args,表示該函數增強了
def make_list(a, b):
return [a, b]
make_list(1,2) #這是增強了的 make_list 的函數
原始與裝飾的邏輯一樣,只是寫法不一樣
6 適配參數
7 位置參數與關鍵字參數 1
函數定義
def function_name(a,b,c,d,g,e,f="a"):
pass
def function_name(*args, **kwargs): #第一個參數是位置參數,第二個參數是關鍵字參數
pass
#args是原組(1,3,4,6) kwargs是字典{"e":2,"f":"a","g":True}
函數調用:
function_name(1,3,4,6,e=2,f="a",g=True)
#調用時 有=號的寫到沒有=號的後面
#普通參數不能亂序,關鍵字參數可以亂序
8 位置參數與關鍵字參數 2
傳入不確定個數個參數
function_name(1,3,4,6,e=2,f="a",g=True)
pos_args=(1,3,4,6)
name_args={"e":2,"f":"a","g":True}
function_name(*pos_args, **name_args)
9 可接收任何可能的參數
DEBUG = True
def print_args(funcA):
def funcB(*pos_args, **name_args):
if DEBUG:
print(pos_args, name_args)
return funcA(*pos_args, **name_args)
return funcB
@print_args
def make_list(a, b):
return [a, b]
@print_args
def add(a, b, c=3):
return a + b + c
make_list(1,2)
add(1,2,3)
第二課 刪除文件中的空行和空白
" 123 ".strip() #"123"
" \r 123567 \n ".strip() #"123567"
" \r 123 567 \n".strip() #"123 567"
strip()是生成新的字符串
"123abc32".strip("123") #字符串兩遍過濾123,結果爲"abc"
去空行代碼 vim trans.py
with open("more", "r") as f:
for line in f.readlines():
line = line.strip()
if len(line) > 0:
print(line)
執行
python3 trans.py
輸到另外文件中
python trans.py > less
vim less #less這個文件有內容
亂碼問題
result = []
with open("more", "r") as f:
for line in f.readlines():
line = line.strip() #加上.decode("utf-8") 這句也是亂碼
if len(line) > 0:
result.append(line)
print(result) #打印出來的結果爲亂碼,這就需要看編碼問題
第三課 內置變量
print "a.py"+__name__ #輸出爲a.py__main__
在b.py中
print "b.py"+__name__
在a.py中
import b
print "a.py"+__name__
運行a的結果爲
b.py:b #模塊名,在引入的時候就執行了
a.py:__main__
在b.py中調整
if __name__ == "__mian__"
print "b.py"+__name__
第四課 類方法和靜態方法
結合ppt看
例子1:類方法
class Cat():
total_count=0 #類屬性
def __init__(self, name):
self.name=name
self.born_one()
def say_hello(self):
print("I'm %s, hello" % self.name)
@classmethod
def born_one(cls): #類方法
cls.total_count += 1
tom = Cat("tom")
lily = Cat("lily")
tom.say_hello()
lily.say_hello()
print(Cat.total_count) #打印結果爲2
例子2:靜態方法
class Cat():
total_count=0
def __init__(self, name):
self.name=name
def say_hello(self):
print("I'm %s, hello" % self.name)
@staticmethod
def get_leg_count(): #靜態方法
return 4
print(Cat.get_leg_count())
對象有的類沒有,類有的對象也有
靜態方法就是類方法
第五課 查看軟件包信息
在windows下無法查看目前,是不是需要安裝所需的開發包??
#查看源代碼
import django
django.__file__
cd 進入 查看源代碼
#查看版本
import django
django.VERSION
MYSQLdb.__version__
#查看django都有哪些屬性,便於查看
dir(django)
第六課 with的使用
結合ppt看
例子1:簡單應用,無異常情況
class UserFile():
def __init__(self, path, mode): #構造函數
self.path = path
self.mode = mode
def __enter__(self): #返回對象
return self
def write(self, text): #實際定義的函數
print(text) #簡單輸出
def __exit__(self, exc_type, exc_value, exc_tb): #是否有異常
pass
with UserFile('/tmp/a.txt', 'w') as f:
f.write("hello world") #打印出 hello world
例子2:簡單應用,有異常情況,注意代碼中最好不要有中文
class UserFile():
def __init__(self, path, mode):
self.path = path
self.mode = mode
def __enter__(self):
return self
def write(self, text):
print(text)
def __exit__(self, exc_type, exc_value, exc_tb):
print(exc_type)
print(exc_value)
print(exc_tb)
return True #True表示不會拋出異常,
#False 或 什麼都不寫,表示拋出異常讓python來處理
with UserFile('/tmp/a.txt', 'w') as f:
f.write("hello world")
int("hello") #將值轉化成整數,如果不能轉則拋出異常
#接拋出的異常
try:
with UserFile('/tmp/a.txt', 'w') as f:
f.write("hello world")
int("hello") #將值轉化成整數,如果不能轉則拋出異常
except ValueError:
print("我捕獲到了異常") #這裏接到拋出的異常,不會繼續向上拋出