第五章 條件 迴圈以及其他語句(上)

2022-09-12 03:54:11 字數 4849 閱讀 9278

隨著我們對於python的認知越來越多,很多我們以前不清楚的東西慢慢都需要了解,下面在談談print和import等我們所不知道的一些地方。原來的print在python2.7中是乙個語句,但python3.5中,print由乙個語句,轉變成乙個函式,注意,這個轉變很重要。可能比以前有用很多,而且還可能簡潔很多。

提示在這裡,我們談及了使用模板logging去寫入日誌比用print有用,但具體什麼用,大家有個大致了解,以後在學習中遇到去處理即可。

print可用於列印乙個表示式,記住有兩種情況的存在,如果你在裡面輸入的是字串,就直接列印出來字串,第二種情況就是把你輸入的非字串直接轉換成字串進行列印。而且,你需要注意的地方是,你可以列印多個表示式,條件是用逗號進行分隔它們:

print('

age:

',42)

看看出來的結果,就能發現,在引數之間插入了乙個空格字元。

age: 42

在此,作者提出我們需要合併文字和變數值的時候,而又不想使用字串格式設定功能的時候,這很有幫助。對於這點我的理解就是作者已經脫離了原本的print概念,而是提出了關於合併文字和變數值的一種做法,就是中間加入乙個空格,但具體用在什麼地方,我覺得還有待進一步的了解。

首先,我來介紹第一種的技巧:

name='

gumby

'salutation='

mr.'

greeting='

hello,

'print(greeting,salutation,name)

從而,會得到這樣的結果:

hello, mr. gumby

作者在這裡就進行了思考,如果變數greeting不包含逗號,那麼如何處理,具體如下:

print(greeting+'

,',salutation,name)

這樣的結果就能變成魚上述答案一直的結果。

其次,就是第二種情況,如果我需要在每個我輸入的表示式之間自己去新增分隔符,注意前面我們看看作者在上面的時候是幹什麼,是直接預設為空格,而現在我們有辦法通過自己的需求進行設定:

print('

i','

wish

','to

','register

','a

','complaint

',sep='

_')

從而,得到答案即為:

i_wish_to_register_a_complaint

從 模板匯入,通常有四種情況,通常使用:

import somemodule

或使用from somemodule import somefunctuon

或import  somemodule import somefunction,anotherfunction,yetanotherfunction

或from somemodule import *

匯入模板裡面所有的東西的時候,用的是最後乙個方式。如果你需要使用兩個模板,而且他們都包含例如函式open之類的同名函式,這個時候肯定會出問題,那麼此處你應該使用第一種方式去處理,當然你在具體使用的時候也需要注意要用的方法與方法:

module1.open(...)

module2.open(...)

作者在這裡也提出了一些其他的方法:在語句末尾新增as子句並指定別名。下面是乙個匯入整個模組並給它指定別名的例子:

import

math as foobar

print(foobar.sqrt(4))

從而,得到答案就是:

2.0

而讓偶感覺舒服的一點就是,作者在函式部分的處理,也能像剛剛上面的例子一樣,命名別名,然後,匯入:

from module1 import open as open1

from module2 import open as open2

這裡面也有很多我們需要去處理的細節。

賦值語句常常是給變數和資料結構的一部分(如列表的元素和切片,或者字典項)賦值,還有其他的賦值,例如,可同時給多個變數賦值,這個是以前沒有的。當然,也可利用這種方式進行交換多個變數的值,這個部分總感覺容易用錯,盡量不要用:

x ,y ,z=1,2,3

print

(x,y,z)

x,y=y,x

print(x,y,z)

從而,我們來看看它的輸出結果:

1 2 3

2 1 3

這裡面其實就是在運用資料結構和演算法設計的一些資料結構,文章中把這種操作稱為序列解包(或可迭代物件解包):將乙個序列(或其他可迭代物件)解包,並將得到的值儲存到一系列變數中。(意思就是可迭代物件(不清楚就去檢視資料結構或者演算法設計)或者序列分配給變數,說白了,就是乙個個讀取,然後分配給變數)下面作者還舉了乙個具體的例子:

values=1,2,3

print

(values)

x,y,z=values

print(x)

這裡可以看出來得到的解包最後給了x,y,z三個變數,並最後輸出了x,這個就是典型的序列解包,當然,你需要注意的一點就是,變數的數量要和你解包的數值一一對應,否則內容就會報錯。而且,注意到這裡的**的第一行,直接給乙個變數賦了三個值,結果就變成了乙個元組;當然作者在這裡提出來的在使用元組(或其他序列或可迭代物件)的函式或方法的時候很有用,具體怎麼用,還是有待進一步的考究的。本文在後面也提出了在字典的一種情況,就是字典隨機獲取(或刪除)乙個鍵-值對,可使用方法popitem,它隨機獲取乙個鍵-值對然後刪除並且會以元組的方式進行返回。所以能進行上述的操作,但不能用pop這個方法,因為,不指定的時候刪除最後乙個,指定的時候刪除對應的位置。但不會返回任何東西。

scoundre1=

key,values=scoundre1.popitem()

print(key,values)

對應的結果如下:

girlfriend marion

x,y,z=1,2

x,y,z=1,2,3,4

兩種情況報錯的內容大致都是一致的:

x,y,z=1,2valueerror: 

not enough values to unpack (expected 3, got 2)

x,y,z=1,2,3,4valueerror: too many values to unpack (expected 3)

注意,為了彌補上述的不足,這裡提出了乙個很有用的解決方法,就是使用星號運算子(*) 來蒐集多餘的值,這樣無需保證值得數量和變數的數量是一樣多的,下面具體舉個例子可以看出:

a,b, *rest=[1,2,3,4]

print(a,b,rest)

從而,我們就得到這樣的答案:

1 2 [3, 4]

name='

albus percival wulfric brian dumbledore

'first,*middle,last=name.split()

print(first,middle,last)

從而得到合適的答案:

albus ['

percival

', '

wulfric

', '

brian

'] dumbledore

賦值語句的右側可以是任何型別的序列,但帶星號的變數最終包含的總是乙個列表。在變數和值相等的情況下不會改變這種情況:

name='

albus percival wulfric

'first,*middle,last=name.split()

print(first,middle,last)

當然,結果與上述是一致的:

albus ['

percival

'] wulfric

鏈式賦值是一種快捷方式,用於將多個變數關聯到同乙個值,但只涉及到乙個值,這很重要。

x=y=somefunction()

與上述**一致的**:

y=somefunction()

x=y但與下面不等價:

x=somefunction()

y=somefunction()

其實在c/c++裡面也很常見,x=x+1改變為x+=1,這個語句很常見,就叫做增強賦值。適用於所有的標準運算子,如*、/、%等。

增強賦值也可適用於其他資料型別(只要在雙目運算子可以做到的這裡都能做到,什麼是雙目,比如++等)

fnord='

foo'

fnord+='

bar'

print

(fnord)

fnord*=2

print(fnord)

從而,有下面的結果:

foobar

foobarfoobar

**塊不是語句,但你要理解這個內容,下面的東西才能講下去:

**塊是一組語句的組合,可滿足條件時執行(if)的語句、可執行多次的(迴圈語句),等等。**塊通過縮排(也就是加空格)來建立。說白了,c/c++等語言原來都是有括號來保證其裡面的內容,現在只是沒有了,取而代之的縮排而已,記住每級縮排4個空格就可以了。具體,後面看看你就知道怎麼用,在這不在贅述。

第五章 條件語句

使用條件語句能完成一些判斷工作,使程式的走向改變。因此條件語句也叫做分支語句。條件語句有if else和switch兩種。if else的格式為 if 條件表示式 else 其中 條件表示式 返回乙個布林值,當其值為真時執行if後的語句,否則執行else後的語句。如 if yourage 18 sy...

第五章 語句

由於c primer第五版採用的c 11新標準,手頭沒有支援c 11的編譯器,推薦大家用ideone,支援c 14並且可以輸入輸出。從今天開始整理自己做的課後習題,網上答案很多,但自己寫的也是一種不一樣的思路。exercise 5.20 include include using namespace...

第五章 語句 5 3 條件語句

有兩種條件語句 if語句的語法形式是 if condition statement if else語句的形式是 if condition statement1 else statement2 使用 if else 語句 如果 grade 的結果小於 60,對應的字母是 f 否則計算其下標 const...