1. 程式人生 > >python3.5修煉手冊11

python3.5修煉手冊11

別樣的賦值 條件語句 語句塊 import的使用 循環

條件、循環和其他語句


import的使用

import的標準語法是:

import module1[,module2[,...moduleN]]

表示允許一個import導入多個模塊,但是各個模塊需要用逗號隔開。

當解釋器遇到import語句時,如果模塊在當前搜索路徑就會被導入。搜索路徑是一個解釋器,會先搜索所有目錄的列表。

python搜索路徑由一系列目錄名組成,python解釋器會依次從這些目錄中尋找引入模塊。

搜索路徑是在python編譯或安裝時確定的,被存儲在sys模塊的path的變量中

查看python默認搜索路徑的方式如下:

import  sys
print(‘python默認的搜索路徑是:%s‘%sys.path)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

python默認的搜索路徑是:[‘C:\\python.py‘, ‘C:\\python.py‘, ‘C:\\python\\python35.zip‘, ‘C:\\python\\DLLs‘, ‘C:\\python\\lib‘, ‘C:\\python‘, ‘C:\\python\\lib\\site-packages‘]

由上面可以到sys.path輸出的是一個列表,第一項輸出的是執行文件所在的目錄,即python解釋器的目錄

除了import語句引入模塊,還可以使用from語句引入模塊。

from 語句可以從模塊中導入指定部分到當前的命名空間。

form語法如下:

from modname import name1[,name[,...name]]

例如:

from  math import  pi
print(pi)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

3.141592653589793

上例語句就是從math模塊中導入pi到當前命名空間,該語句不會將math整個模塊導入。

import和from做一個比較:(以math模塊中的sin、exp、pi為例)

import語句示例:

import  math
print(math.pi)
print(math.sin(1))
print(math.exp(1))

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

3.141592653589793

0.8414709848078965

2.718281828459045

從上面可以看出import導入math模塊後裏面的函數是可以輸出的

from語句示例:

from math import pi
print(pi)
print(sin(1))

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

Traceback (most recent call last):

3.141592653589793

File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>

print(sin(1))

NameError: name ‘sin‘ is not defined

從上面可以看出from語句指定math模塊的pi函數後math中的其他函數是無法輸出的

使用from語句的好處如下:

import  math
print(math.pi)
print(pi)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

Traceback (most recent call last):

3.141592653589793

File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>

print(pi)

NameError: name ‘pi‘ is not defined

從上面可以看出使用impot語句導入math模塊時訪問pi對象,需要使用math.pi否則會報錯

from math import  pi
print(pi)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

3.141592653589793

從上面可以看出使用from語句後,可以直接訪問pi對象,不需要加模塊名

from語句可以一個語句導入多個函數,多個函數之間用逗號分割。

例如:

from math import pi,sin,exp

也可以將模塊中的所有函數導入。

例如:

from math import *

註意:在實際開發環境中from語句不建議過多使用,不利於編寫清晰、簡單的代碼。只有想從給定模塊導入所有功能時才使用這種方式。

import語句給模塊取別名

例如:

import math as m
print(m.pi)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

3.141592653589793

給模塊取別名的方式為:在導出模塊的語句末尾增加一個as子句,as後面跟上別名名稱。

from語句給模塊取別名同上

例如:

from math import  pi as p
print(p)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

3.141592653589793


使用逗號輸出


使用逗號輸出示例:

name=‘杜宇恒‘
print(‘我叫:‘,name)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

我叫: 杜宇恒

還可以使用逗號輸出多個表達式,只要將多個表達式用逗號隔開即可!

aa = ‘大家好!‘
bb = ‘我叫杜宇恒,‘
cc =‘來自北京。‘
print(aa,bb,cc)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

大家好! 我叫杜宇恒, 來自北京。


別樣的復賦值


序列解包

多個賦值操作同時進行。

例如:

x,y,z = 1,2,3
print(x,y,z)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

1 2 3

交換兩個或多個變量的值。

x,y,z = 1,2,3
x,y = y,x
print(x,y,z)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

2 1 3

上例的輸出結果可以看出x和y的值交換了

在python中,交換所做的事情叫做序列解包(sequence unpacking)或可選叠代解包,即將多個值的序列解開,然後放到變量序列中。

例如:

num = 1,2,3
print(‘原始值:‘,num)
x,y,z = num
print(‘獲得序列解開的值(x):‘,x)
print(‘獲得序列所有解開的值:‘,x,y,z)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

原始值: (1, 2, 3)

獲得序列解開的值(x): 1

獲得序列所有解開的值: 1 2 3

可以使用popitem方法將鍵-值作為元組返回,返回元組可以直接賦值到兩個變量中。

例如:

student = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘}
key,value=student.popitem()
print(key)
print(value)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

name

杜宇恒

序列解包允許函數返回一個以上的值並打包成元組,然後通過一個賦值句進行訪問。

註意:解包序列中的元素數量必須和放置在賦值符號"="左邊的數量必須完全一致。


鏈式賦值

通過多個等式為多個變量賦同一個值,這種方法叫做鏈式賦值。

例如:

x=y=z=10
print(x)
print(y)
print(z)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

10

10

10

鏈式賦值是將同一個值賦值給多個變量。

也可以單獨賦值

例如:

x=10
y=x
print(y)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

10

單獨賦值相比較鏈式賦值,顯然鏈式賦值更簡潔。


增量賦值

將表達式放置在賦值運算符(=)的左邊(如將x=x+1寫成x+=1),這種寫法就叫做增量賦值(Augemented Assignment)。

這種寫法對 + - * / % 等標誌運算符都適應。

例如:

x=5
x+=1
print(‘加‘,x)
x-=2
print(‘減‘,x)
x*=2
print(‘乘‘,x)
x/=4
print(‘除‘,x)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

加 6

減 4

乘 8

除 2.0

使用增量賦值相對賦值操作看上去更簡潔。

增量賦值除了適用於數值類型,還適用於二元運符的數據類型。

例如:

name=‘杜宇恒,‘
name+=‘666‘
print(name)
name*=2
print(name)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

杜宇恒,666

杜宇恒,666杜宇恒,666


語句塊

在python中,冒號(:)用來標識語句塊的開始,語句塊中每一個語句都需要縮進(縮進量相同)。當退回到和已經閉合的塊一樣的縮進量時,表示當前語句塊已經結束。


條件語句


if語句

if的基本用法

例如:

greeting = ‘hello‘
if greeting == ‘hello‘:
    print(‘hello‘)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

hello

如果條件(在if冒號之間的表達式)判定為真,後面的語句塊就會被執行:如果條件判定為假,語句塊就不會被執行。

if語塊可以由多條語句組成,編寫過程中要註意保持語句的縮進一致。

例如:

greeting = ‘hello‘
if greeting == ‘hello‘:
    student={‘杜宇恒‘:‘666‘,‘高爽‘:‘777‘,‘徐偉‘:‘888‘,‘杜兆利‘:‘999‘}
    print(‘字典中的元素有%d個‘%len(student))
    student.clear()
    print(‘字典刪除後元素的個數為:%d個‘%len(student))

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

hello

字典中的元素有4個

字典刪除後元素的個數為:0個

if語句的條件判定除了使用==外,還可以使用>(大於)、<(小於)、>=(大於等於)、<=(小於等於)等條件表示符大小關系。

還可以使用各個函數或方法返回值作為條件判定。


else子句

else的基本用法

例如:

greeting = ‘hi‘
if greeting == ‘hello‘:
    print(‘hello‘)
else:
    print(‘該語句塊不在if中,greeting的值不是hello‘)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

該語句塊不在if中,greeting的值不是hello

這段程序加入了一個新的條件子句——else子句,之所以叫子句,是因為else不是獨立語句,只能做為if語句的一部分。使用else子句可以增加一種選擇。

註意:在else子句後面沒有條件判定


elif子句

elif子句的基本用法

例如:

num = 10
if num > 10:
    print(‘num的值大於10‘)
elif 0 <=num<=10:
    print(‘num的值介於0到10之間‘)
else:
    print(‘num的值小於0‘)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

num的值介於0到10之間

由輸出結果可知,這段程序執行的是elif子句中的語句塊,即elif子句的條件判定結果為true,所以執行這個子句後的語句塊。

elif需要和if、else子句聯合使用,不能獨立使用,並且必須以if語句開頭,可以選擇是否以else子句結尾。


嵌套代碼塊

嵌套代碼塊嵌套代碼塊就是把if,else、elif等條件語句再放入if、slse、elif條件語句塊中,作為深層次的條件判定語句。

嵌套代碼塊的基本用法

例如:

num = 10
if  num %2 == 0:
    if num %3 == 0:
        print("你輸入的數字可以整除2和3")
    elif num % 4 == 0:
        print("你輸入的數字可整除2和4")
    else:
        print("你輸入的數字可以整除2,但不能整除3和4")
else:
    if num % 3 == 0:
        print("你輸入的數字可以整除3,但不能整除2")
    else:
        print("你輸入的數字不能整除2和3")

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

你輸入的數字可以整除2,但不能整除3和4

由上例可以看出在if語句的語句塊中還存在if語句、語句塊以及else子句,else子句的語句塊中也可以存在if語和else子句。


is

is:同一性運算符

is的基本用法

例如:

