国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

二、python函數

2019-11-14 17:20:11
字體:
來源:轉載
供稿:網友

1.定義函數

def  max(x,y):  if x>y:    return x  else:    return y

如果定義空函數(函數還沒想好怎么編寫,只是為了讓整個代碼能夠運行起來)

def max(x,y):  pass

2.函數的參數

2.1可變參數

顧名思義參數是可變的,既可以是1個參數,也可以是多個參數

例:請計算a^2+ b^2 + c^2 + ……,其中a,b,c.....個數不確定,所以我們將參數用一個list或tuple傳進去

def calc(numbers):  sum =0  for i in numbers:    sum = sum + i*i  return sum 

調用時

calc([1,2,3])  #list作為輸入,輸出為14

calc((1,2,4))  #tuple作為輸入,輸出為21

如果想將list或者tuple的參數,改為可變參數,代碼如下:

def calc(*numbers):  #只需要在numbers前面加*  sum =0  for i in numbers:    sum = sum + i*i  return sum 

調用時 calc(1,2,3)   #輸出14

與前面的定義只是多了個*,可變參數numbers在函數內封裝成tuple類型

也可以先組建一個list,num=[1,9,10,4] ,再把list參數作為可變參數傳進去,此時運用可變參數調用時,需要這么寫calc(*num)

或者 calc(num[0],num[1],num[2],num[3])  

 

2.2關鍵字參數

關鍵字參數,在函數內部封裝成dict類型,定義時會用**標記

例如:

def one(name,sex,**kw):  PRint 'name:',name,'sex:',sex,'other:',kw      #  ,  表示輸出一個空格,注:python的單引號與雙引號使用沒什么區別。

小技巧:str='my name is "boy" '   或者   str="my name is 'boy' "

調用時:

one(Tom,boy,city='beijing')    輸出為name: Tom sex: boy others: {'city':'beijing'}

one(Tom,boy,city='beijing',job='teacher')  輸出    name: Tom sex: boy others: {'city':'beijing','job':'teacher'}

和可變參數類似,也可以先組建一個dict,再把dict轉換為關鍵字參數傳進去,例:

dict={'city':'beijing','job':'teacher'}  調用時用法為one(Tom,boy,**dict); 或者  one(Tom,boy,city=dict['city'],job=dict['job'])

3.遞歸函數

3.1遞歸舉例

 例子,計算n!

def fact(n):  if n =0:    return 1  return n*fact(n-1)

遞歸函數的優點是定義簡單,邏輯清晰,但是容易出現棧溢出,在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減少一層棧幀,由于棧的大小不是無限的,所以遞歸次數過多,會導致棧溢出

3.2尾遞歸優化遞歸函數

 目的是為了防止棧溢出

def  fact(n):  return fact_iter(1,1,n)def fact_iter(pro,count,max):  if count>max :    return pro  return fact_iter(pro*count,count+1,max)

尾遞歸調用時,如果做了優化,棧不會增長,因此,無論多少次調用也不會導致棧溢出。遺憾的是,大多數編程語言沒有針對尾遞歸做優化,python解釋器也沒有做優化,所以,即使上面的fact(n)函數改成尾遞歸方式,也會導致棧溢出。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 历史| 休宁县| 凤城市| 正镶白旗| 孝昌县| 平远县| 江阴市| 康马县| 静乐县| 阜平县| 方正县| 顺昌县| 贵阳市| 宝清县| 光泽县| 桐城市| 吉林省| 东乡族自治县| 高雄市| 习水县| 大安市| 双桥区| 新安县| 荆州市| 青田县| 绥宁县| 安顺市| 英吉沙县| 韶山市| 钟山县| 岳西县| 灌云县| 朔州市| 黎城县| 若尔盖县| 无锡市| 福建省| 资源县| 湛江市| 红原县| 沅陵县|