python基礎知識縱覽(中)

keithl發表於2017-10-09

python語句語法

程式塊與作用域

  • 相同縮排範圍的程式碼在一個程式塊和作用域中
  • 同一個程式塊和作用域中不能有不同的縮排
#!/usr/bin/env python       ## 指令碼設定env啟動,env可以在系統的PATH查詢
# -*- coding: UTF-8 -*-     ## 設定當前python的字元編碼

def fn():
    print("python3.0")      ## python3.0 的列印輸出
    print "python2.7"       ## python2.7 的列印輸出複製程式碼

每個使用冒號":"標記的程式塊內的程式碼必須有相同的描述

判斷語句

a = 9
b = 4
c = None

## 第一種形式
if not c:       ## c不是None的時候執行if下的語句
    pass        ## 表示需要寫程式碼但是實際什麼也不做的場合        

if a > b:
    pass

if c is None:
    pass

## 第二種形式
if a > b:
    print("a > b")     ## python3.x的列印
else:
    print("a <= b")    

## 第三種形式
if a >= 10:
    print("a > 10")
elif 5 < a < 10:        ## ==> a > 5 and a < 10
    print("5 < a < 10")
else:
    print("a <= 5")

## 第四種形式
a = 9
b = 2
num = a if a > 10 else b        ##num is b複製程式碼

迴圈語句

  • while 迴圈
## 基本格式
while test:
    statement1
else:
    statement2

## 例子
children = ["tom","keithl","jane","mani","bob"]

while len(children) > 0:
    print "pop the child[%s]" % children.pop()
else:
    print("there have not any ele in chidlren ...")

pop the child[bob]
pop the child[mani]
pop the child[jane]
pop the child[keithl]
pop the child[tom]複製程式碼
  • for 迴圈
## 基本格式
for target in object: 
    statements
else:
    statements

## 示例
>>> for x in ["spam", "eggs", "ham"]: 
... print(x, end=' ')
...
spam eggs ham

## 遍歷帶有元組資訊的列表
>>> T = [(1, 2), (3, 4), (5, 6)]
>>> for (a, b) in T: # Tuple assignment at work
...     print(a,b)
... 
1 2 
3 4 
5 6

## 遍歷字典
D = {'a': 1, 'b': 2, 'c': 3}
## 遍歷字典方法1
for key in D:
    print(key, '=>', D[key])

## 遍歷字典方法2
for (key, value) in D.items():
    print(key, '=>', value)

## 使用python3.x遍歷並序列解壓
for (a, *b, c) in [(1, 2, 3, 4), (5, 6, 7, 8)]:
    print(a, b, c)複製程式碼

賦值語句

  • 序列賦值語句
## 基本賦值
>>> num = 1
>>> wind = 9
>>> A,B = num,wind
>>> A,B
(1,9)

## 高階賦值
>>> str = "ABCD"
>>> a,b,c = str[0],str[1],str[2]
>>> a,b,c = list(str[:2]) + [str[2:]]
>>>(a,b),c = str[:2],str[2:]
>>> a,b,c = range(3)    ## 將三個變數名設定為整數0、1、2

## python3.x擴充套件序列解包
>>> seq = [1,2,3,4]
>>> a,*b = seq
>>> a
1
>>> b
[2,3,4]

>>> *a,b = seq
>>> a
[1,2,3]
>>> b
[4]

>>> a,*b,c = seq
>>> a
1
>>> b
[2,3]
>>> c
4

>>> a,b,*c = seq
>>> a
1 
>>> b
2
>>> c
[3,4]複製程式碼

總結:python3.x帶"*"總是向其賦值一個列表,即使是匹配單個項,如果沒有匹配會返回一個空的列表

表示式語句

## 常用表示式
fn(args)            ## 函式呼叫
obj.call(args)      ## 物件方法呼叫
spam                ## 互動模式下列印變數
print(str)          ## python3.x列印操作
yiled x ** 2        ## 產生表示式語句

## 使用函式表示式並改變值
>>> L = [1,2,3]
>>> L.append(4)
>>> L
1,2,3,4

## python3.x之print函式列印格式
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout][, flush=False])
sep:是在每個物件之間插入
end:在文字列印之後追加end的字串資訊
file:將資訊輸出到指定的終端,預設是sys.stdout,即控制檯
flush:py3.3新增特性,即設定為True時立即將資訊重新整理到輸出流的目的終端上而無須等待

## 示例
>>> print(x, y, z, sep=', ') 
spam, 99, ['eggs']

## 將資訊輸出到data.txt中
>>> print(x, y, z, sep='...', file=open('data.txt', 'w'))

## 相容python2.x和python3.x的print函式,匯入以下包
from __future__ import print_function複製程式碼

迭代器

如果物件是實際儲存的序列,或者可以在迭代工具中for一次產生一個結果的物件則稱為可迭代

## 基本迭代器
for x in [1, 2, 3, 4]: 
    print(x ** 2, end=' ')

## 檔案迭代器
## 第一種方式
for line in open('script2.py'):
    print(line.upper(), end='')

## 第二種方式
for line in open('script2.py').readlines():
    print(line.upper(), end='')

## 第三種方式
f = open('script2.py')
while True:
    line = f.readline()
    if not line: break 
    print(line.upper(), end='')


## 手動設定迭代器iter和next
L = [1, 2, 3]
I = iter(L)
while True:
    try:
        X = next(I)
    except StopItration:
        break
    print(X ** 2,end=' ')

## 內建迭代器型別,字典
D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
    print(key, D[key])

## 列表解析
x = [y + 10 for y in range(10)]

## 檔案列表解析
lines = [line for line in open("data.txt")]

## 擴充套件的列表解析
lines = [line for line in open("data.txt") if line[0] == "k"]   ## for迴圈下帶有if語句塊
list = [x + y for x in range(10) for y in range(5)]             ## for迴圈巢狀for迴圈複製程式碼

python3.x新增迭代器

## range迭代器
>>> R = range(10)
>>> I = iter(R)
>>> next(I)     ## 每次呼叫next就會輸出列表的下一個元素


## map迭代器:map(func, *iterables):接受一個函式和一個迭代器物件,將所有的迭代器物件經過函式處理得到一個新的迭代物件資料
num = map(abs,(-2,-3,-5,9,3))
for n in num:
    print(n,end=",")
2,3,5,9,3,

## zip迭代器:zip(iter1, iter2=None, *some):第一個引數必填,接受可以迭代的物件,並將每組物件的對應元素重新組成tuple
z = zip((1,2,3),(5,6,7))
for pair in z:
    print(pair)
(1, 5),(2, 6),(3, 7),

## filter迭代器:filter(filter_fn,*iterables):接受一個函式和一個迭代物件,將符合函式filter_fn要求的將返回迭代資料
list(filter(bool, ['spam', '', 'ni']))  < = > [x for x in ['spam', '', 'ni'] if bool(x)]複製程式碼

相關文章