Python学習ノート――抽象

10158 ワード

一、def作成関数

  
  
  
  
  1. #----------------------------------------------------------------------  
  2. def hello(name):  
  3.     """test""" 
  4.     return 'hello, ' + name + '!' 
  5.  
  6. print hello('wisp'
  7.  
  8. hello, wisp!

二、キーワードパラメータ
パラメータを渡すときにパラメータを指定し、パラメータを順番に関数に渡すことができ、関数を作成するときにキーワードを使用してパラメータのデフォルト値にすることもできます.

  
  
  
  
  1. >>> def hello(greeting,name):  
  2.     print '%s,%s!' % (greeting,name)  
  3. >>> hello('hello','wisp')  
  4. hello,wisp!  
  5. >>> hello(greeting='hello',name='wisp')  
  6. hello,wisp! 

キーワードを使用してデフォルト値を指定します.

  
  
  
  
  1. >>> def hello_new(greeting='hello',name='wisp'):  
  2.     print '%s,%s!' % (greeting,name)  
  3.  
  4. >>> hello_new()  
  5. hello,wisp! 

三、任意の長さのパラメータ
パラメータの前に「*」を付けると、すべてのパラメータが同じメタグループに配置され、使用されます.パラメータが指定されていない場合、パラメータは空のメタグループです.

  
  
  
  
  1. >>> def print_params(*params):  
  2.     print params  
  3.  
  4. >>> print_params('Testing')  
  5. ('Testing',)  
  6. >>> print_params(1,2,3)  
  7. (123

**番号収集キーワード

  
  
  
  
  1. >>> def print_params_3(**params):  
  2.     print params  
  3. >>> print_params_3(x=1,y=2,z=3)  
  4. {'y'2'x'1'z'3

四、反転過程
メタグループまたは辞書をパラメータに分解して関数に渡す
*分解タプル
**グループ辞書

  
  
  
  
  1. >>> def add(x,y):  
  2.     return x + y  
  3.  
  4. >>> params = (1,2)  
  5. >>> add(*params)  
  6. 3 
  7.  
  8. >>> def hello_new(greeting='hello',name='wisp'):  
  9.     print '%s,%s!' % (greeting,name)  
  10. >>> params = {'name':'wisp','greeting':'hello'}  
  11. >>> hello_new(**params)  
  12. hello,wisp! 

五、作用域
各関数呼び出しには新しい役割ドメインが作成されます.関数内の変数はローカル変数と呼ばれ、関数内部ではglobals()[]でグローバル変数を呼び出し、関数内部ではglobalでグローバル変数を定義できます.

  
  
  
  
  1. >>> x = 1 
  2. >>> def change_global():  
  3.     global x  
  4.     x = x + 1 
  5.  
  6. >>> change_global()  
  7. >>> x  
  8. 2 

6、再帰
再帰は、自身を引用することです.
関数が直接値を返す場合の基本例
1つまたは複数の問題の最小部分を含む再帰コール

  
  
  
  
  1. def factorial(n):  
  2.     """by wisp""" 
  3.     if n == 1:  
  4.         return 1 
  5.     else:  
  6.         return n * factorial(n-1)  
  7.  
  8. print factorial(10)  
  9.  
  10. 3628800 

二元検索アルゴリズム:

  
  
  
  
  1. def search(sequence, number, lower, upper):  
  2.     """by wisp""" 
  3.     if lower == upper:  
  4.         assert number == sequence[upper]  
  5.         return upper  
  6.     else:  
  7.         middle = (lower + upper) // 2 
  8.         if number > sequence[middle]:  
  9.             return search(sequence, number, middle+1, upper)  
  10.         else:  
  11.             return search(sequence, number, lower, middle)  
  12.  
  13.  
  14. print search(range(1,100),37