導航:首頁 > 編程語言 > python函數的輸入參數是什麼

python函數的輸入參數是什麼

發布時間:2023-09-05 06:06:00

『壹』 python函數高級

一、函數的定義

函數是指將一組語句的集合通過一個名字(函數名)封裝起來,想要執行這個函數,只需要調用函數名即可

特性:

減少重復代碼

使程序變得可擴展

使程序變得易維護

二、函數的參數

2.1、形參和實參數

形參,調用時才會存在的值

實慘,實際存在的值


2.2、默認參數

定義:當不輸入參數值會有一個默認的值,默認參數要放到最後


2.3、 關鍵參數

定義: 正常情況下,給函數傳參數要安裝順序,不想按順序可以用關鍵參數,只需要指定參數名即可,(指定了參數名的就叫關鍵參數),但是要求是關鍵參數必須放在位置參數(以位置順序確定對應的參數)之後


2.4、非固定參數

定義: 如你的函數在傳入參數時不確定需要傳入多少個參數,就可以使用非固定參數

# 通過元組形式傳遞

# 通過列表形式傳遞

# 字典形式(通過k,value的方式傳遞)

# 通過變數的方式傳遞


三、函數的返回值

作用:

返回函數執行結果,如果沒有設置,默認返回None

終止函數運行,函數遇到return終止函數


四、變數的作用域

全局變數和局部變數

在函數中定義的變數叫局部變數,在程序中一開始定義的變數叫全局變數

全局變數作用域整個程序,局部變數作用域是定義該變數的函數

當全局變數與局部變數同名是,在定義局部變數的函數內,局部變數起作用,其他地方全局變數起作用

同級的局部變數不能互相調用

想要函數里邊的變數設置成全局變數,可用global進行設置


五、特殊函數

5.1、嵌套函數

定義: 嵌套函數顧名思義就是在函數里邊再嵌套一層函數


提示 在嵌套函數里邊調用變數是從里往外依次調用,意思就是如果需要調用的變數在當前層沒有就會去外層去調用,依次內推

匿名函數

基於Lambda定義的函數格式為: lambda 參數:函數體

參數,支持任意參數。


匿名函數適用於簡單的業務處理,可以快速並簡單的創建函數。

# 與三元運算結合


5.3、高階函數

定義:變數可以指向函數,函數的參數可以接收變數,那麼一個函數就可以接收另一個函數作為參數,這種函數稱之為高階函數 只需要滿足一下任意一個條件,即是高階函數

接收一個或多個函數作為輸入

return返回另一個函數

5.4、遞歸函數

定義:一個函數可以調用其他函數,如果一個函數調用自己本身,這個函數就稱為遞歸函數

在默認情況下Python最多能遞歸1000次,(這樣設計師是為了防止被內存被撐死)可以通過sys.setrecursionlimit(1500)進行修改

遞歸實現過程是先一層一層的進,然後在一層一層的出來

必須有一個明確的條件結束,要不然就是一個死循環了

每次進入更深層次,問題規模都應該有所減少

遞歸執行效率不高,遞歸層次過多會導致站溢出

# 計算4的階乘 4x3x2x1

# 列印數字從1-100


5.5、閉包現象

定義:內層函數調用外層函數的變數,並且內存函數被返回到外邊去了


閉包的意義:返回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域,這使得,該函數無論在何處調用,優先使用自己外層包裹的作用域

『貳』 python 函數參數的類型

1. 不同類型的參數簡述
#這里先說明python函數調用得語法為:

復制代碼
代碼如下:

func(positional_args,
keyword_args,
*tuple_grp_nonkw_args,
**dict_grp_kw_args)

#為了方便說明,之後用以下函數進行舉例
def test(a,b,c,d,e):

print a,b,c,d,e

舉個例子來說明這4種調用方式得區別:

復制代碼
代碼如下:

#
#positional_args方式
>>>
test(1,2,3,4,5)
1 2 3 4 5

