1. 程式人生 > >當面試官問這些基礎的Python問題時,竟然還有80%的人不會!

當面試官問這些基礎的Python問題時,竟然還有80%的人不會!

核心 變量 字符 進制數 基礎 技術分享 run 但是 http

技術分享圖片

怎樣才能開始一個交互式解釋器的會話?

在Windows下可以通過點擊開始按鈕,選擇“程序”,點擊“Python”,然後選擇“Python(command line)”菜單選項來開始一個交互會話。

你應該在哪裏輸入系統命令行來啟動一個腳本文件?

在輸入系統命令行的地方,也就是你所在的平臺提供給作為系統終端的地方

Windows下的系統提示符,在Unix、Linux或mac OS x的xterm或者終端窗口。

指出運行保存在一個腳本文件中的代碼的四種或者更多的方法。

一個腳本(實際 上是模塊)文件中的代碼可以通過系統命令行、文件鼠標點擊、導入和重載,exec內置函數以及像IDLE的Run→Run Module菜單選項這樣的IDEGUI選取來運行。

指出在Windows下點擊文件圖標運行腳本的兩個缺點

打印後退出的腳本會導致輸出文件馬上消失,在你能夠看到輸出之前,你的腳本產生的同樣顯示在輸出窗口的錯誤信息,會在查看其內容前關閉(這也是對大多數開發任務,系統命令和IDLE這類IDE之所以更好的原因。)

在IDLE中怎樣運行一個腳本?

在默認的情況下,Python每個進程只會導入一個模塊一次,所以如果你改變了它的源代碼,並且希望在不停止或者重新啟動Python的情況下運行其最新的版本,你將必須重載它。在你重載一個模塊之前至少已經導入了一次。在系統命令行匯總運行代碼,或者通過圖標點擊,或者像使用IDLE這樣IDE,這不再是一個問題,因為這些啟動機制網管網每次都是運行源代碼的最新版本。

列舉兩個使用IDLE的潛在缺點。

在你希望運行的文件所在的文件編輯窗口,懸著窗口的Run→Run Module菜單選項。這可以將這個窗口的源代碼作為頂層腳本文件運行,並在交互Pythonshell窗口顯示其輸出。

什麽是命名空間,它和模塊文件有什麽關聯

命名空間就是變量(也就是變量名)的封裝。它在Python中以一個帶有屬性的對象形式出現。每個模塊文件自動成為一個命名空間;也就是說,一個對變量的封裝,這些變量對應了頂層文件的復制。命名空間可以避免在Python程序中的命名沖突——因為每個模塊文件都是獨立玩唄的命名空間,文件鼻血明確的導入其他的文件才能使用這些文件的變量名。

技術分享圖片

列舉4個Python核心數據類型的名稱

數據、字符串、列表、字典、元組、文件和集合一般被認為是核心對象(數據)類型。類型、None和布爾型有時也被定義在這樣的分類中。還有數字類型(整數、浮點數、復數、分數和十進制數)和多種字符串類型。

為什麽我們把他們稱作“核心”數據類型?

它們被認作是“核心”類型是因為他們是Python語言資深的一部分,並且總是有效的,為了建立其他的對象,通常必須調用被導入模塊的函數。大多數核心類型都有特定的語法去生成其對象。

“不可變性”代表什麽,哪三種核心數據被認為是具有不可變性的?

一個具有不可變性的對象是一個在其創建以後不能夠被改變的對象。Python中的數據、字符串和元組都是屬於這個分類。盡管無法的改變一個不可變的對象,但是你總是可以通過運行一個表達式創建一個新的對象。

“序列”是什麽依稀,哪三種核心數據被認為是這個分類中的?

一個序列是一個對位置進行拍訊的對象的集合。字符串、列表和元組是Python中所有序列。他們共同擁有一般的序列操作,例如:索引、合並以及切片,但各自有自己的類型特定的方法調用。

“映射”是什麽意思,那種Python的核心類型是映射?

術語映射,表示將鍵與相互關聯映射的對象。Python的字典是其核心數據類型幾種唯一的映射類型。應該設沒有從左至右的位置順序,他們支持通過鍵獲取數據,並包含了類型特定的放大調用。

什麽是多態,為什麽我們要關心多態?

多態以為著一個操作符(如+)的意義區卻於被操作的對象。這將變成使用好Python的關鍵思想之一,不要把代碼限制在特定的類型上,使代碼自動使用於多種類型。

技術分享圖片

思考下面三條聚聚。它們會改變A打印出的值嘛?

1 A = "spam"
2 
3 B = A
4 
5 B = "shrubbery"

不會,A仍會作為“spam”進行打印。當B賦值為字符串"shrubbery"時,所發生的變量B被重新設置為所指向了新的字符串對象。A和B最初共享了同一個字符串對象“spam”,但是在Python中這個連個變量名從未鏈接在一起。因為,設置B為另一個不同的對象對A沒有影響。如果這裏最後的語句變為B = B+"shrubbery",也會發生同樣的事情。另外,合並操作創建了一個新的對象作為其結果,並將這個值只賦值給了B。我們永遠都不會在遠處覆蓋一個字符串(數字或者元組),因為字符串是不可變的。

思考下面三條語句。它們會改變A的值嘛?

A = ["spam"]

B = A

B[0] = "shrubbery"

會改變A的值,A現在打印為["shrubbery"],從技術上講,我們既沒有改變A也沒有改變B,我們改變的是這兩個變量共同引用的對象一部分,通過變量B在遠處覆蓋了這個對象的一部分內容。因為A像B一樣引用了同一個對象,這個改變也會對A產生影響。

思考下面三條語句。它們會改變A的值嘛?

A = ["spam"]

B = A[:]

B[0] = "shrbbery"

不會,A仍然會打印為[‘spam‘]。由於切片會在被復制給B錢創建一個拷貝,這次對B在原處賦值就不會影響了。在第二個賦值語句後,就有了兩個擁有相同值的不同列表對象了(在Python中,我們說它們是==的,卻不是is的)。第三條復制語句會邊改指向B的列表對象,而不會改變指向A的列表對象。

技術分享圖片

當面試官問這些基礎的Python問題時,竟然還有80%的人不會!