1. 程式人生 > >走進Python世界(10)----函式的引數

走進Python世界(10)----函式的引數

函式的引數

定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需瞭解。

Python的函式定義非常簡單,但靈活度卻非常大。除了正常定義的必選引數外,還可以使用預設引數、可變引數和關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的程式碼。

def sum(x,y):
    sum=x+y;
    return sum;

預設引數在後,否則Python的直譯器會報錯

def sum(x,y=4):
    sum=x+y;
    return
sum;

預設引數很有用,但使用不當,也會掉坑裡。預設引數有個最大的坑

先定義一個函式,傳入一個list

def add(L=[]):
    L.append('A');
    return L;

輸出結果:

>>> add(L=[1,2,3])
[1, 2, 3, 'A']
>>> add()
['A']
>>> add()
['A', 'A']
>>> 

預設引數是[],但是函式似乎每次都“記住了”上次添加了’A’後的list。

def add(L=None):
    if L is
None: L=[]; L.append('A'); return L;

為什麼要設計str、None這樣的不變物件呢?因為不變物件一旦建立,物件內部的資料就不能修改,這樣就減少了由於修改資料導致的錯誤。此外,由於物件不變,多工環境下同時讀取物件不需要加鎖,同時讀一點問題都沒有。我們在編寫程式時,如果可以設計一個不變物件,那就儘量設計成不變物件。

可變引數

在Python函式中,還可以定義可變引數。顧名思義,可變引數就是傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個。
請計算a2 + b2 + c2 + ……。

def calc2
(*numbers):
sum = 0 for n in numbers: sum = sum + n * n return sum

定義可變引數和定義一個list或tuple引數相比,僅僅在引數前面加了一個*號。在函式內部,引數numbers接收到的是一個tuple,因此,函式程式碼完全不變。但是,呼叫該函式時,可以傳入任意個引數,包括0個引數:

>>> calc2()
0
>>> 

如果已經有一個list或者tuple,要呼叫一個可變引數怎麼辦?可以這樣做:

>>> calc2(*nums)
14
>>> 

*nums表示把nums這個list的所有元素作為可變引數傳進去。這種寫法相當有用,而且很常見。

關鍵字引數

可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為一個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為一個dict。

引數組合

相關推薦

走進Python世界10----函式引數

函式的引數 定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需瞭解。 Python的函式定義非常簡單,但靈活度卻

走進Python世界9----函式

函式呼叫 Python內建了很多有用的函式,我們可以直接呼叫。也可以在互動式命令列通過help(abs)檢視abs函式的幫助資訊。 >>> help(abs) Help on built-in function abs in modul

走進Python世界4----字串

Python入門教程推薦書(點選下載) 在最新的Python 3版本中,字串是以Unicode編碼的,也就是說,Python的字串支援多語言 Python提供了ord()函式獲取字元的整數表示,chr()函式把編碼轉換為對應的字元 由於Python的字

Python基礎10:返回函式,閉包以及裝飾器之間那些糾纏不清的關係

一:返回函式 定義:函式可以作為另一個函式的返回值。 理論來源:函式可以巢狀定義。 def fun1(li): def fun2(): return sum(li) return fun2 呼叫fun1函式,返回的是一個一個fun2例項。

Python基礎10分解質因數

pen [] 基礎 app 分解質因數 pytho 分解 bsp python import mathsu=[]for i in range(100,1000): a=i/100 b=(i-100*a)/10 #b=i/10%10 c=i-100

python基礎10--模塊

年月日 時間 mda 過程 完成 字符串格式化 etime 日期 模塊介紹 1.模塊介紹 模塊,用一坨代碼實現了某個功能的代碼集合 類似於函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個復雜的功能來說,可

python學習函式

實現特定功能的一坨程式碼,為了提高程式碼的複用性;用def定義,必須呼叫才會執行 入參的時候為形參(變數);呼叫時傳的為實參;在函式裡定義的變數為區域性變數,只能在函式中使用;return 返回值 函式中幾種引數:位置引數、預設值引數、可變引數(*args)、關鍵字引