#這種調用方式的函數處理等價於
a,b,c,d,e = 1,2,3,4,5
print a,b,c,d,e

#
#keyword_args方式
>>>
test(a=1,b=3,c=4,d=2,e=1)
1 3 4 2 1

#這種處理方式得函數處理等價於
a=1
b=3
c=4
d=2
e=1
print a,b,c,d,e

#
#*tuple_grp_nonkw_args方式
>>>
x = 1,2,3,4,5
>>> test(*x)
1 2 3 4
5

#這種方式函數處理等價於

復制代碼
代碼如下:

a,b,c,d,e = x
print
a,b,c,d,e
#特別說明:x也可以為dict類型,x為dick類型時將鍵傳遞給函數
>>> y
{'a': 1,
'c': 6, 'b': 2, 'e': 1, 'd': 1}
>>> test(*y)
a c b e d

#
#**dict_grp_kw_args方式
>>>
y
{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}
>>> test(**y)
1 2 6
1 1

#這種函數處理方式等價於
a = y['a']
b = y['b']
... #c,d,e不再贅述
print
a,b,c,d,e

2.
不同類型參數混用需要注意的一些細節
接下來說明不同參數類型混用的情況,要理解不同參數混用得語法需要理解以下幾方面內容.

首先要明白,函數調用使用參數類型必須嚴格按照順序,不能隨意調換順序,否則會報錯. 如 (a=1,2,3,4,5)會引發錯誤,;
(*x,2,3)也會被當成非法.

其次,函數對不同方式處理的順序也是按照上述的類型順序.因為#keyword_args方式和**dict_grp_kw_args方式對參數一一指定,所以無所謂順序.所以只需要考慮順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的順序.因此,可以簡單理解為只有#positional_args方式,#*tuple_grp_nonkw_args方式有邏輯先後順序的.

最後,參數是不允許多次賦值的.

舉個例子說明,順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的邏輯先後關系:

復制代碼
代碼如下:

#只有在順序賦值,列表賦值在結果上存在羅輯先後關系
#正確的例子1
>>> x =
{3,4,5}
>>> test(1,2,*x)
1 2 3 4 5
#正確的例子2
>>>
test(1,e=2,*x)
1 3 4 5 2

#錯誤的例子
>>> test(1,b=2,*x)
Traceback (most recent call
last):
File "<stdin>", line 1, in <mole>
TypeError: test()
got multiple values for keyword argument 'b'

#正確的例子1,處理等價於
a,b = 1,2 #順序參數
c,d,e = x #列表參數
print a,b,c,d,e

#正確的例子2,處理等價於
a = 1 #順序參數
e = 2 #關鍵字參數
b,c,d = x #列表參數

#錯誤的例子,處理等價於
a = 1 #順序參數
b = 2 #關鍵字參數
b,c,d = x
#列表參數
#這里由於b多次賦值導致異常,可見只有順序參數和列表參數存在羅輯先後關系

函數聲明區別

理解了函數調用中不同類型參數得區別之後,再來理解函數聲明中不同參數得區別就簡單很多了.

1. 函數聲明中的參數類型說明

函數聲明只有3種類型, arg, *arg , **arg 他們得作用和函數調用剛好相反.
調用時*tuple_grp_nonkw_args將列表轉換為順序參數,而聲明中的*arg的作用是將順序賦值(positional_args)轉換為列表.
調用時**dict_grp_kw_args將字典轉換為關鍵字參數,而聲明中**arg則反過來將關鍵字參數(keyword_args)轉換為字典.
特別提醒:*arg
和 **arg可以為空值.

以下舉例說明上述規則:

復制代碼
代碼如下:

#arg, *arg和**arg作用舉例
def
test2(a,*b,**c):
print a,b,c
#
#*arg 和
**arg可以不傳遞參數
>>> test2(1)
1 () {}
#arg必須傳遞參數
>>>
test2()
Traceback (most recent call last):
File "<stdin>", line 1,
in <mole>
TypeError: test2() takes at least 1 argument (0 given)

