基礎性質
概念
1)曆史
發展久,與java同期
2)版本
3.X 2.7lib多 常用
3)腳本語言,不需要編譯
4)解釋性語言,讀一行解釋一行
5) 運作性能較差,沒有ruby差 哈哈哈哈
6) lib(庫檔案)多,聲音視訊,資料挖掘,支援的東西多
7)可讀性高
特點
1)GIL:全局解釋鎖 Global Interpreter Lock
不能利用多塊cpu,是以使用多程序機制(并行)解決GIL,消耗資源。
java,go 可以支援多cpu
2)面向對象
3) 在java static 塊寫程式,就和寫腳本一樣
程式設計環境:
1)vim
在vim 中設定縮進為4個空格
touch /.vim/vimrc
68set encoding=utf-8
69set number
70set hlsearch 高亮顯示
71set tabstop=4 一個tab四個空格
72set shiftwidth=4
73set expandtab
2)python
退出 exit() | Crtl+d
幫助 help(str) 檢視字元串幫助文檔
3)pycharm
基礎知識
基本運算
變量類型:變量的類型不指定,直接定義
基本類型和強制類型轉換
如果不強制類型轉換,兩種不同的類型運算就會報錯,這就是強類型的程式設計語言的特點
布爾類型和邏輯運算
True
False 0 None '' [] {}
1) []
a=[] // a=[1,2,3]
if a:
print 'a:',a
else:
print 'empty'
2) None
a=None
if a == None
print 'None'
if a is None:
print 'None' 常用
3)and or not in
if 'a' in[1,2,4]
print ...
注意: 盡量不用浮點數
list 清單
沒有長度限制,可以有元素也可無,支援不同類型的存儲
c={1,2,3,4}
c.append(5)
c.append(XX)
print c
tuple 元組
(1,2)
tuple 元組:長度不可變
str ,string,長度不可變
dict字典 鍵值對,key-value
d={
"a":"abc",
'b':123,
'c':[1,2,3],
'd':{'a':111}
}
print d['a'] abc
print d['b'] 123
兩種引用
""" 可以換行,通常用作方法的注釋
檔案操作
讀取檔案
with open('lalala.txt','r')as f:
test=f.read()
print test
寫檔案(覆寫寫入)
out=miaomiao
with open('lalala.txt','w')as f:
f.write(out)
語句
1)pass 空操作。
if xxx='a'
pass
do... 程式主體
2)break 跳出目前循環。
3)continue 本次循環continue 以下的語句不執行。
4)while True永真循環用break跳出
do...
if xxx=='aaa'
break
5)for
1)一重循環和縮進
for item in [1,2,3,4,5]:
printitem 在循環語句中
print a 不在循環語句中
python : 靠縮進區分語句是否在循環中
2)兩重循環
for item in [1,2,3,4,5]:
printitem
foriteml in ['a','b','c']:
printiteml
小練習:輸出菱形。
注意:循環逆序輸出用 for x in range(4)[::-1]:
輸入
input 輸入數字
raw_input 輸入字元串
a=input("input a number ")
print type(a),a 顯示輸入的類型
一般情況下,用input不能輸入字元串
通常用raw_input輸入字元串
注意:但是以 ’字元串’ 方式,input也能輸入字元串~~
小練習:猜數字,三次機會,猜對就退出,大:提示大,小:提示小。
方法
定義類(駝峰命名法)
CreateStudentInfo
定義方法(小寫和下劃線)
def print_param(p1,p2,p200):
print param
return 'a' //要是沒有return 預設return None
print_param('ss') 調用方法(隻看方法名,沒有方法的重載)
常用方法
- len() 求string list dict長度的方法
print len(c)
- del() 删除的方法,可以删除字典,清單list????
dd={'a':123,'b':456}
del dd['a']
- type ()
- a) [] : list 清單
b) () : tuple 元組
c) ‘’ : str 字元串
d) {} : dict 字典(鍵值對)
e) None : NoneType
f) True : bool
小練習
判斷輸入的年份,是否為閏年。(能被4整除但不能被100整除)
常識
yield 生成器
globle 全局變量
解釋器
cpython :traditional
pypy:use py explain py
jython :java
大多支援2.7
異常處理
raise Execption('xxxx error')
try/except/finally
導入包
import
from xxxx import
斷言
assert a=='bsss','error info ...'
指派
a=1
a=[]
a={}
交換變量
b=2
a,b=b,a
set 集合(去重)
應用:list去重
a=set('aba') //隻有字元串才用這種
print a
a=set (['a','a','b'])
print 'b' in a 某個元素是否在集合内部
True 在
False 不在
b=set('abc')
print a-b 減沒了
print b-a
print a&b 交集
print a|b 并集
print b>a 比較集合的數量 True
給集合添加元素: 添加位置為第一個元素後面,即成為第二個元素
a.add('d')
把集合轉換list
print list(a)
求出兩個集合中的相同元素和不同元素。
子產品和包
子產品: 一個py檔案就是一個子產品(module)
包: 是一個包含一個_init_.py檔案的檔案夾
導入(引用)
import和from import 差別
import (變量等…)from 包.子產品 | import 子產品中的(變量等…) |
自己寫 | 不同包中變量名會相同外部的包,變量等會沖突 |
用什麼導什麼 | |
import 一般不能計算,計算寫在方法裡 |
循環導包會産生錯誤
a import b, b 不能import a,不能産生自循環
敲黑闆:是以應該局部導入,減少類似錯誤!!!!!
工具
pip install tornado
pip list 列出目前清單
pip install -r requirements.txt 依賴
requirements:
Django == 1.5.4 ==版本 什麼都不寫,最新的
MYSQL-python==1.2.4
pip uninstall <package_name>
pip uninstall -r requirements.txt 解除安裝所有
pip install -U <package_name> 更新
pip show -f <package_name> 顯示包所在的目錄
pip search <key>
pip list -o 查詢所有可以更新的包
下載下傳一個pip的包
pip install <package> -d <path>
mkdir myproject
resources 存放證書等...
src :python, shell, SQL等…
test
src/python/launcher.py 入口檔案
src/python/test_str
src/python/test_str/__init__.pyc 運作python後生成的編譯檔案
src/python/test_str/__init__.py 通常一個可導入的包中,有這個檔案
vim __init__.py
if __name__=='__main__' 可以自己用,不能被别人導入??????
print 'test str'
編寫入口檔案。
vim launcher.py
#encoding=utf8
import test_str
import time
while True:
print'working...'
time.sleep(1)
注意:
1.在launcher.py 可以importtest_str(别的包或子產品)
2.launcher 不能被别人import
3.#encoding=utf8 文本中如果想要有漢字就加這句。
字元串
基礎
字元串的拼接 "aaa" +"bbb"
字元串的乘法 a=a*3 "aaabbbaaabbbaaabbb"
a1=a[1]
print type(a1),a1 一個字母拿出來是字元串,不是字元,python中沒有字元概念
字元串中常用方法
# encoding=utf8
a='today is a %s day %s'%('good','la')
print a.find('d') 找到a中第一次出現d的位置(從0開始哦)
print a.endswith('la') a是否以la結束(true,false)
print a.replace(' ','_') 将a中空格替換成下劃線
print 語句中不能。。。。
print a.split('_') 以下劃線為分隔符,切分成list
索引切片 [start:end:step(步長)]
字元串的切片
a='today is a %s day %s'%('good','lia')
print '',a
print '0 -10'
print '0:5 ',a[0:5]
print '1:5 ',a[1:5]
print '1:-1 ',a[1:-1]
print '-2:-1',a[-2:-1] ???
print '-1:-2',a[-1:-2] 切片是從左到右,是以從右到左沒有值
print a[-2:-3:-1] ???
print a[::-1] #每個單詞反轉
練習
a='abcdefghijklmnopqrstuvwxyz'
print a.find('i')
print a[-3:-1]
print a[23:26:]
print a[7:10]
print a[15:19:]
for i in range(26):
if (i%2):
a=a[:i]+','+a[i+1:]# 字元串本身不能直接指派,利用切片的方法改變字元串的值
print a[::-1]
l=len(a)
print l
import sys
for i in range(l):
if (i%4==0):
print a[i:i+4],
if(i+4>l):
sys.stdout.write('*'*(4-l%4))
# sys.stdout.write輸出無空格而且不換行
# '*'*n 将*輸出n次
清單的切片
l=[]
l=[1,2,3,4]
l=list('abcd')
print l[1]
print l[1:3] 數空空 0a1b2c3d
print len(l)
ll=[1,2]+[3,4] 清單的拼接
print ll
print '---------------------'
l2=[]
l2.append('haha')# 追加
print l2
for i in range(100):
l2.append(i)
l4=[[0],[],[2]]
print l4[1:]
l3=[1,2,3,4]
l3.insert(3,0) insert(位置,值)
print l3
l4=['a','b','c','a','c']
print l4.count('c') 統計字元出現的次數
l4.sort()
print l4
l4.reverse() 反轉
del l4[2] 删除
append()傳回值為None
pop() 彈出最後一個值,list中就沒有這個值了
extend() 把兩個清單加在一起
append() 往清單裡,添加元素
reverse() 反轉
del l4[2] 删除
insert(位置,值) 插入
count('c') 統計字元(c)出現的次數
isinstance
L=[1,2,5,6,2,6,4,3,2,'waa']
import types
print [_ for _ in L if isinstance(_,types.IntType)]# 如果是int類型,才輸出
print [_ * 10 for _ in L if isinstance(_,types.IntType)]# 給每個值*10輸出
#去重
L1=[1,2,5,6,2,6,4,3,2]
rs = []
[rs.append(_) for _ in L1 if _ not in rs]
print rs
print [_ for _ in L1 if (L1.index(_)+1) %2==0]
print "------------"
m=[1,3,4,2,5,6,2,7,3,2,7,10]
n=[2,5,8,2,4,3]
same = []
diff = []
[same.append(_) for _ in n if _ in m if _ not in same]
[diff.append(_) for _ in n if _ not in m]
[diff.append(_) for _ in m if _ not in n if_ not in diff]
print same
print diff