1. 程式人生 > 實用技巧 >Python基礎 函式基礎

Python基礎 函式基礎

# 函式返回數=0,返回None
# 函式返回數=1,返回實際值
# 函式返回數>1,返回一個元組

# 函式引數
# 形參  不佔記憶體空間,只有在呼叫時才會分配記憶體單元,呼叫結束後會釋放記憶體
# 實參  可以是常量 變數 函式 等等
# 函式遇到return就會結束執行

# 位置引數和關鍵字引數
# 引數組  **字典 *列表
############################################################
# 全域性變數和區域性變數


# def test01(x):
#     '''
#     註釋
#     :param x:
#
:return: # ''' # y = 2 * x + 1 # print(y) # print('test01') # # # def test02(x): # ''' # 註釋 # :param x: # :return: # ''' # y = 2 * x + 1 # print(y) # print('test02') # return y # # # def test03(x): # ''' # 註釋 # :param x: # :return:
# ''' # y = 2 * x + 1 # print(y) # print('test03') # return 1, 3, 4, ['er', 'ere'] # # # v1 = test01(1) # v2 = test02(2) # v3 = test03(3) # print(v1) # print(v2) # print(v3) # # 位置引數和關鍵字引數 若混合使用,位置引數必須在關鍵字引數左邊 # def test(x, y, z): # print(x) # # # test(1, 2, 3) # 位置引數,必須一一對應,缺一不可
# test(z=2, y=1, x=4) # 關鍵字引數,無需一一對應,缺一不可 # test(1, z=3, y=4) # 若混合使用,位置引數必須在關鍵字引數左邊 # 預設引數 呼叫時,不傳入實參則使用預設值,傳入則使用傳入值 # def test(x, y=None): # print(x) # print(y) # # # test(3, 'bububg') # 引數組 **字典 *列表 # def test(x,*args): #args 會給除x後的多個值,當做一個元組 # print(x) # print(args) # test(1,3,45,3,2,1) # test(1,*[9,0,9]) # test(1,*[9,0,9]) # def test(x,**kwargs): #args 會給除x後的多個值,當做一個元組 # print(x) # print(kwargs) # test(1,z=2,y=3) # test(1,z=2,y=3) # test(2,**{'da':'de'}) # #test(1,y=2,y=3) #一個引數不能傳兩個值 # def test(x,*args,**kwargs): #引數 列表形式需要在字典前面,否則報錯 # print(x) # print(args) # print(kwargs) # test(1,2,34,5,z=2,y=3) # test(1,*[1,3,5],z=2,y=3) # test(1,z=2,y=3) # test(2,**{'da':'de'}) #########################全域性變數和區域性變數##########################規範 全域性變數大寫 區域性變數小寫 # 函式優先使用區域性變數,若函式內無該變數,則往外層尋找變數,直到找到該變數 # 函式變數需要使用全域性變數時,若函式體內無global關鍵字,且全域性變數為不可變型別,則只能讀取全域性變數,無法重新賦值 # 接上句,對應全域性變數為可變物件,可以對內部元素進行操作 # 函式使用global關鍵字,可對全域性變數,讀取和賦值 # name = 'alex' #全域性變數 # def change_name(): # print('change name',name) #可以呼叫全域性變數 # change_name() # def change_name(): # name = 'didjfdi' #區域性變數,改變值不會改變全域性變數name值 # print('change name',name) # change_name() # def change_name(): # global name #定義全域性變數,改變該變數值會改變全域性變數name值 # name = 'didjfdi' # print('change name',name) # change_name() # print(name) # list1=['hii','ddin'] # def change_name(): # list1[1]='de' #對應全域性變數為可變物件,可以對內部元素進行操作 # print('change name',list1) # change_name() # print(list1) # name = 'alex' # def change_name(): # name = 'dd' # print('change name',name) # def new(): # nonlocal name #指上一級變數 # name = 'de' # new() # print(name) # change_name() # print(name) ##############################前向引用###############################33 ############################遞迴################################### # 函式體內呼叫自己,必須明確一個結束條件,容易死迴圈 # 效率不高,記憶體溢位 # # def calc(n): # print(n) # calc(n) # calc(10) #死迴圈 # def calc(n): # print(n) # if int(n // 2) == 0: #新增一個結束條件 # return n # res = calc(int(n / 2)) # print(n) # return res # a = calc(10) # print(a) import time # # name_list = ['張三', '李四', '王五', 'alex', 'wendy', 'smis'] # def ask_way(name_list): # if len(name_list) == 0: # return('沒有人知道') # # name = name_list.pop(0) # if name == '王五': # return('%s說我知道'%name) # # print('%s 你好,你知道路怎麼走嗎?' % name) # print('我不知道怎麼走,我幫你問%s' % name_list[0]) # # time.sleep(3) # res = ask_way(name_list) # print('%s問路的結果是: %s'%(name,res)) # return res # # # a=ask_way(name_list) # print(a) ##################作用域############## # name = 'alex' # def foo(): # name = 'sdfdf' # def bar(): # name = 'fefe' # print(name) # return '這是個啥' # return bar() # # a=foo() # print(a) # name = 'a' # def foo(): # name = 'deij' # # def bar(): # name = 'dfeew' # # def tt(): # print(name) # # return tt #加括號是執行,不加括號返回函式地址 # # return bar # # a=foo()()() #foo()返回bar記憶體地址 foo()()返回tt記憶體地址 foo()()()執行tt tt無返回值,返回None # print(foo()()) # # a = foo # print(a) #返回函式地址 # # a = foo() # print(a) #返回bar函式地址