首頁 >後端開發 >Python教學 >Python中函數的全面總結(附實例)

Python中函數的全面總結(附實例)

不言
不言原創
2018-09-15 17:51:261816瀏覽

這篇文章帶給大家的內容是關於Python中函數的全面總結(附實例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一.形參的動態參數: 動態參數,用於參數不確定時用.
格式:

def fun (*args)
fun(args)

1. 動態接收位置參數:動態參數必須在位置參數後.
列子1.假如參數不確定時,如下的列子,每人飯量不一樣,吃的種類不一樣,此時用到動態傳參.

def fun(*food):  #*表示的是不定参数,可以传递任意个信息,参数名称还是food,且接收到的信息为元祖()
    print("我要吃",food)
fun("米饭")    #*表示位置参数的动态传参    结果为我要吃 ('米饭',)
fun("一锅米饭","一箱辣条","一桶方便面","可口可乐")#我要吃 ('一锅米饭', '一箱辣条', '一桶方便面', '可口可乐')
fun ("一碗米饭","辣条","雪碧")  #结果为我要吃 ('一碗米饭', '辣条', '雪碧')

列子2.

def fun (*food,a,b):
    print("我要吃",food,a,b)
fun("苹果","梨子","香蕉")  #此时程序会报错,全被food接收了,a和b永远接收不到参数.
def fun (a,b,*food):
    print("我要吃",a,b,food)
fun("苹果","梨子","香蕉","橘子")  #我要吃 苹果 梨子 ('香蕉', '橘子')

2.有預設值參數時:順序: 位置參數, 動態參數*, 默認值參數

def chi(a, b, *food, c="娃哈哈"):
    print(a, b, food, c)
chi("香蕉", "菠萝") #香蕉 菠萝 () 娃哈哈 默认值生效
chi("香蕉", "菠萝", "葫芦娃") #香蕉 菠萝 ('葫芦娃',) 娃哈哈 默认值生效
chi("香蕉", "菠萝", "葫芦娃", "口罩") # 香蕉 菠萝 ('葫芦娃', '口罩') 娃哈哈 默认值生效
chi("香蕉", "菠萝", "葫芦娃", "口罩",c="苹果")#香蕉 菠萝 ('葫芦娃', '口罩') 苹果

這時候我們發現所有的預設值都生效. 這時候如果不給關鍵字傳參. 那麼你的預設值是永遠都生效的.
3.動態接收關鍵字參數: 最終順序(*): 位置參數> *args > 預設值參數> **kwargs
1.在python中可以動態的位置參數, 但是*這種情況只能接收位置參數,無法接收關鍵字參數. 在python中使⽤**來接收動態關鍵字參數.(形參只有位置參數和預設值參數兩種類型)
*args 位置參數接收到的是元組
##**kwargs 關鍵字的動態傳參, 接收到的是字典例如

def func(**kwargs): # key word arguments
    print(kwargs)  #{'a': 10, 'b': 20, 'jay': '周杰伦', 'jj': '林俊杰'}
func(a=10, b=20, jay="周杰伦", jj="林俊杰")

2.無敵模式,什麼都可以接


def fun(*args, **kwargs):
    print(args, kwargs)
fun("3","2",a="hello")  #('3', '2') {'a': 'hello'}

4.*  和** 在實參用法的意思

1
在實參位置* 表示打散,打散的是可迭代物件例如列表和字串等.在形參上表示的是聚合.def func(*args): # 在這裡. 其實相當於把傳進來的參數做了一次聚合, 聚合成一個元組
   print(args)
lst = "娃哈哈"
func(*lst) #  在實參位置* 表示打散, 打散的是可迭代物件
2.在實參位置** 打散的是字典
def func(**kwargs): # ** 把接收到的關鍵字參數打包(聚合)成字典
   print(kwargs) # 一定是字典
dic = {"張無忌": "明教教主", "謝遜": "金毛獅王", "範瑤": "光明右使"}
func(張無忌=dic['張無忌'] , 謝遜=dic['謝遜'], 範瑤=dic['範瑤'])
func(**dic) # 這裡的** 是把字典打散. 字典的key作為參數的名字, 字典的值作為參數的值傳遞給形參 兩個結果一樣都為{'張無忌': '明教教主', '謝遜': '金毛獅王', '範瑤': '光明右使'}

二.命名空間:

def fun():
    a=10
fun()
print(a)   #a 此时不存在

我們給存放名字和值的關係的空間起一個名字叫: 命名空間. 我們的變數在儲存的時候就是儲存在這片空間中的.

1.命名空間分類:
1. 全域命名空間--> 我們直接在py檔中, 函數外宣告的變數都屬於全域命名空間
2.局部命名空間--> 在函數中聲明的變數會放在局部命名空間
3. 內建命名空間--> 存放python解釋器為我們提供的名字, list, tuple, str, int這些都是內建命名空間
2.載入順序:
1. 內建命名空間2. 全域命名空間3. 局部命名空間(函數被執行的時候)
3.取值順序:
1. 局部命名空間2. 全域命名空間3. 內建命名空間

三.作用域就是作用範圍, 依生效範圍來看分為全域作域與局部作用域
全域作用域: 包含內建命名空間和全域命名空間. 在整個檔案的任何位置都可以使用(遵循從上到下逐行執行).
局部作用域: 在函數內部可以使用.
作用域命名空間:
1. 全域作用域: 全域命名空間內建命名空間
2. 局部作用域: 局部命名空間
我們可以透過
globals()函數來查看全域作用域中的內容, 也可以透過locals()來查看局部作用域中的變數和函數資訊. locals()查看的是目前作用域中的內容

def fun():
    a=10
    print(locals())   #{'a': 10}
fun()
print(globals())   #显示的没有a的信息
print(locals()) #此时和globals一样,显示的没有a的信息,因为他显示的是当前作用域中的内容.

四.函數的巢狀主要用到兩個函數,
global 和nonlocal

global:  在局部引入全域變數

   nonlocal:  在局部, 引入離他最近的那一層的變數,不能再第一層函數將全域的變數引進來.

看懂下圖就可明白嵌套的意義

相關推薦:

python網路程式設計中常用到的函數總結

PHP中的字串處理函數(String Functions) 全總結
#

以上是Python中函數的全面總結(附實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn