shell腳本是由系統命令、變量、流程控制三者組合而成的;
類比python程序,與shell中能夠實現很多功能的系統命令類似,python有很多可以實現不同功能的模塊;
變量方面,shell腳本有系統變量,有普通變量,有特殊位置變量,有特殊變量調用方式,有單個變量,也有數組,而python與一般高級語言一樣,變量有名稱、數據類型、調用方式(操作符和內置函數);
在流程控制方面,shell與各種高級語言都是類似的,基本的流程控制有順序、條件、循環三種方式,主要也是if,for,break,continue這幾種方式實現。
另外兩者處理基本內容,在編程思想方面更要深刻立即,有了程序思維,纔可以編寫好程序。
我編寫了一個總結python流程控制和函數的腳本,腳本內容如下:
#!/usr/bin/env python # _*_ coding:utf-8 _*_ ################# #流程控制 ################# print ''' 流程控制,是程序實現邏輯的重要方法,與程序的流程圖對應。 一般的流程分爲順序、條件、循環三種方式,順序執行比較簡單,與自頂向下,面向過程的思路類似,條件判斷和循環控制就需要專門的語句和格式來實現。 流程控制語句,用來實現對程序流程的選擇、循環和返回等進行控制。 python中的主要流程控制包括 if判斷,for循環,break跳出,continue繼續等語句。 ''' print print ''' 程序要控制流程,就要對程序進行分塊,對於代碼來說,就有了“程序塊”和“作用域”的概念,大多數高級程序中,程序塊和作用域有不同的概念。 程序塊結構,是一種程序結構形式,使程序變得清晰,便於閱讀和修改。比如C、C++允許程序員按照自己的習慣在不同行之間,採取任意對齊方式。 作用域,是按照變量或者函數的可見性定義的程序子集。如果某個符號的名稱在給定的點是可見的,則稱該符號在作用域內。如C、C++採用大括號{}表達作用域。 python中用“縮進”這一種方式,同時表達程序塊和作用域的概念,相同縮進範圍內的代碼在一個程序塊和作用域,且同一個程序塊和作用域不能有不同的縮進。 python中用冒號:作爲程序塊標記關鍵字,每個冒號:後面的程序塊必須有相同的縮進,縮進不同就會報錯。 高級語言允許定義空作用域,python必須有縮進,所以可以用pass來定義作用域,但不執行任何動作。 ''' print #條件判斷 print ''' 條件判斷,是依據指定的變量或表達式的結果,決定後續運行的程序,最常用的是if-else指令,可以根據條件是否成立來決定後續的程序。 if-else判斷可以單個執行,也可以組合多個指令進行復雜的判斷。 python中的if語句有3中語法形式。 #判斷if格式一:if條件爲真,則執行某個代碼塊 if expression1: block_for_True #判斷if格式二:if條件爲真,則執行某塊代碼;如果爲假,則執行else下的代碼塊 if expression1: block_for_True else: block_for_False #判斷fi格式三:if條件爲真,則執行某塊代碼;如果爲假,則執行elif的條件判斷 if expression1: block_for_expression1 elif expression2: block_for_expression2 elif expression3: block_for_expression3 else: block_for_False 複雜判斷,每個if,elif,else塊中都可以放入多條語句,也可以放入判斷或循環. ''' #條件判斷 if-elfi-else 程序示例: import sys param = None if len(sys.argv) > 1: param = int(sys.argv[1]) if param is None: print "Alert" print "The param is not set" elif param < -10: print "The param is samll" elif param > 10: print "The param is big" else: print "The param is middle" #循環控制 print ''' 循環控制,是因爲在實際程序開發中,有許多具有規律性的重複操作,因此程序中需要重複執行某些語句。 一組被重複執行的語句,叫循環體,能否繼續重複,則取決於循環的終止條件。 循環語句有循環體和循環終止條件兩部分組成。python中循環語句有while語句和for語句兩種,while語句先循環,達到條件時終止循環,要避免死循環。 for循環先有條件判斷,後面在執行循環體,容易避免死循環。 ''' print print ''' while語句的語法,判斷條件爲真,則執行循環體,一直到表達式爲假,終止執行,語法爲: while expression: repeat_block ''' #while循環程序示例: myList = [ 'English', 'Chinese', 'Japanese', 'German', 'France' ] while len(myList) > 0: print "pop element out:", myList.pop() print ''' python中的for語句與C#,java中的foreach語句類似,語法結構爲: for element in iterable: repeat_block 含義爲針對iterable中每個元素執行repeat_block,在循環體中可以以變量名element來訪問當前元素。循環內容可以是序列類型,集合set,或迭代器等。 在開發比較複雜的程序時,while或for循環語句的循環體,有時需要提前結束整個循環,或者在本輪尚未結束時提前開始下一輪循環,這就需要break或continue語句。 break語句會提前結束整個循環; continue會在本輪循環體沒有結束時,直接開始下一輪循環。 ''' #for循環程序示例 myList = [ 'English', 'Chinese', 'Japanese', 'German', 'France' ] for language in myList: print "Current element is :", language #循環控制break和continue程序示例: count=0 while True: #input = raw_input("Enter quit: ") input = "quit" # check for valid passwd if input == "quit": break count = count + 1 if count%3 > 0: continue print "Please input quit!" print "Quit loop successfully!" ################# #函數 ################# print ''' 從面向過程的編程方法,到函數式編程,就是函數在程序中起到的巨大作用。 在編程中使用函數,可以寫出優雅的程序結構,模塊化的結構,可以使程序簡單化,提高可讀性和可維護性。 函數有三個要素:函數名,參數,函數體;函數還可以根據需要,設置返回值。 python中函數定義的關鍵字是def,函數體這一程序塊,還是用冒號:作爲關鍵字。 python中返回值可以是0個或多個,無需顯示定義返回值的數量和類型,只需要用return關鍵字返回,返回值只有值,調用時需要重新定義變量才能使用; 函數的參數可以是任意個,可以只定義參數名,也可以在定義參數名後,給參數定義默認值,但有默認值的參數一定要在後面; 在調用函數,傳入參數值時,可以按照參數定義順序只傳入值,也可以不按順序,傳入命名參數和值; ''' #一般函數與返回值調用示例 def sum_01(x, y): return x+y def total(x, y, z): sum_of_two = sum_01(x, y) sum_of_three = sum_01(sum_of_two, z) return sum_of_two, sum_of_three def main_01(): print "return of sum:", sum_01(4, 6) x, y = total(2, 6, 8) print "return of total:", x, ", ", y main_01() #帶默認值的函數調用示例 def sum_02(x, y=10): return x+y def main_02(): print "return of sum(2, 3):", sum_02(2, 3) print "return of sum(-4)", sum_02(-4) main_02() #不同方式參數賦值的函數調用示例 def sum_03(x, y, z): return x + y + z def main_03(): #下面兩種調用方式,意義相同 ret1 = sum_03(1, 2, 3) ret2 = sum_03(y=2, z=3, x=1) print "return of sum_03(1, 2, 3):", ret1 print "return of sum_03(y=2, z=3, x=1):", ret2 main_03() print print ''' 變長參數的函數,就是參數個數可變、參數類型不定的函數。變長參數可以爲函數設計提供更大的靈活性。 python中允許定義兩種類型的函數變長參數: 元組tuple變長參數:適用於未知參數的數量不固定,但在函數中使用這些參數無須知道參數名字的場合。在函數定義中用單星號*表示。 字典dict變長參數: 適用於未知參數的數量不固定,而且在函數使用參數時需要知道參數名字的場合。在函數定義中,用雙型號**表示。 ''' #使用元組tuple作爲變長參數的示例 def show_message(message, *tupleName): for name in tupleName: print message, ", ", name def main_tuple(): show_message("Good Morring", "Jack", "Evans", "Rose Hasa", 893, "Zion" ) main_tuple() #使用字典dict作爲變長參數的示例 def check_book(**dictParam ): if dictParam.has_key('Price'): price = int(dictParam['Price']) if price > 100: print "*******I want buy this book!*******" print "The book information are as follow:" for key in dictParam.keys(): print key, ": ", dictParam[key] print "" def main_dict(): check_book( author = 'James', Title = 'Economics Introduction' ) check_book( author = 'Linda', Title = 'Deepin in python', Date = '2015-5-1', Price = 302 ) check_book( Date = '2002-3-19', Title = 'Cooking book', Price = 20 ) check_book( author = 'Jinker Landy', Title = 'How to keep healthy' ) check_book( Category = 'Finance', Name = 'Enterprise Audit', Price = 105 ) main_dict() print print ''' 匿名函數 Anonymous Function是一類無須定義函數名的函數或子程序,一般用於值在代碼中存在一次函數引用的場合。 因爲只需要引用一次,所以無須聲明。python中用lambda語法定義匿名函數,只需表達式,而無須聲明。 除了沒有參數名,匿名函數定義和一般函數的定義都相同。 匿名函數定義格式如下: lambda [arg1, arg2, ... ,argN]: expression print (lambda x, y: x - y)(3, 4) ''' #匿名函數示例如下 import datetime def nameFunc(a): return " I'm named function with param %s " % a def call_func(func, param): print datetime.datetime.now() print func(param) print "" def main_lambda(): call_func(nameFunc, 'hello') call_func(lambda x: x*2, 9) call_func(lambda y: y*y, -4) main_lambda()
執行結果如下:
# python func.py 流程控制,是程序實現邏輯的重要方法,與程序的流程圖對應。 一般的流程分爲順序、條件、循環三種方式,順序執行比較簡單,與自頂向下,面向過程的思路類似,條件判斷和循環控制就需要專門的語句和格式來實現。 流程控制語句,用來實現對程序流程的選擇、循環和返回等進行控制。 python中的主要流程控制包括 if判斷,for循環,break跳出,continue繼續等語句。 程序要控制流程,就要對程序進行分塊,對於代碼來說,就有了“程序塊”和“作用域”的概念,大多數高級程序中,程序塊和作用域有不同的概念。 程序塊結構,是一種程序結構形式,使程序變得清晰,便於閱讀和修改。比如C、C++允許程序員按照自己的習慣在不同行之間,採取任意對齊方式。 作用域,是按照變量或者函數的可見性定義的程序子集。如果某個符號的名稱在給定的點是可見的,則稱該符號在作用域內。如C、C++採用大括號{}表達作用域。 python中用“縮進”這一種方式,同時表達程序塊和作用域的概念,相同縮進範圍內的代碼在一個程序塊和作用域,且同一個程序塊和作用域不能有不同的縮進。 python中用冒號:作爲程序塊標記關鍵字,每個冒號:後面的程序塊必須有相同的縮進,縮進不同就會報錯。 高級語言允許定義空作用域,python必須有縮進,所以可以用pass來定義作用域,但不執行任何動作。 條件判斷,是依據指定的變量或表達式的結果,決定後續運行的程序,最常用的是if-else指令,可以根據條件是否成立來決定後續的程序。 if-else判斷可以單個執行,也可以組合多個指令進行復雜的判斷。 python中的if語句有3中語法形式。 #判斷if格式一:if條件爲真,則執行某個代碼塊 if expression1: block_for_True #判斷if格式二:if條件爲真,則執行某塊代碼;如果爲假,則執行else下的代碼塊 if expression1: block_for_True else: block_for_False #判斷fi格式三:if條件爲真,則執行某塊代碼;如果爲假,則執行elif的條件判斷 if expression1: block_for_expression1 elif expression2: block_for_expression2 elif expression3: block_for_expression3 else: block_for_False 複雜判斷,每個if,elif,else塊中都可以放入多條語句,也可以放入判斷或循環. Alert The param is not set 循環控制,是因爲在實際程序開發中,有許多具有規律性的重複操作,因此程序中需要重複執行某些語句。 一組被重複執行的語句,叫循環體,能否繼續重複,則取決於循環的終止條件。 循環語句有循環體和循環終止條件兩部分組成。python中循環語句有while語句和for語句兩種,while語句先循環,達到條件時終止循環,要避免死循環。 for循環先有條件判斷,後面在執行循環體,容易避免死循環。 while語句的語法,判斷條件爲真,則執行循環體,一直到表達式爲假,終止執行,語法爲: while expression: repeat_block pop element out: France pop element out: German pop element out: Japanese pop element out: Chinese pop element out: English python中的for語句與C#,java中的foreach語句類似,語法結構爲: for element in iterable: repeat_block 含義爲針對iterable中每個元素執行repeat_block,在循環體中可以以變量名element來訪問當前元素。循環內容可以是序列類型,集合set,或迭代器等。 在開發比較複雜的程序時,while或for循環語句的循環體,有時需要提前結束整個循環,或者在本輪尚未結束時提前開始下一輪循環,這就需要break或continue語句。 break語句會提前結束整個循環; continue會在本輪循環體沒有結束時,直接開始下一輪循環。 Current element is : English Current element is : Chinese Current element is : Japanese Current element is : German Current element is : France Quit loop successfully! 從面向過程的編程方法,到函數式編程,就是函數在程序中起到的巨大作用。 在編程中使用函數,可以寫出優雅的程序結構,模塊化的結構,可以使程序簡單化,提高可讀性和可維護性。 函數有三個要素:函數名,參數,函數體;函數還可以根據需要,設置返回值。 python中函數定義的關鍵字是def,函數體這一程序塊,還是用冒號:作爲關鍵字。 python中返回值可以是0個或多個,無需顯示定義返回值的數量和類型,只需要用return關鍵字返回,返回值只有值,調用時需要重新定義變量才能使用; 函數的參數可以是任意個,可以只定義參數名,也可以在定義參數名後,給參數定義默認值,但有默認值的參數一定要在後面; 在調用函數,傳入參數值時,可以按照參數定義順序只傳入值,也可以不按順序,傳入命名參數和值; return of sum: 10 return of total: 8 , 16 return of sum(2, 3): 5 return of sum(-4) 6 return of sum_03(1, 2, 3): 6 return of sum_03(y=2, z=3, x=1): 6 變長參數的函數,就是參數個數可變、參數類型不定的函數。變長參數可以爲函數設計提供更大的靈活性。 python中允許定義兩種類型的函數變長參數: 元組tuple變長參數:適用於未知參數的數量不固定,但在函數中使用這些參數無須知道參數名字的場合。在函數定義中用單星號*表示。 字典dict變長參數: 適用於未知參數的數量不固定,而且在函數使用參數時需要知道參數名字的場合。在函數定義中,用雙型號**表示。 Good Morring , Jack Good Morring , Evans Good Morring , Rose Hasa Good Morring , 893 Good Morring , Zion The book information are as follow: Title : Economics Introduction author : James *******I want buy this book!******* The book information are as follow: Date : 2015-5-1 Price : 302 Title : Deepin in python author : Linda The book information are as follow: Date : 2002-3-19 Price : 20 Title : Cooking book The book information are as follow: Title : How to keep healthy author : Jinker Landy *******I want buy this book!******* The book information are as follow: Category : Finance Price : 105 Name : Enterprise Audit 匿名函數 Anonymous Function是一類無須定義函數名的函數或子程序,一般用於值在代碼中存在一次函數引用的場合。 因爲只需要引用一次,所以無須聲明。python中用lambda語法定義匿名函數,只需表達式,而無須聲明。 除了沒有參數名,匿名函數定義和一般函數的定義都相同。 匿名函數定義格式如下: lambda [arg1, arg2, ... ,argN]: expression print (lambda x, y: x - y)(3, 4) 2017-03-09 20:20:31.264415 I'm named function with param hello 2017-03-09 20:20:31.264533 18 2017-03-09 20:20:31.264555 16