x=y=[1,2,3]
z=[1,2,3]
print(x==y)
print(x==z)
print(x is y)
print(x is z)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

True

True

True

False

從上例可以可看出x和z相等確不相同。這是應為變量x和y被綁定在同一個列表上,而變量z被綁定在另外一個具有相同數值和順序的列表上。它們的值可能相等,卻不是同一個對象。

使用==運算符判定兩個對象是否相等,使用is判定兩個對對象是否相同(是否為同對象)。


比較字符串和序列

對列表進行比較操作

例如:

print([1,2]<[2,1])
print([1,2]<[1,2])
print([1,2]==[1,2])

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

True

False

True

比較規則還適用於序列元素

例如:

print([2,[1,2]]<[2,[1,3]])

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

True


布爾運算符

and運算符用於連接兩個布爾值,並在兩者都為真值是返True,否則返回假。

例如:

num = 10
if num <=10 and num>=5:
    print(‘num的值在5到10之間‘)
else:
    print(‘num的值不在5到10之間‘)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

num的值在5到10之間

與and同類的還有or和not連個運算符

布爾值的特性:只有在需要求值時才求值。

布爾運算符通常被稱為邏輯運算符,種行為同樣適用於or。比如說在表達式x or y 中, x為真時直接返回x的值,否則返回y的值。這意味著在布爾運算符後面的代碼都不執行。


斷言


使用斷言時需要註意註意以下幾點:

①assert斷言是用來聲明某個條件是真的。

②如果你非常確信你使用的列表中至少有一個元素,想要檢驗這一點,並在它非真時引發一個錯誤,那麽assert語句是應用在這種情形下的理想語句。

③assert語句失敗時,會引發一個AssertionError。

例如:

x=3
assert x > 0,‘x is not zero or negative‘
#提示x不是偶數
assert x % 2 ==0,‘x is not an even number‘

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

Traceback (most recent call last):

File "C:/python.py/tiaojianxunhuanyuju.py", line 8, in <module>

assert x % 2 ==0,‘x is not an even number‘

AssertionError: x is not an even number

由上例可以看出,當assert後面的條件為真是,程序正常運行;當assert後面的條件為假時,輸出錯誤信息,錯誤信息的提示是自定義的,這個錯誤提示信息可以稱為異常參數。assert的異常參數是在斷言表達式後添加的字符串信息,用來解釋斷言並更容易知道問題出在哪裏。


循環

while循環

while循環的基本語法如下:

while 判斷條件:

執行語句......

執行語句可以是單個語句或語句塊。判斷條件可以是任何表達式,所有非零、非空(null)的值都為真(True)。當判斷語句為假(False)時,結束循環。

小例子:

使用簡單的程序輸出1~5所有的數字如下:

n=1
while n < 6:
    print("當前數字是:",n)
    n+=1

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

當前數字是: 1

當前數字是: 2

當前數字是: 3

當前數字是: 4

當前數字是: 5


for循環

for循環的語法格式如下:

for iterat_var in sequence:

statements(s)

sequence是任意序列,iterat_var是序列中需要遍歷的元素。statements是待執行的語句塊。

對字符串進行for循環:

for letter in  ‘good‘:
    print(‘當前字母‘,letter)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

當前字母 g

當前字母 o

當前字母 o

當前字母 d

對數字序列進行for循環

number =[1,2,3]
for num in number:
    print(‘當前數字‘,num)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

當前數字 1

當前數字 2

當前數字 3

對字典進行for循環

name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘}
for tup in name:
    print(‘%s:%s‘%(tup,name[tup]))

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

name:杜宇恒

number:666


循環遍歷字典元素

使用items方法將鍵-值對作為元組返回。

例如:

name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘}
for key,value in name.items():

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

name:杜宇恒

number:666

字典中的元素是沒有順序的。也就是說,叠代字典中的鍵和值都能保證被處理,但是處理順序不確定,這也是用for循環輸出字典中的元素時不按照順序輸出的原因;


叠代工具


並行叠代:

程序可以叠代兩個序列。

例如:

student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘]
number = [‘666‘,‘777‘,‘888‘]
for  i in range(len(student)):
    print(student[i],‘的學號是‘,number[i])

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

duyuheng 的學號是 666

xuwei 的學號是 777

gaoshuan 的學號是 888

在上例中程序中,i是循環索引的標準變量名。

還可以使用內建的函數zip來進行並行叠代,把兩個序列合並在一起,返回一個元組的列表。

例如:

student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘]
number = [‘666‘,‘777‘,‘888‘]
for name,num in zip(student,number):
    print(name,‘的學號是:‘,num)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

duyuheng 的學號是: 666

xuwei 的學號是: 777

gaoshuan 的學號是: 888

