python基礎(chǔ)入門詳解(文件輸入/輸出 內(nèi)建類型 字典操作使用方法)
一、變量和表達(dá)式
>>> 1 + 1
2
>>> print 'hello world'
hello world
>>> x = 1
>>> y = 2
>>> x + y
3
Python是強類型語言,無法根據(jù)上下文自動解析轉(zhuǎn)換成合適的類型。 Python是一種動態(tài)語言,在程序運行過程中,同一個變量名在運行的不同階段可以代表不同形式的值(整型,浮點,列表,元組),變量名只是各種數(shù)據(jù)及對象的引用。C語言中的變量名是用來存放結(jié)果的內(nèi)存片段。
1、在Python中是通過對象的引用而不是值來賦值給變量的。
2、賦值操作符主要是"=",同時也可使用增量賦值,如 x+=1。但是沒有自增、自減操作符。
3、在C語言中,賦值語句可以當(dāng)作表達(dá)式(可以返回值),但是在Python中賦值語句不會返回值,如下面的就是非法的:
>>> x=1
>>> y=(x=x+1)
SyntaxError: invalid syntax
以 #! 開頭的稱為組織行,這行告訴你的Linux/Unix系統(tǒng)當(dāng)你執(zhí)行你的程序的時候,它應(yīng)該運行哪個解釋器。例如:#!/usr/bin/python
以 # 開頭的稱為注釋行。
二、條件語句
控制流語句:通過使用or,and,not關(guān)鍵字可以建立任意的條件表達(dá)式
if-elif-else:(Python 沒有 switch-case 語句,可以通過 if 語句配合字典完成同樣的工作)
if something == 1:
doSomething1()
elif something == 2:
doSomething2()
else:
pass # 表示一個空的塊或者是空的主體,使用pass語句
while-else:
while something:
doSomething1()
else:
doSomething2()
for-else:
for i in range(1, 10, 2): # i 值從 1 到 10,步長為2
print i
else:
print 'The for loop is over'
break 和 continue:用于中斷和繼續(xù)循環(huán)。
三、文件的輸入/輸出
f=open("foo.txt")
line=f.readline()
while line:
print line,
line=f.readline() #讀取一行,包括換行符'\n',讀到文件末尾,返回空字符串
f.close()
f=open("out.txt","w")
year=1
money=1000
while year<=5:
money=money*(1+0.05)
f.write("%3d %0.2f\n" % (year,money)) # print>>f,"%3d %0.2f" % (year,money)
year+=1
f.close()
for line in f.xreadlines():
# Do something with line
四、內(nèi)建類型
4.1 None類型
None表示空對象。如果一個函數(shù)沒有顯示的返回一個值,None就被返回。None的bool值為false
4.2 數(shù)值類型
Python有4種數(shù)值類型:整數(shù)、長整數(shù)、浮點數(shù)和復(fù)數(shù)。所有數(shù)值類型都是不可變類型。
python不支持自增自減操作符++,--,++i,其實是+(+i)的意思
運算符與表達(dá)式:基本上與其它語言相類似,只是有以下幾點不同:
x*y:乘法。2 * 3得到6。'la' * 3得到'lalala'。
x**y:冪運算,返回 x 的 y 次冪。
x/y:x 除以 y,4/3得到1(整數(shù)的除法得到整數(shù)結(jié)果)。4.0/3或4/3.0得到1.3333333333333333。
x//y:取整除。返回商的整數(shù)部分。4 // 3.0得到1.0。
除法//:地板除在任何時候都會將小數(shù)部分舍為0
-x 改變x的符號位
4.3 字符串
字符串:單引號(‘)和雙引號(")的作用相同,只能創(chuàng)建單行字符串。轉(zhuǎn)義符是(\)。
三引號(如:'''或者""")之間的一切都是字符串的內(nèi)容。
自然字符串:在字符串前加R(或r)指示某些不需要如轉(zhuǎn)義符那樣的特別處理的字符串,如:print R“Hello\n World”,將直接輸出“Hello\n World”而不會出現(xiàn)換行的情況。
a="hello world"
b=a[0,5] # b="hello"
c=a+" I love you" # c="hello world I love you"
s="The value of x is "+ str(x)
獲得子串: s[i:j],返回 s 從i到j(luò)(不包括j)之間的子串。若i省略則i=0,若j省略則j=len(s)-1
str() repr() 函數(shù)或者向后的引號(`)可以將其他類型的數(shù)據(jù)轉(zhuǎn)換為字符串。
Unicode字符串:在字符串前加U(或u)。如 a=u'hello',每個字符用16位來表示 "hello" 'world'會被自動連接為一個字符串"helloworld" ,"s1" u"s2"就會產(chǎn)生u"s1s2"
字符串、Unicode字符串及tuple是不可變的序列。
4.4 列表和元組(list & tuple)
列表和元組是任意對象的序列,支持的常用操作:
len()
append()
insert(index,aMember)
list[index]=aNewMember
一個元素的元組:a=(12,) #注意一定要個額外的逗號!
對于tuple中的元素,不可以修改,也不可以添加
列表是可變的序列,允許插入,刪除,替換元素等操作
可變序列支持的操作:
s[i]=v
s[i:j]=t # t要是個序列
del s[i]
del s[i:j]
4.5 字典
字典就是一個關(guān)聯(lián)數(shù)組(或稱為哈希表),是一個通過關(guān)鍵字索引的對象集合。
使用{}來創(chuàng)建一個字典
a={
"username":"loo"
"home":"/home/loo"
"uid":500
}
u=a["username"] #訪問
a["username"]="lu" #修改
a["shell"]="/usr/bin/tcsh" #添加
del a["shell"] #刪除
len(a) #元素個數(shù)
a[("loo",123)]="abc"
字典的key是不能修改的對象(比如數(shù)字和tuple)。
五、循環(huán)
for i in range(1,5):
print "2 to the %d power is %d" % (i,2**i)
內(nèi)建函數(shù)range([i,]j[,stride])建立一個列表,參數(shù)i和參數(shù)stride是可選的,默認(rèn)分別為0和1。
a=range(5,1,-1) # a=[5,4,3,2]
s="hello world"
for c in s: # 打印每個字符
print c
range()函數(shù)在內(nèi)存中建立一個列表,當(dāng)需要一個很大的列表時候,這個占內(nèi)存且耗時間,為了克服這個缺點,python提供了xrange()。xrange()函數(shù)只在需要的時候才臨時計算提供值,大大節(jié)省了內(nèi)存。
六、函數(shù)
def say(message, times = 1): # time 的默認(rèn)參數(shù)值是 1
print message * times
return time # 無返回值的函數(shù)可省掉 return,等同于return None
只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,即你不能在聲明函數(shù)形參的時候,先聲明有默認(rèn)值的形參而后聲明沒有默認(rèn)值的形參。這是因為賦給形參的值是根據(jù)位置而賦值的。例如,def func(a, b=5)是有效的,
但是def func(a=5, b)是無效的。
global a # 獲得全局變量a
用戶自定義函數(shù):
def foo(x,y):
print '%s+%s is %s' % (str(x),str(y),str(x+y))
bar=foo
bar(3,4)
d={}
d['callback']=foo
d['callback'](3,4) # 調(diào)用foo
用戶自定義函數(shù)有如下屬性:
f.__module__ #函數(shù)所在的模塊名
f.__doc__ 或者 f.func_doc #文檔字符串
f.__name__ 或者 f.func_name #函數(shù)名
f.__dict__ 或者 f.func_dict #支持任意函數(shù)屬性的函數(shù)名字空間
f.func_code #編譯后產(chǎn)生的字節(jié)碼
f.func_defaults #包含所有默認(rèn)參數(shù)的元組
f.func_globals #函數(shù)所在的模塊的全局名稱空間的字典
f.func_closure #None or a tuple of cells that contain bindings for the function's free variables.
七、類
class Stack(object):
def __init__(self):
self.stack=[]
def push(self,object):
self.stack.append(object)
def pop(self):
return self.stack.pop()
def length(self):
return len(self.stack)
s=Stack()
s.push("Dave")
s.push(42)
s.push([3,4,5])
print s.length()
print s.pop()
y=s.pop()
print y
del s
類方法的定義:
# 靜態(tài)方法:
class AClass(object):
@staticmethod
def astatic():
print 'a static method'
# 類方法:
class ABase(object):
@classmethod
def aclassmethod(cls):
isinstance(s,C) 用于測試s是否是C或是C的子類的實例
issubclass(A,B) 用于測試A是否是B的子類
八、異常
用try和except語句來捕獲異常:
try:
f=open("file.txt","r")
except IOError,e:
print e
except TypeError,e:
print e
...
try:
do something
except:
print 'An error occurred'
如果有IOError異常,就將錯誤原因放置在對象e中,然后運行except代碼塊,如果發(fā)生其他類型的異常就將控制權(quán)轉(zhuǎn)到處理該異常的except的代碼塊,如果沒找到該代碼塊,程序?qū)⒔K止運行,若沒有發(fā)生異常,except代
碼會被忽略掉。
九、模塊
import 模塊名
import 模塊名 as 別名
from 模塊 import 對象(函數(shù))
from 模塊 import *
內(nèi)建函數(shù)dir()可以列出一個模塊中的所有可訪問的內(nèi)容
可以被import導(dǎo)入的模塊:
1.使用python寫的程序(.py程序)
2.C或C++擴(kuò)展(已編譯的共享庫或DLL)
3.包(包含多個模塊)
4.內(nèi)建模塊(使用C寫的并已鏈接到python解釋器內(nèi))
十、引用與副本(引用計數(shù))
python中的一切數(shù)據(jù)都是對象。
對于可變對象,改變一個引用就等于改變了該對象的所有的引用:
a=[1,2,3,4]
b=a
b[2]=100
print a # a=[1,2,100,4]
為了避免這種情況,你需要創(chuàng)建一個可變對象的副本,然后對該副本進(jìn)行操作。
兩種創(chuàng)建可變對象的副本:
(1)淺拷貝(shallow copy):創(chuàng)建一個新對象,但它包含的子元素仍然是原來對象子元素的引用:
b=[1,2,[3,4]]
a=b[:]
a.append(100)
print b # b=[1,2,[3,4]] b沒有變
a[0]=100
print b # b=[1,2,[3,4]] b沒有變
a[2][0]=100
print b # b=[1,2,[100,4]] b被改變了
(2)深拷貝(deep copy)
import copy
b=[1,2,[3,4]]
a=copy.deepcopy(b)
__del__()在對象銷毀時調(diào)用。 del x 只是減少對象x的引用計數(shù),并不調(diào)用這個函數(shù)。
十一、類型轉(zhuǎn)換
int(x[,base]) #轉(zhuǎn)換為int
long(x[,base])
float(x)
tuple(x)
list(x)
chr(x) #轉(zhuǎn)換為字符
unichr(x) #轉(zhuǎn)換為Unicode字符
ord(x) #字符轉(zhuǎn)換為整數(shù)值
str(x)
a=[1,2,3,4]
s=repr(a) # s='[1,2,3,4]' 也可以使用 s='a'
b=eval(s) # b=[1,2,3,4] 再轉(zhuǎn)換成一個列表
eval('3+4')
f=open("foo")
a=repr(f) # a="<open file 'foo',mode 'r' at dc030>"
十二、其他
文檔字符串DocStrings: 如果一個模塊、類、函數(shù)體的第一個語句是未命名的字符串,改字符串就自動成為該對象的文檔字符串 說白了就是類似于JavaDoc的東西。
文檔字符串的慣例是一個多行字符串,它的首行以大寫字母開始,句號結(jié)尾。第二行是空行,從第三行開始是詳細(xì)的描述。可以使用__doc__(注意雙下劃線)調(diào)用函數(shù)的文檔字符串屬性(屬于函數(shù)的名稱)。Python把每一樣?xùn)|西都作為對象,包括這個函數(shù)。
Python中的help(),它所做的只是抓取函數(shù)的__doc__屬性,然后整潔地展示給你。
自動化工具也可以以同樣的方式從你的程序中提取文檔。隨Python發(fā)行版附帶的pydoc命令,與help()類似地使用DocStrings。
def printMax(x, y):
'''Prints the maximum of two numbers.''' # 這里是文檔字符串
print "DocStrings" # 這里是函數(shù)體命令行參數(shù)
>>>print printMax.__doc__
Prints the maximum of two numbers.
id(a)可以查看該對象的標(biāo)識(當(dāng)前的實現(xiàn)是該對象在內(nèi)存中的位置)
if type(a) is type(b):
print 'a and b have the same type'
if type(a) is types.ListType
print 'Is a list'
isinstance(s,C) 用于測試s是否是C或是C的子類的實例
import types
isinstance(3,types.IntType) #返回True
x==y 比較x和y的值是否相等
x is y 和x is not y 比較x和y在內(nèi)存中是否指向同一個對象
- 詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù)
- Python隨手筆記之標(biāo)準(zhǔn)類型內(nèi)建函數(shù)
- Python列表list操作符實例分析【標(biāo)準(zhǔn)類型操作符、切片、連接字符、列表解析、重復(fù)操作等】
- 利用標(biāo)準(zhǔn)庫fractions模塊讓Python支持分?jǐn)?shù)類型的方法詳解
- Python標(biāo)準(zhǔn)庫之typing的用法(類型標(biāo)注)
- Python的五個標(biāo)準(zhǔn)數(shù)據(jù)類型你認(rèn)識幾個
- python內(nèi)建類型與標(biāo)準(zhǔn)類型
相關(guān)文章
如何基于Python代碼實現(xiàn)高精度免費OCR工具
這篇文章主要介紹了如何基于Python代碼實現(xiàn)高精度免費OCR工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Python 專題二 條件語句和循環(huán)語句的基礎(chǔ)知識
本文主要介紹了Python條件語句和循環(huán)語句的基礎(chǔ)知識。主要內(nèi)容包括: 1.條件語句:包括單分支、雙分支和多分支語句,if-elif-else;2.循環(huán)語句:while的使用及簡單網(wǎng)絡(luò)刷博器爬蟲;3.循環(huán)語句:for的使用及遍歷列表、元組、文件和字符串。2017-03-03Python3實現(xiàn)將文件樹中所有文件和子目錄歸檔到tar壓縮文件的方法
這篇文章主要介紹了Python3實現(xiàn)將文件樹中所有文件和子目錄歸檔到tar壓縮文件的方法,涉及Python3使用tarfile模塊實現(xiàn)tar壓縮文件的技巧,需要的朋友可以參考下2015-05-05