python基礎---->函數


1、函數介紹

在學習函數以前,咱們編程一直遵循面向過程編程,即:根據業務邏輯從上到下實現功能,其每每用一長段代碼來實現指定功能;python

而學了函數以後,咱們能夠把相同做用的代碼放到一個函數中;這樣顯然程序的重用性和可讀性要好一些編程

這也是函數式編程和麪向過程編程的區別:app

  函數式:將相同做用的代碼封裝到函數中,以後調用函數即課使用函數式編程

  面向過程:根據問題邏輯從上到下寫強堆代碼......函數

2、函數的定義和使用

一、通常函數的定義

def func(name):     # name是形式參數
    print(name)      # 函數體

func('clint')       # 執行函數,'clint'是傳入的實參

傳遞一個默認參數post

def info(name,age,country = 'China'):   #country定義了一個默認參數
    print('姓名:',name)
    print('年齡:',age)
    print('國家:',country)

info('clint',18)     #調用時,沒穿實參countrty,就用默認的參數

正常狀況下,給函數傳參數要按順序,不想按順序就指定參數名便可,但記住一個要求就是,關鍵參數必須放在位置參數以後學習

def info
     ...
   
info(age=18,name='clint')   #使用關鍵參數,能夠不按順序

*args 和 **kwargsspa

def info(name,age,*args):     #*args會把多傳入的參數變成一個元組形式
   def info(name, *args, **kwargs):  # **kwargs 會把多傳入的參數變成一個dict形式    

二、內置函數

3、遞歸函數

遞歸函數:函數在內部調用自身。code

符合遞歸函數的條件:blog

1. 結束條件;

2. 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減小;

3. 遞歸效率不高,遞歸層次過多會致使棧溢出

PS:python默認最大遞歸數爲999,但可經過如下代碼進行設置:

import sys
sys.setrecursionlimit(10000)     # 將遞歸數設置爲10000

實例:

斐波那契數列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,...

版本一:

# -*- coding:utf-8 -*-
__Author__ = "Clint"
fibonaccis = []


def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


for i in range(1, 10):
    fibonaccis.append(fibonacci(i))

print(fibonaccis)

版本二:

# -*- coding:utf-8 -*-
__Author__ = "Clint"


def fib(max):
    n = 0
    a = 0
    b = 1
    while n < max:
        print(b)
        a, b = b, a + b  # ===> 賦值語句至關於 t=(b,a+b) a=t[0],b=t[1]
        n += 1
    return 'done'


fib(10)

再來一個n的階乘,求n!

#遞歸實現階乘n! = (n-1)! × n
def fac(n):
    if n == 1:
        return 1
    else:
        return n * fac(n-1)
print(facl(10))

4、匿名函數lambda

# ###################### 普通函數 ######################
# 定義函數(普通方式)
def func(arg):
    return arg + 1
    
# 執行函數
result = func(123)
    
# ###################### lambda ######################
    
# 定義函數(lambda表達式)
my_lambda = lambda arg : arg + 1
    
# 執行函數
result = my_lambda(123)

5、map()、reduce()、filter()函數

map()是 Python 內置的高階函數,它接收一個函數 func和一個list,並經過把函數 func依次做用在 list 的每一個元素上,獲得一個新的 list 並返回

def func(x):
    return x * x
a= map(func,range(1,10))
print(list(a))

# 輸出爲[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce()函數接收的參數和 map()相似,接收一個函數 func和一個list,但reduce()傳入的函數 func 必須接收兩個參數,reduce()對list的每一個元素反覆調用函數func,並返回最終結果值

from functools import reduce
def func(x,y):
    return x + y
a = reduce(func,[1,3,5,7,9,10])
print(a)

# 輸出爲: 35

filter()函數也是接收一個函數 func和一個list,函數 func的做用是對每一個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list

def is_odd(x):
    return x % 2 == 1
a = filter(is_odd,[1,2,3,4,5,6,7,8])
print(list(a))

# 輸出爲:[1, 3, 5, 7]

6、內嵌函數

在一個函數體內建立另一個函數,這種函數就叫內嵌函數

def foo():
    print("in the foo")
    def bar():
        print("in the bar")
    bar()


foo()

# 輸出爲:
in the foo
in the bar   
相關文章
相關標籤/搜索