標籤:內建函數 作用 pytho 預設值 閉包 開頭 引用 多個 函數定義
函數
一、函數的定義與調用
函數的定義:函數及工具,我們把事先準備工具的過程可以當做定義一個函數,拿來用準備好的工具叫做函數的調用
結論:函數必須是先定義後調用的。
1、定義一個函數
def func(): print(‘hello word‘)func()
注; def 為關鍵字,func為函數名,後跟的括弧與冒號必須寫,def與func之間用空格分開
func():調用函數體中的值------稱為函數的調用
函數名;由數字、字母,底線組成。不能以數字開頭。不能是python的關鍵字
-------- 寫函數應有注釋說明
寫一個函數;關鍵字+函數名--------子代碼-----優先寫注釋-------再寫函數體
2、函數的分類
內建函數:無須定義,python解譯器都弄好了
如
print(len(‘hfgsgj00‘)) #求長度print(max([1,2,3,4])) #最大值print(min([54,778,65,7865])) #最小值print(sum([12,4864,5])) #求和
自訂函數:
def mylen(): pass
3、傳回值
傳回值:return(返回)後的那個數就叫傳回值
return與函數而言有三種形式的返回
1,沒有傳回值------就是不寫return的情況下,函數預設返回None,唯寫return後沒有傳回值函數也預設返回None
2,只返回一個值--------後跟一個傳回值,可以跟任意類型的值
3,返回多個值-------return後可以跟多個任意類型的傳回值,返回的值是以元群組類型
注;如果在函數中有多個return,當函數執行時只執行第一個return,執行完第一個return函數結束執行
二、參數
1,形參:形式參數,在函數定義時接受的值
參數種類與定義;
1、預設參數:設定預設值
2、位置參數:按位置順序一一對應傳參
3、動態參數:*arges接受一個或多個參數,群組成員組, **kwargs接受多個關鍵字參數,並組成字典類型
2,實參:真實存在的值,在函數調用時傳入的值
1,按位置傳參:按照位置一一對應傳入參數
def func(x,y): print(x) print(y)func(10,20)
2、按關鍵字傳參:就是以變數的形式和賦值的形式傳參
def func(x,y): print(x) print(y) func(y=10,x=20)
三,空間命名和範圍
1、三種空間命名(命名空間載入由硬碟到記憶體)
1,局部空間命名:程式運行中,調用時才載入
2、全域空間命名:程式運行中,從上到下載入
3、內建空間命名:運行程式前載入
2、空間命名的取值(從內往外取值)
1,局部調用時: 局部空間-------全域空間---------內建空間
2,全域調用時:全域空間-------內建空間
3、範圍:命名空間和範圍是分不開的,因為範圍的劃才得到的命名空間
1,全域作範圍:全域生效,包含內建名稱空間和全域名稱空間,在檔案的任何位置都能別應用
2,局部範圍:局部空間名稱,只能在局部範圍之內才會生效
四,函數名本質
函數名本質就是函數的記憶體位址
1,可以被應用
2、可以當做函數的參數和傳回值
3,可以被當做容器類型的元素
五,閉包
閉包函數:內建函式包含對外部範圍而非全域範圍名字的引用,該內建函式被稱為閉包函數-------函數內部定義的函數稱為內建函式
六 ,裝飾器
1,裝飾器的形成過程
文法糖、帶參數的裝飾器、hold的住所有函數、帶傳回值的裝飾器
定義:裝飾器就是一個閉包函數
功能:在不修改原函數及其調用方式的情況下對函數的功能進行擴充
2,裝飾器的開放封閉原則
對擴充是開放的,對修改是封閉的
3、裝飾器的主要功能和裝飾器的固定結構
裝飾器的主要功能:在不改變調用方式的基礎上在函數前後加功能
裝飾器的固定結構
def time(func): def inner(*args,**kwargs): #函數執行之前要做的 ret=func(*args,**kwargs) #函數執行之後要做的 return ret return inner
4,帶參數的裝飾器
def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print(‘‘‘執行函數之前要做的‘‘‘) re = func(*args,**kwargs) if flag: print(‘‘‘執行函數之後要做的‘‘‘) return re return inner return timer @outer(False) def func(): print(111) func()
5、多個裝飾器裝飾一個函數
def wrapper1(func): def inner(): print(‘wrapper1 ,before func‘) func() print(‘wrapper1 ,after func‘) return inner def wrapper2(func): def inner(): print(‘wrapper2 ,before func‘) func() print(‘wrapper2 ,after func‘) return inner @wrapper2 @wrapper1 def f(): print(‘in f‘) f()
python-- 函數