1. 程式人生 > 實用技巧 >python題庫

python題庫

原文連結:https://blog.csdn.net/hihell/article/details/89344558

一、Python裡面如何實現tuple和list的轉換?

函式tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple, 元素不變,排序也不變

list轉為tuple:

temp_list = [1,2,3,4,5]

將temp_list進行強制轉換:tuple(temp_list)
確定是否轉換成功:print(type(temp_list))

函式list(seq)可以把所有的序列和可迭代的物件轉換成一個list,元素不變,排序也不變

tuple 轉為list:

temp_tuple = (1,2,3,4,5)

方法類似,也是進行強制轉換即可:list(temp_tuple)
確定是否轉換成功:print(type(temp_tuple))

二、Python裡面search()和match()的區別?

它們兩個都在re模組

  • match()函式是在string的開始位置匹配,如果不匹配,則返回None;
  • search()會掃描整個string查詢匹配;

>>> import re
>>> print(re.match('hello','helloworld').span())  # 開頭匹配到
(0, 5)
>>> print(re.match('hello','nicehelloworld').span()) # 開頭沒有匹配到 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> print(re.match('hello','nicehelloworld').span()) AttributeError: 'NoneType' object has no attribute 'span' >>>
>>> print
(re.search('a','abc')) <_sre.SRE_Match object; span=(0, 1), match='a'> >>> print(re.search('a','bac').span()) (1, 2) >>>

三、 如何用Python刪除一個檔案?

os模組的使用

刪除檔案

os.remove(path)

刪除檔案 path,刪除時候如果path是一個目錄, 丟擲 OSError錯誤。如果要刪除目錄,請使用rmdir()。

remove() 同 unlink() 的功能是一樣的

 os.remove('a.txt')

os.removedirs(path)

遞迴地刪除目錄。類似於rmdir(), 如果子目錄被成功刪除,removedirs()將會刪除父目錄;但子目錄沒有成功刪除,將丟擲錯誤。

例如,os.removedirs(“a/b/c”)將首先刪除c目錄,然後再刪除ba, 如果他們是空的話,則子目錄不能成功刪除,將丟擲OSError異常

os.rmdir(path)
刪除目錄 path,要求path必須是個空目錄,否則丟擲OSError錯誤

四、 is 和 == 的區別?

python中物件包含的三個基本要素,分別是:id(身份標識)type(資料型別)value(值)

4.1、id 身份標識,就是在記憶體中的地址

4.2、Python的字串駐留機制。對於較小的字串,為了提高系統性能Python會保留其值的一個副本。

4.3、Python 為了優化速度,使用了小整數物件池,避免為整數頻繁申請和銷燬記憶體空間。而Python 對小整數的定義是 [-5, 257)

>>> a = 'hello'
>>> b = 'hello'
>>> print(a is b)
True
>>> print(a==b)
True
>>> a = 'hello world'
>>> b = 'hello world'
>>> print(a is b)
False
>>> print(a == b)
True
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> print(a is b)
False
>>> print(a == b)
True
>>> a = [1,2,3]
>>> b = a
>>> print(a is b)
True
>>> print(a == b)
True
>>> 
  • ==是python標準操作符中的比較操作符,用來比較判斷兩個物件的value(值)是否相等
  • is也被叫做同一性運算子(物件標示符),這個運算子比較判斷的是物件間的唯一身份標識,也就是id(記憶體中的地址)是否相同

我們在檢查 a is b 的時候,其實相當於檢查id(a) == id(b)。而檢查a == b的時候,實際是呼叫了物件 a 的__eq()__方法,a == b相當於a.__eq__(b)

這裡還有一個問題,為什麼 a 和 b 都是 “hello” 的時候,a is b 返回True,而 a 和 b都是 “hello world” 的時候,a is b 返回False呢?

這是因為前一種情況下Python的字串駐留機制起了作用。對於較小的字串,為了提高系統性能Python會保留其值的一個副本,當建立新的字串的時候直接指向該副本即可。

所以 “hello” 在記憶體中只有一個副本,a 和 b 的 id 值相同,而 “hello world” 是長字串,不駐留記憶體,Python中各自建立了物件來表示 a 和 b,所以他們的值相同但 id 值不同。

試一下當a=247,b=247時它們的id還是否會相等。事實上Python 為了優化速度,使用了小整數物件池,避免為整數頻繁申請和銷燬記憶體空間。而Python 對小整數的定義是 [-5, 257),只有數字在-5到256之間它們的id才會相等,超過了這個範圍就不行了。

>>> a = 247
>>> b = 247
>>> print(a is b)
True
>>> a = 258
>>> b = 258
>>> print(a is b)
False
>>> 

is 是檢查兩個物件是否指向同一塊記憶體空間,而==是檢查他們的值是否相等。is比==更加嚴格

五、a=1, b=2, 不用中間變數交換a和b的值?

>>> a = 5
>>> b = 6
>>> a = a+b
>>> b = a-b
>>> a = a-b

a,b = b,a

六、說說你對zen of python的理解,你有什麼辦法看到它?python之禪

The Zen of Python


在python命令列執行 Import this就會顯示上面的詩歌:

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

中文翻譯:

優美勝於醜陋

明瞭勝於晦澀

簡單勝於複雜

複雜勝於雜亂

扁平勝於巢狀

間隔勝於緊湊

可讀性很重要

特例不足以特殊到違背這些原則

不要忽視錯誤,除非程式需要這樣做

面對模稜兩可,拒絕猜測

解決問題最直接的方法應該有一種,最好只有一種

可能這種方法一開始不夠直接,因為你不是範羅蘇姆

做也許好過不做,但不想就做還不如不做

如果方案難以描述明白,那麼一定是個糟糕的方案

如果容易描述,那麼可能是個好方案

名稱空間是一種絕妙的理念,多加利用