#
#*arg將順positional_args轉換為列表
>>>
test2(1,2,[1,2],{'a':1,'b':2})
1 (2, [1, 2], {'a': 1, 'b': 2})
{}
#該處理等價於
a = 1 #arg參數處理
b = 2,[1,2],{'a':1,'b':2} #*arg參數處理
c =
dict() #**arg參數處理
print a,b,c

#
#**arg將keyword_args轉換為字典
>>>
test2(1,2,3,d={1:2,3:4}, c=12, b=1)
1 (2, 3) {'c': 12, 'b': 1, 'd': {1: 2, 3:
4}}
#該處理等價於
a = 1 #arg參數處理
b= 2,3 #*arg參數處理
#**arg參數處理
c =
dict()
c['d'] = {1:2, 3:4}
c['c'] = 12
c['b'] = 1
print
a,b,c

2. 處理順序問題

函數總是先處理arg類型參數,再處理*arg和**arg類型的參數.
因為*arg和**arg針對的調用參數類型不同,所以不需要考慮他們得順序.

復制代碼
代碼如下:

def test2(a,*b,**c):
print
a,b,c
>>> test2(1, b=[1,2,3], c={1:2, 3:4},a=1)
Traceback (most
recent call last):
File "<stdin>", line 1, in
<mole>
TypeError: test2() got multiple values for keyword argument
'a'
#這里會報錯得原因是,總是先處理arg類型得參數
#該函數調用等價於
#處理arg類型參數:
a = 1
a = 1
#多次賦值,導致異常
#處理其他類型參數
...
print a,b,c

>>> def foo(x,y):
... def bar():
... print
x,y
... return bar
...
#查看func_closure的引用信息
>>> a =
[1,2]
>>> b = foo(a,0)
>>>
b.func_closure[0].cell_contents
[1, 2]
>>>
b.func_closure[1].cell_contents
0
>>> b()
[1, 2] 0

#可變對象仍然能被修改
>>> a.append(3)
>>>
b.func_closure[0].cell_contents
[1, 2, 3]
>>> b()
[1, 2, 3] 0

『叄』 python 函數參數的類型

可以是列表。實際上,"參數可以是什麼類型"取決於函數體中定義的操作。只要該類型支持這個過程就可以。
比如
def
mmy(a):
return
a*2
可以接受整數或列表作為參數,因為列表也可以實現乘法。
想要每個元素乘2的話,
a
=
[i
*
2
for
i
in
a]

『肆』 簡述python函數中參數的幾種形態

在調用函數時,通常會傳遞參數,函數內部的代碼保持不變,針對 不同的參數處理不同的數據。

有位置傳參、關鍵字傳參、默認值參數、多值參數等。

1、參數傳遞

形參和實參:

形參:定義 函數時的 參數變數
實參:調用 函數時,使用的參數變數

參數傳遞的過程,就是 把實參的引用 傳遞給 形參 ,使用實參的值來執行函數體的過程。

在 Python 中,函數的 實參/返回值 都是是靠 引用 來傳遞來的

2、位置實參

按照參數位置,依次傳遞參數,這是最普通的方式。

『伍』 Python的函數和參數

parameter 是函數定義的參數形式
argument 是函數調用時傳入的參數實體。

對於函數調用的傳參模式,一般有兩種:

此外,

也是關鍵字傳參

python的函數參數定義一般來說有五種: 位置和關鍵字參數混合 僅位置參數 僅關鍵字參數 可變位置參數 可變關鍵字參數 。其中僅位置參數的方式僅僅是一個概念,python語法中暫時沒有這樣的設計。
通常我們見到的函數是位置和關鍵字混合的方式。

既可以用關鍵字又可以用位置調用

這種方式的定義只能使用關鍵字傳參的模式

