Python筆記06-抽象

內建的callable函數可以判斷函數是否可調用:

定義函數:def語句,可以沒有return。

 

定義函數並設置默認值:

參數中定義元組(加 *號):

也可以混合使用 普通參數 和 元組:

參數中定義字典(加 **號):

放在一起:

【反轉過程】

◆ 下面的案例,test_a 函數的定義和調用都使用了**號,而test_b函數定義和調用都沒使用,但是結果是一樣的。所以:*號 只在定義函數(允許使用不定數目的參數)或者調用(“分割”字典或者序列)時纔有用。(09.py)

【綜合練習 10.py

#encoding:utf-8

def story(**kwds):

       return 'This is a story:' \

             '%(job)s --- %(name)s' % kwds

def power(x,y,*others):

    if others:

                print 'Good student:',others

       return pow(x,y)

def interval(start,stop=None,step=1):

        'Imitates range() for step > 0'

   if stop is None: #如果沒有爲stop提供值

           start,stop = 0,start #指定參數

       result = []

i = start #計算start索引

  while i < stop: #直到計算到stop索引

         result.append(i) #將索引添加到result內

              i+=step #用step(>0)增加索引i

   return result

#---------------------------------------------

print story(job='king',name='renxing')

print story(name='Green',job='teacher')

params = {'job':'language','name':'Python'}

print story(**params)

del params['job']

print story(job='hahahaha',**params)

power(2,3)

power(3,2)

power(y=3,x=2)

params = (5,)*2

power(*params)

power(3,3,'Hello_world')

interval(10)

interval(1,5)

interval(3,12,4)

power(*interval(3,7))

 

【作用域】

內建的vars 函數:

函數內的變量稱爲:局部變量

使用 全局變量 (global)

【函數可以嵌套】

def foo():
    def bar():
        print “Hello_world”

◆ 例如下面的案例(看懂了但是卻運行錯誤):

【遞歸】

(1)階乘。n×(n-1)×(n-2)×...×1.

(2)冪運算:

(3)用遞歸實現一個二分查找法:(13.py)

#encoding:utf-8
#用遞歸實現一個二分查找法
def search(sequence,number,lower=0,upper=None):
   if upper is None:
         upper = len(sequence) - 1
   if lower == upper:
           assert number == sequence[upper]
           return upper
       else:
           middle = (lower + upper) // 2
           if number > sequence[middle]:
               return search(sequence,number,middle+1,upper)
           else:
               return search(sequence,number,lower,middle)

 

 

【代碼】https://github.com/rxbook/study-python/tree/master/06

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章