Python函數基礎---參數、變數

來源:互聯網
上載者:User

標籤:輸出   enter   聲明   --   gpo   執行   glob   外部   src   

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

def sayhi( ):  # 函數名

    print(‘hello world‘)

sayhi( ) #調用函數 , 調用函數時要加上括弧(), 不加的話調用的是定義函數名的那個記憶體位址 

樣本:

#普通代碼:

a,b = 5,8  # 這句話的意思是給兩個變數a,b 分別賦值5和8, 即 a= 8, b=8

c= a**b

print(c)

#改成用函數寫:

def calc(x,y) :

    res = x**y

    return res #返回函數執行結果

c= calc(a,b)  #結果賦值給c變數

print(c)

 

特性:

1. 減少重複代碼

2. 使程式變得可擴充

3. 使程式變得易維護

 

函數參數:

參數能讓你的函數更靈活,還可以根據調用時傳參的不同來決定函數內部的執行流程

形參變數:

只有在被調用時才分配記憶體單元,在調用結束時,即可釋放所分配的記憶體單元。因此,形參只在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。

實參:

可以是常量、變數、運算式、函數等,無論實參是何種類型的量,在進行函數調用時,他們都必須有確定的值,以便把這些值傳送給形參,因此應預先用賦值、輸入等辦法使參數獲得確定值。

如:

def calc(x,y):    #x和y 就是形參

    res = x**y

    return res

c= calc(a,b)   #a和b就是實參

print(c)

 

預設參數:

如下面的程式:

發現country這個參數 基本都是“CN”,我們可以把country設定成預設參數,預設成CN。 這樣,這個參數在調用時你不指定,那就預設是CN,你指定了的話,就用你指定的值。

如:

註:預設參數的位置要放到位置參數(按順序的參數)後面,避免它影響其他的位置參數。

 

關鍵參數:

正常情況下,給函數傳參數要按順序,不想按順序就可以用關鍵參數,只需在調用時指定參數名即可(指定了參數名的參數就叫關鍵參數),但有一個要求,關鍵參數必須放在位置參數(以位置順序確定對應關係的參數)之後。

如下面的程式:

調用時可以這樣:

在調用時course、age、country都指定了,他們就是關鍵參數。指定了之後就可以按照關鍵參數指定的內容來調用函數,而不需要再根據位置來給形參賦值。

 

但調用時不能這樣:

因為‘PY’指定了參數名course,而22沒有指定參數名,它還是位置參數,關鍵參數必須放在位置參數後面。

也不能這樣:

因為22已經按照位置參數給age賦值成了22, 但後面的age=25又給age賦值了25,不能給同一個參數賦多個值

 

非固定參數:

如果你的函數在定義時不確定使用者想傳入多少個參數,就可以使用非固定參數。

def stu_register(name,age,*args):  # *args會把傳入的參數變成一個tuple(元祖)形式    print(name,age,args)stu_register(‘alex‘,22)# 輸出結果:# alex 22 ()   #後面這個()就是args,只是因為沒傳值,所以為空白stu_register(‘jack‘,32,‘CN‘,‘Python‘)# 輸出結果:# jack 32 (‘CN‘, ‘Python‘)  

 

還有一個是 **kwargs

def stu_register(name,age,*args,**kwargs):  # **kwargs會把傳入的多個參數變成一個字典形式    print(name,age,args,kwargs)stu_register(‘jack‘,32,‘CN‘,‘Python‘)# 輸出結果:# jack 32 (‘CN‘, ‘Python‘) {}   # 後面這個{}就是kwargs,只是因為沒有傳值,所以為空白stu_register(‘jack‘,32,‘CN‘,‘Python‘,gender=‘Male‘,province=‘Shandong‘)# 輸出結果:# jack 32 (‘CN‘, ‘Python‘) {‘gender‘: ‘Male‘, ‘province‘: ‘Shandong‘}

註: agrs: arguments ; kwargs: key word arguments。  如果形參中前面出現了 *,就變成元祖; 如果形參前面出現了 ** ,這個形參就變成了字典,也可以把一個字典(如:info)直接傳到kwargs裡面, 不過要在函數調用時在字典前面加上 **(如 **info)

另外,非固定參數不能放在位置參數後面,但關鍵參數可以位於*args這種非固定參數後面。

def stu_register(name,age,*args,gender):    print(name,age,args,gender)stu_register(‘jack‘,32,‘CN‘,‘Python‘,gender=‘male‘)# 輸出結果:# jack 32 (‘CN‘, ‘Python‘) male

 

 

函數傳回值:

函數外部的代碼要想擷取函數的執行結果,就可以在函數裡用return語句把執行結果返回。(誰調用它就返回給誰)

如:

def stu_register(name,age,course=‘Python‘,country=‘CN‘):    print(‘學員資訊表‘.center(50,‘-‘))    print(‘Name:‘,name)    print(‘Age:‘,age)    print(‘Course:‘,course)    print(‘Country:‘,country)    if age >= 18:        return True    else:        return Falsestatus = stu_register(‘王山炮‘,22,course=‘Python全棧開發‘,country=‘JP‘)   #程式在調用完函數stu_register之後會把True或者False的執行結果返回給這個調用函數並賦值給給變數statusif status:    print(‘註冊成功‘)else:    print(‘年齡太小‘)

註:

  • 函數在執行過程中只要遇到return語句,就會停止執行並返回結果,so 也可以理解為 return 語句代表著函數的結束

  • 如果未在函數中指定return,那這個函數的傳回值為None

  • return 只能返回一個值,如果想返回多個值,可以在中間加逗號(,), 但返回的值都在一個元祖中(所以說還是返回一個值),如果return的是一個列表,那返回的結果就是一個列表形式(不再是元祖),元祖return的直接就是元祖

 

 局部變數:

  •  在函數中定義的變數稱為局部變數,在程式一開始定義的變數稱為全域變數
  • 全域變數的範圍是整個程式,局部變數的範圍是定義該變數的函數
  • 當全域變數和局部變數重名時,在定義局部變數的函數內,局部變數起作用;在其他地方全域變數起作用。 如果局部變數跟你全域變數重名並且在函數內這個變數沒有賦值,那麼這個局部變數可以調用全域變數的值,也就是說局部變數在函數內的優先順序先於全域變數。但是全域變數不能調用局部變數

假如全域變數是 字典、列表、集合,如果在函數內的重名的局部變數有被重新賦值,那麼在函數內部這個局部變數使用在函數內被賦的值,並且不會對函數外的這個全域變數的值有影響;如果在函數內這個局部變數沒有被賦值,並且在函數內對它進行了增、刪、修改,那麼在函數外部這個全域變數也會被增、刪、修改。但是全域變數如果是字串、數字,那麼就不能通過修改局部變數的方式來改變全域變數。

如果必須想修改全域變數,就用 global, 如:

name= ‘alexander‘def change_name():    global name   # global 在函數內部聲明全域變數    name = ‘alex‘    print(name)change_name()print(name)# 輸出結果: #alex#alex

 

註:實際項目中盡量不要用global這種方式去聲明全域變數。

 

Python函數基礎---參數、變數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.