譯者 | 豌豆花下貓
聲明 :本文獲得原作者授權翻譯,轉載請保留原文出處,請勿用于商業或非法用途。
有許許多多文章寫了 Python 中的許多很酷的特性,例如變量解包、偏函數、枚舉可迭代對象,但是關于 Python 還有很多要討論的話題,因此在本文中,我將嘗試展示一些我知道的和在使用的,但很少在其它文章提到過的特性。那就開始吧。
1、對輸入的字符串“消毒”
對用戶輸入的內容“消毒”,這問題幾乎適用于你編寫的所有程序。通常將字符轉換為小寫或大寫就足夠了,有時你還可以使用正則表達式來完成工作,但是對于復雜的情況,還有更好的方法:
user_input = "This/nstring has/tsome whitespaces.../r/n"character_map = { ord('/n') : ' ', ord('/t') : ' ', ord('/r') : None}user_input.translate(character_map) # This string has some whitespaces... "
在此示例中,你可以看到空格字符“ /n”和“ /t”被單個空格替換了,而“ /r”則被完全刪除。這是一個簡單的示例,但是我們可以更進一步,使用unicodedata
庫及其 combining()
函數,來生成更大的重映射表(remapping table),并用它來刪除字符串中所有的重音。
2、對迭代器切片
如果你嘗試直接對迭代器切片,則會得到 TypeError ,提示說該對象不可取下標(not subscriptable),但是有一個簡單的解決方案:
import itertoolss = itertools.islice(range(50), 10, 20) # <itertools.islice object at 0x7f70fab88138>for val in s: ...
使用itertools.islice
,我們可以創建一個 islice 對象,該對象是一個迭代器,可以生成我們所需的內容。但是這有個重要的提醒,即它會消耗掉切片前以及切片對象 islice 中的所有元素。
(譯注:更多關于迭代器切片的內容,可閱讀 Python進階:迭代器與迭代器切片)
3、跳過可迭代對象的開始
有時候你必須處理某些文件,它們以可變數量的不需要的行(例如注釋)為開頭。 itertools 再次提供了簡單的解決方案:
string_from_file = """http:// Author: ...// License: ...//// Date: ...Actual content..."""import itertoolsfor line in itertools.dropwhile(lambda line:line.startswith("http://"), string_from_file.split("/n")): print(line)
這段代碼僅會打印在初始的注釋部分之后的內容。如果我們只想丟棄迭代器的開頭部分(在此例中是注釋),并且不知道有多少內容,那么此方法很有用。
4、僅支持關鍵字參數(kwargs)的函數
當需要函數提供(強制)更清晰的參數時,創建僅支持關鍵字參數的函數,可能會挺有用:
def test(*, a, b): passtest("value for a", "value for b") # TypeError: test() takes 0 positional arguments...test(a="value", b="value 2") # Works...
新聞熱點
疑難解答