函式的高階

2022-09-11 14:24:32 字數 2081 閱讀 1155

一、函式引數—動態傳參

1、動態的接收位置引數

引數位置編寫* 表示接收任意內容,有多個引數傳進去,收到的內容是元組tuple

def func(*food):

print

(food)

func("面

","公尺飯

","麵包

","饅頭

")

先位置引數,後動態引數

def chi(a,b,*food):

print

(a,b,food)

chi("公尺飯

","麵條

","魚

","肉

","小菜

")

預設值引數

def chi(a,b,*food,c="

哇哈哈"

):

print

(a,b,food,c)

chi("臘腸

","甜點

","油條

","大麵包

") #

預設值生效

2、動態接收關鍵字引數

在python中使用**來接收動態關鍵字引數

def fun(**args):

print

(args)

fun(a=1,b=2,c=3,d=4)

在上面的程式中接收到是:字典

最終的順序:

位置引數》*args>預設值引數》**kwargs

這四種引數可以任意使用

如果想接收所有的引數,用*args和**kwargs

def func(*args,**kwargs):

print

(args,kwargs)

func("小明

","18

",a=1,b=2)

動態引數的另一種傳參方式

def func(*args):

print

(args)

lst = [1,2,3,4,5]

func(lst[0],lst[1],lst[2],lst[3],lst[4])

在實參位置上給乙個序列,列表,可迭代物件前面加*表示把這個序列安位置打散

def func(*args):

print

(args)

lst = [1,2,3,4,5]

func(*lst)

在形參的位置上,加*表示聚合

如果是乙個字典,也可以進行打散,但需要兩個*

def func(**kwargs):

print

(kwargs)

dic =

func(**dic)

3、函式的注釋

def

func(a,b):

'''這裡是函式的注釋,解釋一下這個函式是幹什麼的

:param a: 引數a是幹什麼的

:param b: 引數b是幹什麼的

:return: 返回的是啥

'''print(a,b)

二、命名空間

1、全域性命名空間——我們在py檔案中,在函式外宣告的是變數叫全域性命名空間

2、區域性命名空間——在函式中宣告的變數叫區域性命名空間

3、內建命名空間——python直譯器為我們提供的名字,如:list  tuple  str  int  都是內建命名空間

載入順序

內建命名空間、全域性命名空間、區域性命名空間(函式被執行的時候)

取值順序

區域性命名空間、全域性命名空間、內建命名空間

作用域1、全域性作用域:全域性命名空間+內建命名空間

2、區域性作用域:區域性命名空間

我們可以通過globals()檢視全域性作用域的內容,也可以用locals()檢視區域性作用域的內容

三、函式的巢狀

global表示:不在使用區域性作用域中的內容,而改用全域性作用域的變數

nonlocal表示:在區域性作用域中,使用父級區域性命名空間的變數

函式的高階

def func a1,a2,a3 print a1,a2,a3 func 1,3,4 a1 1,a2 3,a3 4def func a1,a2 print a1,a2 func a2 99,a1 2 關鍵字傳引數和位置傳參可以混合使用 位置傳入的引數 關鍵字引數在後 總引數個數 def func1...

函式的高階

目錄命名空間 在python直譯器開始執 之後,就會在記憶體中開闢乙個空間,每當遇到乙個變 的時候,就把變 名和值之間的關係記錄下來,但是當遇到函式定義的時候,直譯器只是把函式名讀入記憶體,表示這個函式存在 至於函式內部的變 和邏輯,直譯器是不關心的.也就是說一開始的時候函式只是載入進來,僅此而已,...

函式的高階

函式高階 動態引數 形參 位置引數 動態位置引數 預設引數 動態預設引數 實參 位置引數 動態位置引數 關鍵字引數 動態關鍵字引數 函式的注釋 作用域 全域性作用域 內建 全域性 全域性作用域 區域性作用域 函式內的就是區域性作用域 函式的巢狀 global nonlocal global 在區域性...