語句 | 角色 | 例子 |
---|---|---|
賦值 | 創(chuàng)建引用值 | a='Apple',b='bike' |
調(diào)用 | 執(zhí)行函數(shù) | log.write('mylog') |
打印調(diào)用 | 打印對象 | print(1,'hello') |
if/elif/else | 選擇動作 | if a in b: print(a) |
for/else | 序列迭代 | for i in list: print(i) |
while/else | 一般循環(huán) | while True: print('True') |
pass | 空占位符 | for i in list: pass |
break | 循環(huán)/迭代退出 | while True:if a==b: break |
continue | 循環(huán)繼續(xù) | for i in list: if i<5: continue |
def | 函數(shù)定義 | def add(a,b): print(a+b) |
return | 函數(shù)返回 | def add(a,b): return a+b |
import | 模塊訪問 | import os |
from | 屬性訪問 | from sys import stdin |
class | 創(chuàng)建類 | class myclass(): def myprint(): print('myprint') |
try/except/finally | 捕獲異常 | try: open('/tmp/file') except: print('no file') |
raise | 觸發(fā)異常 | raise <'error type'> |
assert | 調(diào)試檢查 | assert a<0,'a is too large' |
with/as | 環(huán)境管理器 | with open(file) as f: f.read() |
del | 刪除引用 | del_list[i] del_list[i:j] del obj.attr |
在python里是不使用{}或者別的符號來限制語句的開始和結(jié)尾的,一個語句的開始(除了復(fù)合語句),就是開頭,換行就是結(jié)束。在開頭,不能隨意增加空格:
創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元貴州做網(wǎng)站,已為上家服務(wù),為貴州各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
>>> print (1)
1
>>> print (1)
File "", line 1
print (1)
^
IndentationError: unexpected indent
在復(fù)合語句里也是同樣的,當(dāng)你使用縮進(jìn)時,必須一致:
>>> def add(str):
... str=str
... print(str)
File "", line 3
print(str)
^
IndentationError: unindent does not match any outer indentation
復(fù)合語句有單行寫法和多行寫法。從冒號后面就是復(fù)合語句的開始。
單行:復(fù)合語句只有一行時,可使用單行寫法,但是復(fù)合語句所包含的語句不是單行時,需要使用對齊的縮進(jìn)來表示復(fù)合語句
#單行語句
>>> if 1>0: print(1)
...
1
#多行語句
>>> if 1>0:
... int=1
... print(int)
...
1
一般語句里,一行的結(jié)束就是此語句的結(jié)束。
在簡單語句可以使用分號來隔開多個語句。
>>> a=3;b=3;print(a+b)
6
使用列表,元組,字典的時候按照一定的方式可以把一個語句分成多行:
>>> dict={1:'first',
... 2:'second'}
當(dāng)我們所寫的語句有bug,會出現(xiàn)一些錯誤,程序會中斷運(yùn)行。
但我們在這個時候,不想讓程序中斷但還是需要提示報錯的時候可以使用try:
>>> while True:
_input=input("please input digit:")
try:
print("{:d} *10 is {:d}".format(int(_input),int(_input)*10))
break
except:
print("{} is not a number".format(_input))
please input digit:a
a is not a number
please input digit:1
1 *10 is 10
變量名可以使大小寫字母,數(shù)字和下劃線,但只能以大小寫字母和下劃線開頭,不能以數(shù)字開頭。變量名是區(qū)分大小寫的,保留字符是不能使用的。
python3.0里的保留字符:
false class finally is
None continue for lambda
True def from nonlocal
and del dlobal not
as elif if or
assert else import pass
break except in raise
特殊變量名:
main等,前后都有兩個下劃線的變量名,有很多是有特殊意義的
從python3.0開始print變成了函數(shù),但返回值為None,print函數(shù)的格式如下:
print([object,...][,sep=''][,end='\'][file=sys.stdout])
在這里,object是要打印的內(nèi)容。object可以是任意對象。默認(rèn)是沒有。
sep是兩個object之間隔開的字符。默認(rèn)是一個空格。
end是結(jié)尾,默認(rèn)為換行。
file為輸出目標(biāo),默認(rèn)為標(biāo)準(zhǔn)輸出流。
>> print(1,2,3,sep=';')
1;2;3
>>> print(1,2,3,sep=':')
1:2:3
>>> print(1,2,3,end='')
1 2 3
>>> print(1,2,3,end='');print (4,5,6,end='')
1 2 34 5 6
>>> print(1,2,3,end='\n');print (4,5,6,end='')
1 2 3
4 5 6
>>> print(1,2,3,file=open(r'D:\ruanjian\1.txt','wt'))
>>> file=open(r'D:\ruanjian\1.txt')
>>> file.read()
'1 2 3\n'
在if語句里的<'test'>位置里的就是判斷語句,結(jié)果為True,就能進(jìn)入子語句,判斷語句包含:
>>> 1<2
True
>>> True and True
True
>>> 1 and True
True
>>> True or False
True
>>> not True
False
>>> not False
True
>>> 1 in [1,2]
True
>>> 1 in (1,2)
True
>>> 1 in {'1':1}
False
當(dāng)我們使用and和or的時候,返回結(jié)果不一定是True或False:
and:當(dāng)其中一個或多個測試值為false的時候,取第一個false的值
False
>>> 1 and [] and {}
[]
and:當(dāng)全部值得測試值為True的時候,取最后一個值
>>> 1 and 2 and True
True
>>> 1 and 2 and True
True
>>> 1 and 2 and True and 3
3
or:當(dāng)其中一個或多個值為True的時候,取第一個True的值
>>> 0 or [1] or {1:'1'}
[1]
>>> 1 or 0 or 2
1
or:當(dāng)全部值為false的時候,去左后一個false值
>>> 0 or [] or {}
{}
>>> False or 0 or {}
{}
三元表達(dá)式的格式如下:
<'value1'>if <''test'> else <'value2'>
當(dāng)測試值為真的時候取<'value1'>,假的時候取<'value2'>
>>> 1 if True else 2
1
>>> 1 if False else 2
2
>>> 'True' if 1>2 else 'False'
'False'
>>> 'True' if 1<2 else 'False'
'True'
這個還可以如下運(yùn)用:
[<'value2'>,<'value1'>][<'test'>]
>>> [2,1][True]
1
>>> [2,1][False]
2
>>> ['False','True'][1>2]
'False'
>>> ['False','True'][1<2]
'True'
whil語句一般格式:
while <'test1'>:
<'statement1'>
else:
<'statement2'>
只要測試語句為真,會一直循環(huán)<'statement1'>。當(dāng)test1為假的時候會運(yùn)行else語句里的內(nèi)容。從這里,退出循環(huán)的方法有:
1.在<'statement1'>里的語句更改<'test1'>的結(jié)果為False
2.在<'statement1'>里的語句里增加break語句來跳出循環(huán)
3.在<'statement1'>里的語句里增加exit()來退出python循環(huán),不過這里會退出整個的python程序
例子
>>> a=0;b=10
>>> while a
break語句用來退出最近所在的for語句或while語句。
continue語句是用來跳到最近所在的for語句或者while語句的結(jié)尾。
>>> a=0;b=10
>>> while a
pass語句是占位的空語句,在有些復(fù)合語句里,可能沒有具體的語句,但需要正常運(yùn)行,這就需要設(shè)置空語句(pass)來代替
例子
>>> if True:
print('true')
else: pass
true
else語句,只有在for語句和while語句正常結(jié)束后,會運(yùn)行:
>>> a=0;b=10
>>> while a
for語句在python里是一個通用的序列迭代器:可以遍歷任何有序的序列對象內(nèi)的元素??捎糜谧址?、列表、元組、其他內(nèi)置可迭代對象以及之后我們能通過類所創(chuàng)建的新對象。
一般格式:
for in
在這里object需是可迭代的對象。每次從object里提取一個元素付給target,之后循環(huán)statements里的語句。
例子
>>> for i in a:
print (i,end='')
12345
使用for循環(huán)時,其他開發(fā)語言會使用一個變量,定義起始,結(jié)束,遞增值。但python里只能做迭代。這個時候可以使用range函數(shù)來代替。
range函數(shù)格式:
range([起始值,]結(jié)束值,[遞增值])
在這里,起始值默認(rèn)是0,遞增值默認(rèn)為1。
>>> a=range(10)
>>> for i in a:
print(i,end='')
0123456789
當(dāng)?shù)蟮脑貫楣潭ㄩL度的元組。列表的時候:
>>> for a,b,c in [(1,2,3),(4,5,6),(7,8,9)]:
print (a,b,c)
1 2 3
4 5 6
7 8 9
嵌套循環(huán)(不一定是固定長度):
>>> for l in [(1,2,3),(4,5,6),(7,8,9)]:
for i in l:
print(i,end='')
print()
123
456
789
文件訪問方式如下:
__next__()
報錯為stoplteration。在python中任何這類對象都認(rèn)為是可迭代的。在python里迭代工具(比如for)會調(diào)用__next__()
來獲取數(shù)據(jù),并以stoplteration來確認(rèn)何時離開。
盡量不要使用readlines()函數(shù),因?yàn)檫@個會一次性得把所有內(nèi)容讀取到內(nèi)存里(轉(zhuǎn)換為列表),運(yùn)行速度會比較慢。
為了支持手動迭代代碼,python支持next()函數(shù),它會自動讀取__next__()
函數(shù)。
next(X)等同于X.__next__()
。
>>> file=open(r'D:\ruanjian\1.txt')
>>> file.__next__()
'hello,world'
>>> file.seek(0)
0
>>> next(file)
'hello,world'
>>> next(file)
Traceback (most recent call last):
File "", line 1, in
next(file)
StopIteration
這個會從第一行開始讀取內(nèi)容,但是這個文本文件就一行,所以讀完之后再讀會報錯。
迭代協(xié)議里,當(dāng)時用for函數(shù)進(jìn)行迭代時,會傳遞給iter()內(nèi)置函數(shù),以便可迭代對象中獲取迭代器。返回的對象中有next()方法
>>> li=[1,2,3]
>>> i=iter(li)
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
Traceback (most recent call last):
File "", line 1, in
next(i)
StopIteration
對于文件來說,不需要轉(zhuǎn)換成iter類型的這一步,
因?yàn)槲募ο缶褪亲约旱牡鳌?/p>
>>> file=open(r'D:\ruanjian\1.txt')
>>> file is iter(file)
True
但列表,元組,字符串就不是了。
>>> s='123';l=[1,2,3];t=(1,2,3)
>>> s is iter(s)
False
>>> l is iter(l)
False
>>> t is iter(t)
False
如果要使用next方法就需要先將字符串,列表,元組轉(zhuǎn)換成迭代器
除了文件以及像列表這樣的實(shí)際的序列外,其他類型也有其適用的迭代器。例如,遍歷字典鍵的經(jīng)典方法是明確的獲取其鍵的列表。
>>> dic={'a':1,'b':2,'c':3}
>>> for key in dic.keys():
print(key,dic[key])
a 1
b 2
c 3
這個迭代器也可以直接對字典進(jìn)行迭代:
>>> iter1=iter(dic)
>>> iter1.__next__()
'a'
>>> next(iter1)
'b'
>>> next(iter1)
'c'
遍歷列表時,使用for循環(huán)來修飾它:
>>> li=[1,2,3,4,5]
>>> for i in range(len(li)):
li[i]+=10
>>> li
[11, 12, 13, 14, 15]
但這樣看來并不簡便,我們可以使用產(chǎn)生所需列表的一個單個表達(dá)式來完成上面的循環(huán)
>>> li=[1,2,3,4,5]
>>> li=[i+10 for i in li ]
>>> li
[11, 12, 13, 14, 15]
這個先是運(yùn)算[i+10 for i in li]之后,再把此值賦給li,具體的運(yùn)算是先是對li進(jìn)行迭代,每次把單個值賦給i,在進(jìn)行i+10,成為新列表的單個元素。
我們可以使用如下方法,將列表的某一項(xiàng)排除
>>> li=[1,2,3,4,5]
>>> li=[i+10 for i in li if i != 3]
>>> li
[11, 12, 14, 15]
也可以在列表中進(jìn)行循環(huán)嵌套,可以看到y(tǒng)的循環(huán)嵌套在了x循環(huán)里
>>> [x+y for x in [1,2,3] for y in [10,20,30]]
[11, 21, 31, 12, 22, 32, 13, 23, 33]
map也可用在迭代
>>> list(map(str.upper,open(r'D:\ruanjian\1.txt')))
['HELLO,WORLD']
map函數(shù)是把后面的可迭代的每個值當(dāng)做前面的參數(shù)傳入。
上面的語句可以如下解釋:
>>> tmp=[]
>>> for line in open(r'D:\ruanjian\1.txt'):
tmp.append(str.upper(line))
>>> tmp
['HELLO,WORLD']
相應(yīng)的也有sorted會對迭代對象進(jìn)行排序后生成列表
>>> sorted(open(r'D:\ruanjian\1.txt'))
['hello,world']
numerate也會對迭代對象進(jìn)行運(yùn)算后生成可迭代列表。enumerate就是在原有的順序中添加序列號。
>>> list(enumerate(open(r'D:\ruanjian\1.txt')))
[(0, 'hello,world')]
sum、any、all、max、min也可使用迭代器。
>>> max([3,5,1,6,4]),min([3,6,8,2,4])
(6, 2)
>>> any([1,[],'True']),all([1,[],'True'])
(True, False)
在python3中函數(shù)生成的是可迭代的特定對象:
>>> range(5)
range(0, 5)
>>> list(range(5))
[0, 1, 2, 3, 4]
python3的這種方式會延遲計(jì)算,在提取內(nèi)容的時候計(jì)算結(jié)果,這樣會節(jié)省內(nèi)存空間,不需要提前計(jì)算后放進(jìn)內(nèi)存,迭代對象迭代完成后不能再次讀取
>>> def printlist(list1):
for i in list1:
print('function print:{}'.format(i))
yield 'Result: {}'.format(i)
>>> li=[1,2,3,4,5]
>>> s=printlist(li)
>>> s.__next__()
function print:1
'Result: 1'
>>> s.__next__()
function print:2
'Result: 2'
>>> s.__next__()
function print:3
'Result: 3'