f(*some_list) 與 f(arg1, arg2, ...) (其中some_list = [arg1, arg2, ...])是等價的

網路模塊request的request方法的設計
多數的可選參數被設計成可變關鍵字參數

有多種方法能夠為函數定義輸出:

非常晦澀

如果使用可變對象作為函數的默認參數,會導致默認參數在所有的函數調用中被共享。
例子1:

addItem方法的data設計了一個默認參數,使用不當會造成默認參數被共享。
python裡面,函數的默認參數被存在__default__屬性中,這是一個元組類型
例子2:

在例子1中,默認參數是一個列表,它是mutable的數據類型,當它寫進 __defauts__屬性中時,函數addItem的操作並不會改變它的id,相當於 __defauts__只是保存了data的引用,對於它的內存數據並不關心,每次調用addItem,都可以修改 addItem.__defauts__中的數據,它是一個共享數據。
如果默認參數是一個imutable類型,情況將會不一樣,你無法改變默認參數第一次存入的值。

例子1中,連續調用addItem('world') 的結果會是

而不是期望的

『陸』 python怎麼查看函數有什麼參數

在開發中我們可以藉助於相關插件或使用Python內置函數"help()」來查看某個函數的參數說明,以查看內置函數sorted()為例:

『柒』 Python參數類型

上一期我們學習參數傳遞怎麼傳遞,也了解了參數的幾種類型。

首先,我們再來回顧一下,形參和實參:

形參是在定義函數時定義的,放在函數名後面的圓括弧里,可為空

實參是調用函數時為形參傳入具體的參數值

簡單總結一下,誰調用函數,誰就負責傳入參數。

好吶,本期我們來詳細學習函數幾種參數類型,大綱如下:

python函數的參數名是無意義的,Python允許在調用函數時通過通過名字來傳入參數值。

位置參數:按照形參位置傳入的參數

調用函數時,實參默認按位置順序傳遞的。同時實參個數也要和形參匹配

舉一個小栗子

如果實參的個數與形參不匹配時,調用函數運行就會報錯

Python中,形參與調用函數緊密聯系在一起的。

關鍵字參數:調用函數時,使形參名稱來傳遞參數,形式為「形參名=實參」

關鍵字參數,又叫命名參數,傳遞時無需考慮參數位置和順序

舉一個小栗子

默認參數:定義函數時,我們可以為形參提前設置具體的值。

在定義函數時,默認參數要放到位置等其他參數後面

在調用函數時,默認參數是可選的。如果傳入新值,則會覆蓋默認值

舉一個小栗子

注意,默認值不能位於位置參數前面,否則程序會報錯誤

不定長參數又名可變參數。

不定長參數指的是可變數量的參數,分兩種情況:

如果不定長參數後面,可以新增參數嗎?

我們通過例子來看,會發生什麼?

運行上面的程序,Python解釋器會報錯

原因是,形參a已經是不定長參數,我們調用的test(2,3,4)傳入的三個實參,系統自動把它們屬於形參a的值,形參b 和形參c就等於沒有值傳入,這時候系統就認為,調用函數的對象,參數沒有傳夠。

為了解決這一報錯,python引入了 強制命名參數

規定,調用不定參數後面有跟位置參數的函數時,傳入給位置參數時,必須要強制命名參進行傳參。

逆向參數收集針對的對象傳入函數的實參

調用函數時,如果實參是元組,列表或者字典,通過在實參前面加入星號,可以自動把元素進行隔開,然後再轉入給函數進行處理

舉一個小栗子

本期,我們詳細學習了參數幾種類型,為後面我們學習函數,打好基礎。

實踐是檢驗真理的過程,大家多動手練習練習,會有不一樣的奇妙旅程~

好吶,以上是本期內容,歡迎大佬們評論區指正~

『捌』 python 函數參數 是什麼意思

Python 函數定義以及參數傳遞
1.函數定義
#形如def func(args...):
doSomething123

