今日內容
1. 函式的引數
2. 函式物件 -- 函式名 * * * *重點!
3. 函式 的巢狀呼叫
1. 形參與實參:
函式介紹:
1.1 函式為什麼要有引數: 因為內部的函式體需要外部的資料
1.2 怎麼定義函式的引數,在定義函式階段,函式名後面()中來定義函式的引數
1.3 怎麼使用函式的引數,在函式體中用定義的引數名直接使用
1.4 實參: 有實際意義的引數
-----在函式呼叫的時候,從 () 中傳入的引數
1.5 形參: 引數本身沒有意義,有了實參賦予引數後,該形參就具備了意義
-----補充:有預設值的形參,在沒有被實參賦值,具備的就是自身的意義,返回的是預設值,但是一旦被實參賦值,它的意義就等同與實參
1.6 形參範圍:def add (n1, n2):# 形參n1 ,n2 在沒有被實參賦值時,沒有實際意義,被實參所賦值,就被賦予了實參的意義
return n1 + n2
1.7 實參範圍:
print(add('a','b')) # 實際的字串2. 形參是對實參的值拷貝print(add(10,20)) # 實際的數字
a = 100
b = 200
print(add(a,b)) # 存放實際數字的變數
2.1 形參與實參可以重名,但代表的是兩個不同的變數
2.2 不可變型別,形參發生重指向,實參不變
def fn(num):2.3 可變型別,形參發生值的內部變化,實參變,兩個指向的是同乙個位址print('數字1>>>:',num) # 此處為 10
num = 20
print('數字2>>>:',num) # 此處為20
num = 10
fn(num)
print('數字3>>>:',num) # 此處為10
3. 實參的分類
實參分為:1 .位置 實參 2. 關鍵字 實參
def fn(a,b):拿位置 實參 進行傳參:需要知道的是,形參 與 實參 的位置一一對應。比如第一號位的 實參,一定是傳給一號位的 形參 的print(a,b)
# 拿實際值進行傳參
fn(10,20) # 10 ==> a | 20 ===> b
a =100拿關鍵字實參進行傳參:指名道姓進行傳參 -------實參 指名道姓 形參b =200
fn(a,b) # a:100 ==>a | b:200 ==> b
fn(b,a) # a:200 ==>a | b:100 ==> b
例如:明確的:形參名目前位 a 和 b
fn(a = 1000,b = 2000) # a:1000 ==> a | b:2000 ==>b總結:1 . 位置實參: 一定按照位置,且個數要一一對應進行傳參fn(b = 2000,a = 1000) # b:2000 ==>b | a:1000 ==>a
a = 666
b = 888
# 前面是形參名,後面是傳遞的實參名
fn(a=a,b=b) # a:666 ==> a | b:888==> b
2 . 關鍵字實參:指名道姓進行傳參,個數一致位置可以改變進行傳參
3. 實參組合傳參規則:必須先傳位置實參,再傳關鍵字實參
4 .形參的分類
六大分類:
4.1 無值位置形參 (位置形參) :可以被位置與關鍵字來進行傳參,它必須傳值,不傳值會報錯
4. 2 有值位置形參 (預設形參) :可以被位置與關鍵字實參來進行傳參,可以不用傳參,來採用它的預設值
4. 3 可變長位置形參:可以接收前兩個沒有接收完的位置引數,可以接受的個數為 0 ~ n 個,如果不傳入引數會返回乙個空元祖 (它會用乙個元祖來包裹返回的值)
4. 4 無值關鍵字形參:只能由關鍵字實參來進行傳參,必須傳值,不傳值會報錯
4 .5 有值關鍵字形參:只能由關鍵字實參來進行傳參,也可以不傳參,來採用它的預設值
4. 6 可變長關鍵字形參:接收 第 4 和第 5 點沒有接收完的關鍵字實參,接受的個數可以為 0 ~ n 個,如果不傳入,返回的是乙個空字典 ( 它會用乙個元祖來包裹返回的值)
宣告順序:
4. 7 位置形參: a --> 預設形參:b ---> 可變長位置形參:args --->有無預設值關鍵字形參:c,d,e --->可邊長關鍵字形參:kwargs
def fn ( a, b=10, *args, c, d=20, e, **kwargs ) :pass
需要注意的地方:
4. 8 可變長位置形參只能接收位置實參,想要被附上值,前面的有值位置形參的預設值就變的沒有意義了
4. 9 args與kwargs是可變長形參的變數名,所以可以自定義,但是一般都會約定使用這兩個來表示
4. 10 常出現的組合:
def f1(*args, **kwargs): pass
def f2(a, b=10, **kwargs): pass
def f3(a, *args, **kwargs): pass
def f4(a, *, x, **kwargs): pass
def f5(a, *args, x, **kwargs): pass
4. 11 使用法則:
1. 所有位置形參全部採用位置實參進行傳值
2. 所有關鍵字形參全部採用關鍵字實參進行傳值
3. 不管位置還是關鍵字形參,全部按照順序進行傳參
打散機制
```python
def fn(*args, **kwargs):
print(args)
print(kwargs)
t = (1, 2, 3)
dic =
# *單列容器 會打散單列容器
# **雙列容器 會打散雙列容器
fn(1, 2, 3, a=100, b=200, c=300) # (1, 2, 3)
fn(*t, **dic) # (1, 2, 3)
fn(*(1, 2, 3), **) # (1, 2, 3)
# 字串也可以被打散
fn(*'abc') # ('a', 'b', 'c') {}
print(*'abc') # a b c
變長引數列表函式
可變引數列表 標頭檔案提供了遍歷未知數目和型別的函式引數表的功能。該標頭檔案的實現因不同的機器而不同,但提供的介面是一致的。假定函式 f 帶有可變數目的實際引數,lastarg 是它的最後乙個命名的形式引數 引數列表必須至少包括乙個命名引數 那麼,在函式 f 內宣告乙個型別為 va list 的變數...
變長引數列表函式
可變引數列表 標頭檔案提供了遍歷未知數目和型別的函式引數表的功能。該標頭檔案的實現因不同的機器而不同,但提供的介面是一致的。假定函式 f 帶有可變數目的實際引數,lastarg 是它的最後乙個命名的形式引數 引數列表必須至少包括乙個命名引數 那麼,在函式 f 內宣告乙個型別為 va list 的變數...
php函式引數列表
1.直接傳值 function fun arg1 2.傳引用 function fun arg1 1,arg2 2 一定程度上可以模擬函式過載。同時還要注意任何預設引數一定要放在非預設引數的右邊,也就是說fun arg1 1,arg2 這個函式原型是錯誤的。4.引數為陣列 function fun ...