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

首頁(yè) > 編程 > Python > 正文

Python函數(shù)式編程

2019-11-25 16:00:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

主要內(nèi)容

1.函數(shù)基本語(yǔ)法及特性
2.參數(shù)與局部變
3.返回值 4.遞歸
5.名函數(shù) 6.函數(shù)式編程介紹
7.階函數(shù) 8.內(nèi)置函數(shù)

函數(shù)基本語(yǔ)法及特性

定義

數(shù)學(xué)函數(shù)定義:一般的,在一個(gè)變化過(guò)程中,如果有兩個(gè)變量x和y,并且對(duì)于x的每一 個(gè)確定的值,y都有唯一確定的值與其對(duì)應(yīng),那么我們就把x稱(chēng)為自變量,把y稱(chēng)為因變 量,y是x的函數(shù)。自變量x的取值范圍叫做這個(gè)函數(shù)的定義域。

但編程中的「函數(shù)」概念,與數(shù)學(xué)中的函數(shù)是有很 同的 函數(shù)是邏輯結(jié)構(gòu)化和過(guò)程化的一種編程方法

函數(shù)的優(yōu)點(diǎn)

減少重復(fù)代碼
使程序變的可擴(kuò)展
使程序變得易維護(hù)

函數(shù)與過(guò)程

定義函數(shù)
def fun1(): #函數(shù)名稱(chēng)
"The function decription" print("in the func1") return 0 #返回值

定義過(guò)程

def fun2():"The progress decription"print("in the func2")

函數(shù)與過(guò)程 過(guò)程就是沒(méi)有返回值的函數(shù) 但是在python中,過(guò)程會(huì)隱式默認(rèn)返回none,所以在python中即便是過(guò)程也可以算作函數(shù)。

def fun1():  "The function decription"  print("in the func1")  return 0def fun2():  "The progress decription"  print("in the func2")x=fun1()y=fun2()print("from func1 return is %s" %x)print("from func2 return is %s" %y)

結(jié)果為:

in the func1in the func2from func1 return is 0from func2 return is None

返回值

要想獲取函數(shù)的執(zhí) 結(jié)果,就可以 return語(yǔ) 把結(jié)果返回。

函數(shù)在執(zhí) 過(guò)程中只要遇到return語(yǔ) ,就會(huì)停 執(zhí) 并返回結(jié)果,所以也可以 解為 return 語(yǔ) 代表著函數(shù)的結(jié)束,如果未在函數(shù)中指定return,那這個(gè)函數(shù)的返回值為None。

接受返回值

賦予變量,例如:

def test():  print('in the test')  return 0x=test()

返回什么樣的變量值
return 個(gè)數(shù)沒(méi)有固定,return的類(lèi)型沒(méi)有固定。 例如:

def test1():  print('in the test1')def test2():  print('in the test2')  return 0def test3():  print('in the test3')  return 1,'hello',['alex','wupeiqi'],{'name':'alex'}def test4():  print('in the test4')  return test2x=test1()y=test2()z=test3()u=test4()print(x)print(y)print(z)print(u)

結(jié)果是:

in the test1
in the test2
in the test3
in the test4
None
0
(1, 'hello', ['alex', 'wupeiqi'], {'name': 'alex'})
<function test2 at 0x102439488>
返回值數(shù)=0:返回None 沒(méi)有return
返回值數(shù)=1:返回object return一個(gè)值,python 基本所有的數(shù)據(jù)類(lèi)型都是對(duì)象。
返回值數(shù)>1:返回tuple, return多個(gè)值。
返回可以返回函數(shù):return test2會(huì)將test2的內(nèi)存地址返回。
為什么要有返回值?
想要整個(gè)函數(shù)執(zhí)行的結(jié)果。 可能對(duì)執(zhí)行結(jié)果進(jìn)行相關(guān)操作。 比如登陸,返回true 接下來(lái)就可以進(jìn)行其他操作。 如果是false 則不給操作。

函數(shù)參數(shù)

形參和實(shí)參定義

形參
形式參數(shù),不是實(shí)際存在,是虛擬變量。在定義函數(shù)和函數(shù)體的時(shí)候使用形參,目的是在函數(shù)調(diào)用時(shí)接收實(shí)參(形參個(gè)數(shù),類(lèi)型應(yīng)與實(shí)參一一對(duì)應(yīng))。

變量只有在被調(diào)時(shí)才分配內(nèi)存單元

實(shí)參
實(shí)際參數(shù),調(diào)用函數(shù)時(shí)傳給函數(shù)的參數(shù),可以是常量、變量、表達(dá)式、函數(shù)等,無(wú)論實(shí)參是何種類(lèi)型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以 把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入 等辦法使參數(shù)獲得確定值。

區(qū)別
形參是虛擬的,不占用內(nèi)存空間.形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后,則不能再使該形參變量。

實(shí)參是一個(gè)變量,占用內(nèi)存空間,數(shù)據(jù)傳送單向,實(shí)參傳給形參,不能形參傳給實(shí)參。

def calc(x,y): #x,y為形參  res = x**y  return resc = calc(a,b) #a,b為實(shí)參print(c)def test(x,y): #x,y為形參  print(x)  print(y)x=1 #x為實(shí)參y=2 #y為實(shí)參

test(x=x,y=y) #等號(hào)左邊x,y為形參,等號(hào)右邊x,y為實(shí)參,引用不分順序,按關(guān)鍵字引用。

默認(rèn)參數(shù)

定義函數(shù)的時(shí)候,還可以有默認(rèn)參數(shù)。 函數(shù)的默認(rèn)參數(shù)的作用是簡(jiǎn)化調(diào)用,你只需要把必須的參數(shù)傳進(jìn)去。但是在需要的時(shí)候,又可以傳入額外的參數(shù)來(lái)覆蓋默認(rèn)參數(shù)值。