zip函數可以運作於任意數量的序列,並且可以應付不等長的序列,當短序列"用完"時就會停止。

例如:

for num1,num2 in zip(range(3),range(100)):
    print(‘zip鍵值對為‘,num1,num2)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

zip鍵值對為 0 0

zip鍵值對為 1 1

zip鍵值對為 2 2

由輸出結果可以看出,zip函數以短序列為準,當短序列遍歷結束時,for循環就會結束遍歷。


翻轉和排序叠代

reversed和sorted這兩函數可作用於任何序列或叠代對象,但不是原地修改對象,而是返回翻轉或者排序後的版本。

例如:

print(sorted([2,3,4,1,5]))
print(sorted(‘hello,world!‘))
print(list(reversed(‘hello,world!‘)))
print(‘‘.join(reversed(‘hello,world!‘)))

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

[1, 2, 3, 4, 5]

[‘!‘, ‘,‘, ‘d‘, ‘e‘, ‘h‘, ‘l‘, ‘l‘, ‘l‘, ‘o‘, ‘o‘, ‘r‘, ‘w‘]

[‘!‘, ‘d‘, ‘l‘, ‘r‘, ‘o‘, ‘w‘, ‘,‘, ‘o‘, ‘l‘, ‘l‘, ‘e‘, ‘h‘]

!dlrow,olleh

由輸出結果可以看到,sorted函數返回的是一個列表, reversed函數返回的是一個可叠代對象。在for循環和join方法中使用不會有任何問題。如果需要對這兩個函數使用索引、分片及調用list方法,就可以使用list類型轉換返回對象。


跳出循環


break

break語句用來終止循環語句,即使循環條件中沒有False條件或序列還沒有遍歷完,也會停止執行循環語句。

break語句用在while和for循環中。

如果使用嵌套循環,break語句就會停止執行最深層的循環並開始執行下一行代碼.

當遇到break語句時,無論什麽條件,都跳出這個循環。

例如:

#for示例
for letter in ‘hello‘:
    if letter ==‘l‘:
        break
    print(‘當前字母為:‘,letter)
#while循環
num = 10
while num > 0:
    print(‘輸出數字為:‘,num)
    num -= 1
    if num == 8:
     break

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

當前字母為: h

當前字母為: e

輸出數字為: 10

輸出數字為: 9

for 循環示例可以看出,輸出語句輸出循環遍歷到的字符,遇到指定字符時,跳出for循環。

使用while做條件判定時,在語句塊中輸出滿足條件的數字,當數字等於指定數字時,跳出while循環,不再繼續遍歷。


continue

continue語句用來告訴python跳過當前循環剩余語句,然後繼續進行下一輪循環。

當執行過程中遇到continue語句時,無論執行條件是真還是假,都要跳出這次循環,進入下一次循環。

例如;

#for示例
for letter in ‘hello‘:
    if letter == ‘l‘:
        continue
    print(‘當前字母:‘,letter)
#while示例
num = 3
while num > 0:
    num -= 1
    if num == 2:
        continue
    print(‘當前變量值:‘,num)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

當前字母: h

當前字母: e

當前字母: o

當前變量值: 1

當前變量值: 0

由上例可以看出,相比break語句,使用continue語句知識跳過一次循環,不會跳出整個循環。


循環中的else子句


在while循環中使用else語句

在while條件語句為False時,執行else的語句塊。

例如:

num = 0
while num < 3:
    print(num,"小於 3")
    num += 1
else:
    print(num,"大於或等於3")
print("結束循環!!!")

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

0 小於 3

1 小於 3

2 小於 3

3 大於或等於3

結束循環!!!

從輸出結果可以看到,while循環結束後執行了else語句中的語句塊,輸出了"3大於或等於3"語句。


在for循環中使用else語句

在for如條件語句為False或者結束後沒有被break中斷時,執行else的語句塊。

例如:

names = [‘duyuheng‘,‘duzhaoli‘]
for name in names:
    if name =="du":
        print(‘名稱:‘,name)
        break
    print("循環名稱列表"+name)
else:
    print("沒有循環數據!")
print("結束循環!")

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

循環名稱列表duyuheng

循環名稱列表duzhaoli

沒有循環數據!

結束循環!

由輸出條件看到,for循環結束後執行else語句塊中的內容。


pass語句

python中pass是空語句,作用是保持程序結構的完整性。

pass語句的基本用法:

name = ‘duyuheng‘

if name == ‘duyuheng‘:

print(‘hello‘)

elif name == ‘duzhaoli‘:

pass

else:

print(‘nothing‘)

C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py

hello

上例如果不使用pass占位就會報錯


本文出自 “duyuheng” 博客,謝絕轉載!

python3.5修煉手冊11