Python中的函式(def)及引數傳遞

2021-09-26 20:52:13 字數 2714 閱讀 1862

#抽象 (函式)

# 1、callable 判斷乙個物件是否可以被呼叫

x = 1

def y():

return none

callable(y) # y可以被呼叫

callable(x) # x不可以被呼叫

# 2、當函式沒有return時 函式將預設返回none

# 3、放在函式開頭的字串成為文件字串 如下:

def square(x):

'my name is hexianmin' #這個為文件字串 將作為函式的一部分儲存起來

return x*x

# 4、函式中的 '傳值' 和 '傳位址' 切片列表產生的是乙個相等但不相同的副本(即兩個列表儲存位址不一樣)

# 傳值: 呼叫函式時傳 變數 eg: x = 1 change(x)

# 函式引數 : 1、位置引數   2、關鍵字引數  

# 1、位置引數 :實參與形參的對應關係為 '一一對應' 的關係 實參的前後位置決定了形參接到的值

# 注意: 1、二者不可以衝突 2、關鍵字引數和位置引數可以混在一起用,優先關鍵字引數,剩下的按照位置一一對應

# * / ** 的妙用 :收集引數 和 分配引數 的作用

# 收集引數: * : 將 多餘的 一般的物件(位置引數,字典也將作為位置引數)收集成元組型別 ** : 將 多餘的 關鍵字引數 收集為字典型別

# 分配引數: * : 將元組型別的引數分配給形參 ** : 將字典型別的引數分配給形參

# 收集引數:

def print_params_1(x, y, z=3, *pospar, **keypar): #注意這裡的 z=3 是給z賦乙個預設值 當呼叫函式時沒有給z賦值時使用 但是一旦呼叫時給z賦值了 z就不用預設值了

print(x, y, z)

print(pospar) #在函式裡面使用時 : 1、不帶星號(*) 是 乙個元組 2、帶星號(*) 是 取元組中的每個值出來

print(keypar) #在函式裡面使用時 : 1、不帶星號(**) 是 乙個字典(但是取不了值出來) 2、帶乙個星號(*) 是 取字典中的每個關鍵字(key)出來 3、帶兩個星號 會報錯

print_params_1(1, 2, 4, 5, 6, 7, foo=1, bar=2)

# 分配引數:

def foo(x, y, z, m=0, n=0):

print(x, y, z)

print(m)

print(n)

return -1

def call_foo(*args, **kwds): #收集引數

print('calling foo!')

foo(*args, kwds) #分配引數 這裡如果用foo(*args, **kwds) **kwds會報錯

x1 = 1

y1 = 2

z1 = 3

d =

print(call_foo(x1, y1, z1, d1=1, d2=2)) #呼叫的時候 乙個字典是作為乙個位置引數的

# 作用域 :1、全域性變數 2、區域性變數

# 注意: 在區域性函式(區域性函式中預設變數都是區域性變數)中使用全域性變數: 1、只使用一次(且重名了) 2、宣告後使用(宣告後就是全域性變數了)

# 1、只使用一次(且重名了):

para = 1

def combine(para):

print(para,globals()['para']) # globals()['para']

combine(2)

# 2、宣告後使用(宣告後就是全域性變數了):

xx = 2

def change_global():

global xx #宣告後就是全域性變數了

xx = xx +2

print(xx)

change_global()

# 3、vars(): 賦值其實是乙個看不見的字典 使用後返回的就是乙個字典

x11 = 1

x22 = vars()

print(x22['x11'])

# 4、 vars() globals() locals() 使用後都是返回乙個字典

# 作用域巢狀

def multi(fac):

def multifac(num): # multifac(num)函式被稱為 : 閉包

return num * fac

return multifac

dou = multi(2) #返回的 dou 現在是乙個函式( multifac(num)函式 )

dou(3) #這樣相當於呼叫 multifac(3)

# list(map(str,range(10))) 與 [str(i) for i in range(10)] 是等價的

# filter(lambda x: x.isalnum, seq)

#from functools import reduce reduce(lambda x,y: x+y, numbers)

# map filter reduce

Python學習def函式的定義 使用及引數傳遞

python程式設計中對於某些需要重複呼叫的程式,可以使用函式進行定義,基本形式為 def 函式名 引數1,引數2,引數n 執行語句函式名為呼叫的表示名,引數則是傳入的引數,可以更具需要定義,也可以沒有。例1 簡單的函式使用 coding gb2312 定義函式 def hello print he...

Python學習def函式的定義 使用及引數傳遞

python程式設計中對於某些需要重複呼叫的程式,可以使用函式進行定義,基本形式為 def函式名 引數1,引數2,引數n 執行語句函式名為呼叫的表示名,引數則是傳入的引數,可以更具需要定義,也可以沒有。例1 簡單的函式使用 coding gb2312 定義函式 defhello print hell...

Python學習 def函式的定義 使用及引數傳遞

python程式設計中對於某些需要重複呼叫的程式,可以使用函式進行定義,基本形式為 def 函式名 引數1,引數2,引數n 執行語句 函式名為呼叫的表示名,引數則是傳入的引數,可以更具需要定義,也可以沒有。例1 簡單的函式使用 coding gb2312 定義函式 def hello print h...