以關鍵字def 開頭,後面是函數名和參數下面是函數處理過程。
舉例:
def add( a, b ):
return a+b12

參數可以設定默認值,如:
def add( a, b=10 ): #注意:默認值參數只會運算一次
return a+b12

默認值參數只會運算一次是什麼意思?
def func( a, b=[] ): #b的默認值指向一個空的列表,每次不帶默認值都會指向這塊內存
b.append(a) return b

print(func(1))#向默認的空列表裡加入元素1 ,默認列表裡已經是[1]print(func(2))#向默認的列表裡加入元素2,默認列表裡已經是[1,2]print(func(3,[]))#向b指向的空列表裡加入元素1 ,默認列表裡還是[1,2]print(func(4))#向默認的列表裡加入元素4,默認列表裡已經是[1,2,4]'''
結果:
[1]
[1, 2]
[3]
[1, 2, 4]
'''12345678910111213141516

這下明白為什麼默認參數只計算一次了吧,函數參數不傳遞時默認值總是指向固定的內存空間,就是第一次計算的空間。
2.參數傳遞
def func(a, b):
print('a=%d, b=%d' % (a,b) )12

在使用函數時可以如下方式,結果都是相同的
func(10,20) #不使用參數名,需要按參數順序傳遞func(a=10,b=20) #使用參數名可以不按順序傳遞func(b=20,a=10)#結果:a=10, b=20a=10, b=20a=10, b=201234567

如果函數定義形式如下方式:
def func(*args): #這種定義會把傳遞的參數包成元組
print(args,type(args))

func(10,20)#結果:#(10, 20) <class 'tuple'>1234567

舉一個和上述過程相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )

a = (10, 20)
func(*a) #在調用函數使用`*`則會把元組解包成單個變數按順序傳入函數#結果:a=10, b=20123456

總結:*號在定義函數參數時,傳入函數的參數會轉換成元組,如果 *號在調用時則會把元組解包成單個元素。
另一種定義:
def func(**kw):#使用**定義參數會把傳入參數包裝成字典dict
print(kw, type(kw) )

func(a=10,b=20)#這種函數在使用時必須指定參數值,使用key=value這種形式#結果:{'b': 20, 'a': 10} <class 'dict'>12345

相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )

d = {'a':10, 'b':20 }
func(**d) #在調用時使用**會把字典解包成變數傳入函數。12345
def func(*args, **kw):#這種形式的定義代表可以接受任意類型的參數
print(args,kw )12

總結:**號在定義函數參數時,傳入函數的參數會轉換成字典,如果 **號在調用時則會把字典解包成單個元素。
lambda表達式
lambda表達式就是一種簡單的函數
形如 f = lambda 參數1,參數2: 返回的計算值
例如:
add = lambda x,y: x+y
print(add(1,2))'''
結果:3
'''12345

閱讀全文

與python函數的輸入參數是什麼相關的資料

熱點內容
大型雲伺服器有哪些 瀏覽:463
解壓版三國街機 瀏覽:421
去中心化app裡麵包含什麼 瀏覽:948
密鑰安裝命令行 瀏覽:505
文獻編譯英文 瀏覽:659
php調用瀏覽器 瀏覽:527
數控車床編程初學實例 瀏覽:949
cad中篩選命令是什麼 瀏覽:800
數控銑床法蘭克編程 瀏覽:330
怎麼樣分解壓縮包圖標 瀏覽:619
php兩年工作經驗簡歷 瀏覽:765
怎麼提前解壓房貸 瀏覽:699
反詐宣傳app哪裡可以拿到用戶資料 瀏覽:856
華為交換機命令配置 瀏覽:11
電機pid演算法實例c語言 瀏覽:972
安裝ue5未找到金屬編譯器 瀏覽:964
l1壓縮性骨折微創手術 瀏覽:615
看電腦配置命令 瀏覽:109
單片機調用db數值偏移量 瀏覽:446
賓士smart車型壓縮機功率 瀏覽:529