《零基礎入門學習Python10--列表:一個打了激素的陣列

  前言 有時候我們需要把一些東西暫時儲存起來,因為他們有著一些直接或間接的聯絡,我們需要把它們放在某個組或者集合中,未來可能用得上。 很多接觸過程式設計的朋友都知道,都接觸過陣列這個概念,那麼陣列這個概念事實上很簡單,把一大堆同總型別資料挨個擺在一塊,然後通過陣列的下標進行索

《零基礎入門學習Python19--函式:我的地盤聽我的

前言 接下來仔細講講函式與過程和區域性變數和全域性變數的作用範圍 知識點 函式與過程 在許多程式語言中,函式(function)是有返回值的,過程(procedure)是簡單、特殊並且沒有返回值的。而在Python中,嚴格來說只有函式沒有過程。  例如:

《零基礎入門學習Python18--函式:靈活即強大

前言 上一節課我們基本介紹Python函式的用法,這一節課我們主要針對函式的引數進行進一步的深入學習。 知識點 形參(parameter)和實參(argument) >>> def MyFirstFunction(name): '函式定義過程中的n

《零基礎入門學習Python17--函式Python的樂高積木

前言 小甲魚的話——相信大家小時候都玩過神奇的樂高積木, 只要通過想象力和創造力我們可以拼湊很多神奇的東西,那麼隨著我們學習的深入,我們編寫的Python程式碼也將日益增加,並且也越來越複雜,  所以呢,我們需要找尋一種方法,對這些複雜的方法進行重新的組織,目的就是為了使程式碼的邏輯更

《零基礎入門學習Python22--函式:遞迴是神馬

前言 普通程式設計師用迭代,天才程式設計師用遞迴 知識點 遞迴是神馬?  遞迴是屬於演算法的範疇。  遞迴就是函式呼叫自身的一種行為。 >>> def g(): return g() >>> g()

《零基礎入門學習Python21--函式:lambda表示式內建BIF filte()和map()

前言 接下來學習怎麼建立匿名函式 知識點 lambda 表示式 Python 允許使用lambda關鍵字建立匿名函式 lambda 函式怎麼使用?  單個引數 >>> def add(x): retur

《零基礎入門學習Python20--函式:內嵌函式和閉包

前言 之前我們講了函式的一些相關知識,瞭解了什麼是全域性變數什麼是區域性變數,接下來我們看看怎麼將區域性變數變為全域性變數。還要將將內嵌函式的相關概念 知識點 global關鍵字  使用global關鍵字,可以修改全域性變數: >>> count

Python3函式介紹——函式引數

1.引數型別 ①位置引數 def hello_1(greeting,name): print(’%s,%s’%(greeting,name)) hello_1(‘Hi’,‘John’) Hi,John ②關鍵字引數 ③預設引數

Python學習10——常用的內建模組

跳過程序執行緒 跳過正則 1、datetime:處理日期和時間的標準庫 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431937554888869fb52

Python學習2——函式

1、函式的引數 (1)要注意定義可變引數和關鍵字引數的語法: *args是可變引數,args接收的是一個tuple; **kw是關鍵字引數,kw接收的是一個dict。 (2)呼叫函式時如何傳入可變引數和關鍵字引數的語法: 可變引數既可以直接傳入:func(1, 2, 3),又

Python入門函式與模組

Python 函式 定義一個函式 你可以定義一個由自己想要功能的函式,以下是簡單的規則: 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號()。 任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。 函式的第一行語句可以選擇性地使

重拾Python學習----------函式

函式定義 def function: return pass 函式可以同時返回多個值,但其實就是一個tuple。 函式引數 位置引數 def power(x, n) 預設引數 def po

《笨辦法學Python13---函式概念:迴圈VS遞迴,尾遞迴

參考文件 http://www.cnblogs.com/liunnis/articles/4604967.html https://blog.csdn.net/tianpingxian/article/details/80821504 https://blog.csdn.net/tc