十二、三元運算規則以及應用場景?程序員
三元運算符的功能與「if...else」流程語句一致,它在一行中書寫,代碼很是精練、執行效率更高。在PHP程序中恰當地使用三元運算符可以令腳本更爲簡潔、高效。代碼格式以下:編程
(expr1) ? (expr2) : (expr3);
解釋:若是條件「expr1」成立,則執行語句「expr2」,不然執行「expr3」。
實現一樣的功能,若使用條件流程語句,就須要書寫多行代碼:數組
if(expr1) { expr2; } else { expr3; }
可見,前面所說的三元運算符之好並不是誇張。但是,多數狀況下咱們只在代碼較爲簡單的時候使用三元運算符,即執行語句只爲單句的時候。如:編程語言
$a>$b ? print "a大於b" : print "a小於b";
事實上,三元運算符能夠擴展使用,當設置的條件成立或不成立,執行語句均可以不止一句,試看如下格式:函數
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
咱們很是明顯地看到,多個執行語句可使用用字符串運算符號(「.」)鏈接起來,各執行語句用小角括號包圍起來以代表它是一個獨立而完整的執行語句。這樣擴展後它的功能更爲逼近「if...else」流程語句。性能
同時三元運算符還能夠嵌套使用。例如,a大於b成立時:若是a小於c,那麼x=c-a不然x=a-c;不然a小於b成立時:若是b小於c,那麼x=c-b不然x=b-c:編碼
$a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);
嵌套使用的三元運算符可讀性不太好,往後對代碼的維護很可能存在問題,但比起「if...else」之類的流程語句,在上述情形之下,它的確太簡練了,這是它的誘人之處。spa
對於喜歡偷懶和追求代碼簡潔的人來講,用三元運算符取代if流程語句應該是絕佳的選擇。即便不用考慮「三元」中條件句之外的任意某一「元」,使用三元運算符仍然比if語句簡練。如下語句的語法是正確的,它們以小解引號的方式忽略了第二或第三「元」:code
$a>$b ? print "Yes" : ""; $a>$b ? '': print 'No';
應該注意的是:在使用三元運算符時,建議使用print語句替代echo語句。對象
1三、列舉 Python2和Python3的區別?
(1)Print
在 Python 2 中, print 被視爲一個語句而不是一個函數,這是一個典型的容易弄混的地方,由於在 Python 中的許多操做都須要括號內的參數來執行。若是在 Python 2 中你想要你的控制檯輸出 」Sammy the Shark is my favorite sea creature」,你應該寫下這樣的 print 語句:
print "Sammy the Shark is my favorite sea creature"
在使用 Python 3 時,print()會被顯式地視爲一個函數,所以要輸出上面相同的字符串,你可使用這種很是簡單且易於使用的函數語法:
print("Sammy the Shark is my favorite sea creature")
這種改變使得 Python 的語法更加一致,而且在不一樣的 print 函數之間進行切換更加容易。就方便性而言,print()語法也與 Python 2.7 向後兼容,所以您的 Python 3 print()函數能夠在任一版本中運行。
(2)整數的除法
在 Python 2 中,您鍵入的任何不帶小數的數字,將被視爲整數的編程類型。雖然乍看起來這彷佛是一個簡單的處理編程類型的方法,但有時候當你試圖除以整數以指望得到一個帶小數位的答案(稱爲浮點數),如:
5 / 2 = 2.5
然而,在 Python 2 中,整數是強類型的,而且不會變成帶小數位的浮點數,即便這樣作具備直觀上的意義。
當除法/符號的任一側的兩個數字是整數時,Python 2進行底除法,使得對於商x,返回的數字是小於或等於x的最大整數。這意味着當你寫下 5 / 2 來對這兩個數字相除時,Python 2.7 將返回最大的小於或等於 2.5 的整數,在這種情形下:
a = 5 / 2 print a #a=2
爲解決這個問題,你能夠在 5.0 / 2.0 中添加小數位,以獲得預期的答案 2.5。
在 Python 3 中,整數除法變得更直觀,如
a = 5 / 2 print(a) #a=2.5
你也可使用 5.0 / 2.0 返回 2.5,可是若是你想作底層劃分,你應該使用 「//」 這樣的 Python 3 語法,像這樣:
b = 5 // 2 print(b) #b=2
在 Python 3 中的這種修改使得整數除法更爲直觀,而且它的特色是不能向後兼容 Python 2.7。
(3)支持 Unicode
當編程語言處理字符串類型時,也就是一個字符序列,它們能夠用幾種不一樣的方式來作,以便計算機將數字轉換爲字母和其餘符號。
Python 2 默認使用 ASCII 字母表,所以當您輸入「Hello,Sammy!」時, Python 2 將以 ASCII 格式處理字符串。被限定爲在多種擴展形式上的數百個字符,用ASCII 進行字符編碼並非一種很是靈活的方法,特別是使用非英語字符時。
要使用更通用和更強大的Unicode字符編碼,這種編碼支持超過128,000個跨越現今和歷史的腳本和符號集的字符,你必須輸入
u「Hello,Sammy!」
, 前綴 u 表明 Unicode。
Python 3 默認使用 Unicode,這節省了程序員多餘的開發時間,而且您能夠輕鬆地在程序中直接鍵入和顯示更多的字符。由於 Unicode 支持更強大的語言字符多樣性以及 emoji 的顯示,因此將它做爲默認字符編碼來使用,能確保全球的移動設備在您的開發項目中都能獲得支持。
若是你但願你的 Python 3 代碼向後兼容 Python 2,你能夠經過在你的字符串的前面保留 「u」 來實現。
(4)後續發展
Python 3 和 Python 2 之間的最大區別不是語法上的,而是事實上 Python 2.7 將在 2020 年失去後續的支持,Python 3 將繼續開發更多的功能和修復更多的錯誤。
最近的發展包括格式化的字符串,類建立的簡單定製,和用一種更乾淨的句法方式來處理矩陣乘法。
Python 3 的後續開發意味着,開發人員能夠對問題被及時解決抱有信心,而且隨着時間的推移更多的功能將被添加進來,程序也會變得更加有效。
1四、用一行代碼實現數值交換:
a = 1
b = 2
a,b=b,a print(a,b) #a=2,b=1
1五、Python3和Python2中 int 和 long的區別?
long整數類型被Python3廢棄,統一使用int
1六、xrange和range的區別?
range 函數說明:range([start,] stop[, step]),根據start與stop指定的範圍以及step設定的步長,生成一個序列。
range示例:
>>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, 4] >>> range(0,6,2) [0, 2, 4]
xrange 函數說明:用法與range徹底相同,所不一樣的是生成的不是一個數組,而是一個生成器。
xrange示例:
>>> xrange(5) xrange(5) >>> list(xrange(5)) [0, 1, 2, 3, 4] >>> xrange(1,5) xrange(1, 5) >>> list(xrange(1,5)) [1, 2, 3, 4] >>> xrange(0,6,2) xrange(0, 6, 2) >>> list(xrange(0,6,2)) [0, 2, 4]
由上面的示例能夠知道:要生成很大的數字序列的時候,用xrange會比range性能優不少,由於不須要一上來就開闢一塊很大的內存空間,這兩個基本上都是在循環的時候用:
for i in range(0, 100): print i for i in xrange(0, 100): print i
這兩個輸出的結果都是同樣的,實際上有不少不一樣,range會直接生成一個list對象:
a = range(0,100) print type(a) print a print a[0], a[1]
輸出結果:
<type 'list'> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 0 1
而xrange則不會直接生成一個list,而是每次調用返回其中的一個值:
a = xrange(0,100) print type(a) print a print a[0], a[1]
結果以下:
<type 'xrange'> xrange(100) 0
總結:
1.range和xrange都是在循環中使用,輸出結果同樣。
2.range返回的是一個list對象,而xrange返回的是一個生成器對象(xrange object)。
3.xrange則不會直接生成一個list,而是每次調用返回其中的一個值,內存空間使用極少,於是性能很是好。
注意:Python 3.x已經去掉xrange,所有用range代替。