欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python函數(shù)式編程

 更新時間:2017年07月20日 08:50:45   作者:cathywu  
函數(shù)式編程Functional Programming,雖然也可以歸結(jié)到面向過程的程序設(shè)計,但其思想更接近數(shù)學計算。函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量。

主要內(nèi)容

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

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

定義

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

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

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

減少重復代碼
使程序變的可擴展
使程序變得易維護

函數(shù)與過程

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

定義過程

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

函數(shù)與過程 過程就是沒有返回值的函數(shù) 但是在python中,過程會隱式默認返回none,所以在python中即便是過程也可以算作函數(shù)。

def fun1():
  "The function decription"
  print("in the func1")
  return 0
def 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 func1
in the func2
from func1 return is 0
from func2 return is None

返回值

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

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

接受返回值

賦予變量,例如:

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

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

def test1():
  print('in the test1')


def test2():
  print('in the test2')
  return 0

def test3():
  print('in the test3')
  return 1,'hello',['alex','wupeiqi'],{'name':'alex'}

def test4():
  print('in the test4')
  return test2

x=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 沒有return
返回值數(shù)=1:返回object return一個值,python 基本所有的數(shù)據(jù)類型都是對象。
返回值數(shù)>1:返回tuple, return多個值。
返回可以返回函數(shù):return test2會將test2的內(nèi)存地址返回。
為什么要有返回值?
想要整個函數(shù)執(zhí)行的結(jié)果。 可能對執(zhí)行結(jié)果進行相關(guān)操作。 比如登陸,返回true 接下來就可以進行其他操作。 如果是false 則不給操作。

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

形參和實參定義

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

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

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

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

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

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

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

默認參數(shù)

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

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

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

可變參數(shù)

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

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

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

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

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

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

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

正常情況下,給函數(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)用一個函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對值的函數(shù) abs,它接收一個參數(shù)。

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

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

>>> 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ù)量是對的,但參數(shù)類型不能被函數(shù)所接受,也會報TypeError的錯誤,并且給出錯誤信息:str是錯誤的參數(shù)類型:

>>> 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ù)。如果一個函數(shù)在內(nèi)部調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。

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

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

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

嵌套函數(shù)

python允許在定義函數(shù)的時候,其函數(shù)體內(nèi)又包含另外一個函數(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ù)可以訪問其外部函數(shù)的作用域,但是外部函數(shù)不能訪問內(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ù)式編程

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

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

參考頁面

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

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

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

http://www.dbjr.com.cn/article/68314.htm

相關(guān)文章

  • python時間日期操作方法實例小結(jié)

    python時間日期操作方法實例小結(jié)

    這篇文章主要介紹了python時間日期操作方法,結(jié)合實例形式總結(jié)分析了Python針對日期時間的轉(zhuǎn)換、計算相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • python人工智能tensorflow函數(shù)tf.assign使用方法

    python人工智能tensorflow函數(shù)tf.assign使用方法

    這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)tf.assign使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python 讀取串口數(shù)據(jù),動態(tài)繪圖的示例

    Python 讀取串口數(shù)據(jù),動態(tài)繪圖的示例

    今天小編就為大家分享一篇Python 讀取串口數(shù)據(jù),動態(tài)繪圖的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 淺析Python中的多進程編程

    淺析Python中的多進程編程

    在這篇文章中,我們將專注于討論Python中的多進程編程,例如進程的創(chuàng)建、管理和同步,以及一些更高級的概念,如進程池,需要的可以參考一下
    2023-07-07
  • 基于python實現(xiàn)獲取網(wǎng)頁圖片過程解析

    基于python實現(xiàn)獲取網(wǎng)頁圖片過程解析

    這篇文章主要介紹了基于python實現(xiàn)獲取網(wǎng)頁圖片過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 使用虛擬環(huán)境實現(xiàn)Python版本和依賴庫的兼容

    使用虛擬環(huán)境實現(xiàn)Python版本和依賴庫的兼容

    這篇文章主要介紹了使用虛擬環(huán)境實現(xiàn)Python版本和依賴庫的兼容的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python3.9.0 a1安裝pygame出錯解決全過程(小結(jié))

    Python3.9.0 a1安裝pygame出錯解決全過程(小結(jié))

    這篇文章主要介紹了Python3.9.0 a1安裝pygame出錯解決全過程(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • python實現(xiàn)與redis交互操作詳解

    python實現(xiàn)與redis交互操作詳解

    這篇文章主要介紹了python實現(xiàn)與redis交互操作,結(jié)合實例形式分析了Python Redis模塊的安裝、導入、連接與簡單操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-04-04
  • Python中numpy的np.percentile百分位函數(shù)舉例詳解

    Python中numpy的np.percentile百分位函數(shù)舉例詳解

    在python中計算一個多維數(shù)組的任意百分比分位數(shù),此處的百分位是從小到大排列,只需用np.percentile即可,這篇文章主要給大家介紹了關(guān)于Python中numpy的np.percentile百分位函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Python實現(xiàn)IP代理批量采集的示例代碼

    Python實現(xiàn)IP代理批量采集的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)IP代理批量采集,并檢測代理是否可用。文中的示例代碼講解詳細,需要的可以參考一下
    2022-09-09

最新評論