python語法基礎 4 函式與函式引數

2022-06-09 03:27:06 字數 4210 閱讀 7123

關鍵字def

函式名 ():

函式體

#例子如下

func():

函式體

關鍵字return

return的內容返回函式的呼叫

return下方**不執行,可以終止函式,不可以終止終止迴圈

return 返回多個內容的時候是元祖形式

return 沒有寫返回值的時候是none 不寫返回值時也是none

形參:是指函式定義中括號裡面的引數

實參:函式的呼叫括號裡的是實參

傳參:是將實參傳遞給形參的過程

混合引數:位置引數和關鍵字引數在一起的

優先順序位置引數》關鍵字引數

變數=條件成立 條件判斷 條件不成立 結果

def a(a,b):

return a if a>b else b

print(a(1,2))

*args是萬能位置引數

def func(a,b,*args):

print(a,b,args) #args傳遞的引數是元祖型別

func(1,2,3,45,['skyrabbit'])

#結果如下

1 2 (3, 45, ['skyrabbit'])

def func(a,b,**kwargs,):

print(a,b,kwargs) #args傳遞的引數是字典型別

func(3,4,args=16,cs=5)

#結果如下

3 4

位置引數》動態引數》預設引數(關鍵字引數)>動態關鍵字引數

萬能傳參:動態位置引數,動態關鍵字引數

內建空間 例子print() input()

全域性空間 在當前py檔案需要開闢的空間存放在全域性空間

區域性空間 函式中開闢的空間就是區域性空間

載入順序

內建空間》全域性空間》區域性空間

取值順序

區域性空間》全域性空間》內建空間

全域性作用域:內建空間+全域性空間

區域性作用域: 區域性空間

不管子啊什麼位置,只要函式名+()就是呼叫此函式

函式呼叫執行後,函式體中開闢的空間就自動銷毀了

global關鍵字 宣告修改,全域性變數

nonlocal 關鍵字 在外層函式中,在修改區域性空間的變數值,空間不涉及全域性空間,只修改距離它最近一層,直到找到最外層函式.

檢視函式的注釋

格式如下

函式名 :doc

檢視函式的名字

格式如下

函式名:name

1.可以當做值被賦值給變數

2.當做元素,存放在容器中

3.函式名可以當做函式的引數

4.函式名可以當做函式的返回值

1.支援f

2.表示式

3.函式呼叫

4.數字計算

字典取值

匿名函式 lambda

lambda 形參:返回值 - lambda x:x

形參可以不寫,返回值必須寫 返回值只能是乙個資料型別

匿名函式的名字叫做 lambda

形參的第三種:動態引數

形參的順序: 位置引數 , 動態引數 , 預設引數

位置引數 > *args(動態位置引數) > 預設值引數 > **kwargs(動態預設引數)

這四種引數可以任意的使用

內建命名空間

全域性命名空間

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

區域性命名空間

全域性命名空間

內建命名空間

內建命名空間--> 存放python直譯器為我們提供的名字, list, tuple, str, int這些都是內建命名空間

全域性命名空間--> 我們直接在py檔案中, 函式外宣告的變量都屬於全域性命名空間

區域性命名空間--> 在函式中宣告的變量會放在區域性命名空間

1.動態接受位置引數

首先我們來回顧下位置引數

def eat(a,b,c):

print('我想吃%s%s%s'%(a,b,c))

eat('大公尺飯','中公尺飯','小公尺飯')

2.在引數位置用*表示接受任意引數

def eat(a,b,c):

print('我想吃%s%s%s'%(a,b,c))

eat('大公尺飯','中公尺飯','小公尺飯')

3.動態接收引數的時候要注意: 動態引數必須在位置引數後面

def eat(*args,a,b):

print('我想吃',args,a,b)

eat('大公尺飯','中公尺飯','小公尺飯')

結果:typeerror: eat() missing 2 required keyword-only arguments: 'a' and 'b'

# eat函式在呼叫的時候發現缺少倆個位置引數沒有進行傳遞

#正確操作

def eat(a,b,*args):

print('我想吃',args,a,b)

eat('大公尺飯','中公尺飯','小公尺飯')

結果:我想吃 ('小公尺飯',) 大公尺飯 中公尺飯

動態接收引數的時候要注意:動態引數必須在位置引數後面

4.預設值引數呢?

def eat(a,b,c='白菜',*args):

print('我想吃',a,b,c,args)

eat('豆腐','粉條','豬肉','大蔥')

結果:我想吃 豆腐 粉條 豬肉 ('大蔥',) # 我們定義好的白菜沒有生效,被豬肉給覆蓋了

我們發現預設值引數寫在動態引數前面,預設值的引數是不會生效的

def eat(a,b,*args,c='白菜'):

print('我想吃',a,b,args,c)

eat('豬肉','粉條','豆腐','大蔥')

結果:我想吃 豬肉 粉條 ('豆腐', '大蔥') 白菜 # 這樣預設引數就生效了

5.動態接收關鍵字引數

def func(**kwargs):

print(kwargs)

func(a=1, b=2, c=3)

結果:動態關鍵字引數最後獲取的是乙個dict字典形式

順序的問題, 在函式呼叫的時候, 如果先給出關鍵字引數, 則整個引數列表會報錯.

def func(a,b,c,d):

print(a,b,c,d)

func(1,2,c=3,4)

結果: file "d:/python_object/path2/test.py", line 806

func(1,2,c=3,4)

syntaxerror: positional argument follows keyword argument

關鍵引數必須要放在位置引數後邊,由於實參是這個順序,所以形參接收的時候也是這個順序.

也就是說位置引數必須在關鍵字引數前面.動態接收關鍵字引數也要在後面

6.如果想接收所有的引數:

def func(*args,**kwargs):

print(args,kwargs)

func(1,23,5,a=1,b=6)

#動態引數還可以這樣傳參:

lst = [1,4,7]

# 方法一

def func(*args):

print(args)

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

# 方法二

def func(*args):

print(args)

func(*lst)

# 在實參的位置上用*將lst(可迭代物件)按照順序打散

# 在形參的位置上用*把收到的引數組合成乙個元祖

7.字典也可以進行打散,不過需要**

dic = 

def func(**kwargs):

print(kwargs)

func(**dic)

global 表示. 不再使用區域性作用域中的內容了. 而改用全域性作用域中的變量

nonlocal 表示在區域性作用域中, 呼叫父級命名空間中的變量.

如果父級命名空間中沒有這個變數名,就繼續向上查詢.最多找到最外成的函式就結束了

Python基礎語法(4)

計算機利用資料有三種方式 直接使用 計算和加工 做判斷對於程式設計新手來講,掌握主要的資料型別是重中之重。學習了兩種新的資料型別 列表和字典,你會發現,它們比之前學過的 整數 浮點數 字串 更加高階,更具有 包容性 前面學的幾種型別,每次賦值只能儲存一條資料。如果需要使用很多資料的時候,就會很不方便...

Python基礎語法函式

python中的函式與數學中的函式不同,它不再只是公式,而是實實在在有著自己特定功能的 其實在潛移默化中我們已經有所接觸了。比如print 函式,range 函式,type 函式等。函式各式各樣,或簡單或複雜,但其本質卻好是相通的 給函式一些資料,函式進行處理,輸出你想要的東西。函式名後面的括號裡放...

python學習筆記 基礎語法4

python條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。可以通過下圖來簡單了解條件語句的執行過程 python程式語言指定任何非0和非空 null 值為true,0 或者 null為false。python 程式設計中 if 語句用於控制程式的執行,基本形式為 ...