Python語言的其他特性(第五章 不常用的特性)

2022-09-10 19:15:15 字數 2498 閱讀 6830

如何使用lambda和filter函式

如何使用map來避免迴圈

字串替換

getopt模組

4.1 lambda和filter:簡單的匿名函式

4.2map短路迴圈

4.3在列表中做出決策——列表解析

4.4為迴圈生成迭代器

4.5使用字典的特殊字串替換

4.6重要模組

4.6.1getopt從命令列中得到選項

在unix系統中指定乙個程式的執行方式,最常用方法是在程式的命令列中加入引數。例如,你可能已經看到了能夠在執行很多程式時可以使他們提供關於其執行方式的基本資訊。在python中使用-h來實現的

以前在不同的unix平台上採用不同的方式來指定這些選項,而這在很大很大程度上導致了大部分專案採用了兩種選項形式:簡易形式和長形式。

使用者兩種選項是很有意義的,理想情況下,我們希望同時提供乙個簡易的和長的命令形式,並且允許隨意地指定其中的乙個,所以如果想要編寫乙個具有使用者可以制定的配置檔案的程式,可能要唯有經驗的使用者提供-c這樣的乙個簡易選項,還有-config-file這樣的長的選項,在任何一種情況下,都希望他們在程式中具有相同的功能已節省時間,同時允許使用者自由地使用這些選項。

getopt模組為了是這個標準的約定易用提供了兩個函式:getopt.getopt和getopt.gnugetopt,他們基本上是相同的,基本的getopt一直執行到遇到第乙個非選項,其餘的不檢查。

為了讓getopt更有用,必須知道想讓使用者使用什麼選項,通常情況下,編寫的城市最少要為使用者提供關於如何執行程式的資訊,就像python的-h列印資訊一樣。

還有具有乙個配置檔案通常非常有用,將這些想法作為出發點,可以開始編寫新程式,使得-h和--help都能產生關於程式如何使用的最少資訊。

當使用長選項並要求乙個引數(像其那面例子中的--config)時,必須使用等號連線選項和引數的值。然而,當使用簡易選項時,可以用乙個或多個空格或製表符分割選項和它對應的值。

前面的**片段如果在乙個使用引數-c test -h -config=secondtest的程式中執行,將產生下面的輸出:

注意配置檔案的第二個例項是預設接受的,當他出現時,重新訪問設定config檔案的相同**,以使得能夠第二個例項。

第二個列表是乙個空的列表,這裡因為命令列中提供給程式的所有選項都是有效的選項,或者選項的有有效引數,如果在選項中間插入其他的字串,標準的getopt會有不同的行為,如果將引數替換

4.6.2使用乙個以上的程序

在unix和類unix的作業系統中,執行某種型別的子任務的主要方式是執行乙個新的程式已建立乙個新的程序。在unix系統中,這個使用乙個系統呼叫完成的,在python中,額可以使用os.fork進行系統呼叫,計算機會複製乙個當前資訊到新建立的程序中,唯一不同的是新建立的程序(子程序)中os.fork的返回值是0,而這個返回值是新建立的程序在原始程序(父程序)中的程序id(pid)。

父程序能夠在子程序執行中等待乙個事件,反之亦然,**簡單實用,但是只能工作在nuix和類unix系統上。

呼叫os.fork之後最常用的一件事情是立即呼叫os.execl以執行其他程式。os.execl是乙個新程式代替正在執行程式的指令,所以它使得呼叫程式終止,並且乙個新的程式出現在他的位置

os.wait函式通知pyt讓父程序什麼都不做。

4.6.3執行緒-在相同的程序中完成多個工作

使用fork和spawn建立乙個新的程序有時可能需要付出很大的代價,又不能提供足夠多的好處,fork不足之處在於,當有時需要程式同時做很多任務作時,一些工作可能需要等待其他工作處理完成,發生這樣的情況時,可能想要所有不同的元件將它們需要傳遞到程式的其他部分。

因為子程序最初是使用父程序的資料建立的,所以這些程序間共享很多資訊,然而他們是完全不同的實體,因此,使兩個程序協同工作需要使用很多技巧。

為了應付不適用子程序的複雜情況,用到了執行緒的概念。

程式執行時,很多合作的執行緒比使用單獨的程序要方便得多,注意下面的例子使用了子類。

很多情況下,例如網路伺服器或者圖形使用者介面,執行緒具有更重要的意義,因為他們只需要程式設計師做很少的工作,並且需要系統資源很少。

python學習 第五站 高階特性

利用python的高階特性,實現用少量 實現功能,做到 少,開發效率高。普通索引對經常取定範圍索引操作,需採用迴圈方式,顯得十分的繁瑣,slice就是為了簡化這繁瑣操作衍生出來的產品。切片 slice 是對序列型物件 如list,string,tuple 的一種高階索引方法。普通索引只取出序列中乙個...

Python語言程式設計第五章

def 函式名 引數列表 函式體 return 返回值列表 沒有引數時也要保留圓括號 函式可以沒有return語句,在函式體結束位置將控制權返回給呼叫者 匿名函式 函式名 lambda 引數列表 表示式 f lambda x,y x y相當於 def 函式名 引數列表 函式體 return 返回值列...

《python語言程式設計基礎》 第五章

lambda用於定義一種特殊的函式 匿名函式。通常只有對於那些非常簡單,能夠在一行內表示的函式,才使用匿名函式。例如,實現乙個加法函式 f lambda x,y x y 使用f a,b 就可以計算a b的值 函式可以定義可選引數 使用引數的位置或者名稱傳遞引數值,根據函式中變數的不同作用域有不同的函...