#定義一個(gè)計(jì)算 x 的N次方的函數(shù),默認(rèn)是2次方def test6(x,n=2):  s=1  while n>0:    n=n-1    s=s*x  print(s)  return stest6(2)

默認(rèn)參數(shù)只能定義在必需參數(shù)的后面.

可變參數(shù)

如果想讓一個(gè)函數(shù)能接受任意個(gè)參數(shù),我們就可以定義一個(gè)可變參數(shù):

def fn(*args):
    print args
可變參數(shù)的名字前面有個(gè) * 號(hào),我們可以傳入0個(gè)、1個(gè)或多個(gè)參數(shù)給可變參數(shù): Python解釋器會(huì)把傳入的一組參數(shù)組裝成一個(gè)tuple傳遞給可變參數(shù),因此,在函數(shù)內(nèi)部,直接把變量 args 看成一個(gè) tuple 就好了。

定義可變參數(shù)的目的也是為了簡(jiǎn)化調(diào)用。假設(shè)我們要計(jì)算任意個(gè)數(shù)的平均值,就可以定義一個(gè)可變參數(shù):

def average(*args):
    ...
這樣,在調(diào)用的時(shí)候,可以這樣寫(xiě):

>>> average()
0
>>> average(1, 2)
1.5
>>> average(1, 2, 2, 3, 4)
2.4

位置參數(shù)和關(guān)鍵字

位置參數(shù)調(diào)用:實(shí)參與形參位置一一對(duì)應(yīng); 關(guān)鍵參數(shù)調(diào)用:位置無(wú)需固定。

正常情況下,給函數(shù)傳參數(shù)要按順序,如果不按順序就可以用關(guān)鍵參數(shù)調(diào)用,只需指定參數(shù)名即可,但關(guān)鍵參數(shù)必須放在位置參數(shù)之后。

def test5(u,v,w):  print(u)  print(v)  print(w)test5(3,w=2,v=6)

函數(shù)調(diào)用

Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。

要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱(chēng)和參數(shù),比如求絕對(duì)值的函數(shù) abs,它接收一個(gè)參數(shù)。

調(diào)用 abs 函數(shù):

>>> abs(-21)
21
調(diào)用函數(shù)的時(shí)候,如果傳入的參數(shù)數(shù)量不對(duì),會(huì)報(bào)TypeError的錯(cuò)誤,并且Python會(huì)明確地告訴你:abs()有且僅有1個(gè)參數(shù),但給出了兩個(gè):

>>> abs(21,8)
Traceback (most recent call last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 67, in <module>
    abs(21,8)
TypeError: abs() takes exactly one argument (2 given)
如果傳入的參數(shù)數(shù)量是對(duì)的,但參數(shù)類(lèi)型不能被函數(shù)所接受,也會(huì)報(bào)TypeError的錯(cuò)誤,并且給出錯(cuò)誤信息:str是錯(cuò)誤的參數(shù)類(lèi)型:

>>> abs('a')
Traceback (most recent call last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 69, in <module>
    abs('a')
TypeError: bad operand type for abs(): 'str'

遞歸函數(shù)

在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)。

舉個(gè)例子,我們來(lái)計(jì)算階乘 n! = 1 * 2 * 3 * ... * n,用函數(shù) fact(n)表示:

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

遞歸函數(shù)的優(yōu)點(diǎn)是定義簡(jiǎn)單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫(xiě)成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰。

嵌套函數(shù)

python允許在定義函數(shù)的時(shí)候,其函數(shù)體內(nèi)又包含另外一個(gè)函數(shù)的完整定義。

name = "test1"def changeout():  name = "test2"  def changeinner():    name = "test3"    print("changeinner賦值打印", name)  changeinner() # 調(diào)用內(nèi)層函數(shù)  print("外層調(diào)用內(nèi)層打印", name)changeout()print("調(diào)用外層打印", name)

內(nèi)部函數(shù)可以訪(fǎng)問(wèn)其外部函數(shù)的作用域,但是外部函數(shù)不能訪(fǎng)問(wèn)內(nèi)部函數(shù)的作用域。

def change1(name):

匿名函數(shù)

匿名函數(shù)就是不需要顯式的指定函數(shù)

#這段代碼 def calc(n): return n**n print(calc(10))

#換成匿名函數(shù) calc = lambda n:n**n print(calc(10))

函數(shù)式編程

單說(shuō),"函數(shù)式編程"是一種"編程范式"(programming paradigm),也就是如何編寫(xiě)程序的方法論。

主要思想是把運(yùn)算過(guò)程盡量寫(xiě)成一系列嵌套的函數(shù)調(diào)用。

參考頁(yè)面

http://www.cnblogs.com/alex3714/articles/5740985.html

http://www.imooc.com/code/3516

http://blog.csdn.net/suncherrydream/article/details/51682560

//m.survivalescaperooms.com/article/68314.htm

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 舟曲县| 安溪县| 富蕴县| 林口县| 娱乐| 贵州省| 洪雅县| 南京市| 苍溪县| 太保市| 大冶市| 乃东县| 阿克陶县| 乌拉特后旗| 屏东县| 黎川县| 炉霍县| 陇西县| 霍城县| 当雄县| 章丘市| 安康市| 乳山市| 商南县| 昂仁县| 武穴市| 汕头市| 江安县| 梓潼县| 建水县| 三穗县| 惠州市| 九台市| 垫江县| 锦屏县| 平塘县| 绥化市| 大荔县| 固始县| 吉林省| 平果县|