Python之定義函數
一、函數的寫法:
#語法 def 函數名(參數1,參數2,參數3,...): '''注釋''' 函數體 return 返回的值 #函數名要能反映其意義

1 def auth(user:str,password:str)->int: 2 ''' 3 auth function 4 :param user: 用戶名 5 :param password: 密碼 6 :return: 認證結果 7 ''' 8 if user == 'george' and password == '123': 9 return 1 10 # print(auth.__annotations__) #{'user': <class 'str'>, 'password': <class 'str'>, 'return': <class 'int'>} 11 12 user=input('用戶名>>: ').strip() 13 pwd=input('密碼>>: ').strip() 14 res=auth(user,pwd) 15 print(res)
1 def mylen(): 2 s = 'Hello George' 3 length = 0 4 for i in s: 5 length += 1 6 return length 7 leng = mylen() 8 print(leng) 9 #return 返回的length的值給函數mylen 10 #函數mylen()在將值付給leng變量 11 #在打印leng就是結果了
二、函數的返回值:
函數的返回值可以是任意的數據類型
如果有返回值,必須要用變量接收才會有效果
def func(): a=111 b=[1,2,3] return b ret = func() print(ret)
當有兩個返回值時,返回的類型是元組類型
def func(): a=111 b=[1,2,3] return a,b ret = func() print(type(ret)) print(ret)
函數也可以沒有返回值,在不寫return的時候,一個函數默認的返回值是‘None’
def func1(): a=111 b=[1,2,3] ret = func1() print(ret)
當只寫一個return的時候,函數的返回值為None。
def func2(): a =111 b = [1,2,3,] return ret = func2() print(ret)
return None的時候,函數的返回值也為None(幾乎不用)
def func3(): a = 111 b = [1,2,3] return None ret = func3() print(ret)
當函數執行到return時,就結束了當前的函數。只打印1111,如果沒有return,就打印1111和2222。
def func4(): print(1111) return print(2222) func4()
def func5(): for i in range(10): if i == 6: return else: print(i) func5()
總結:
#函數的返回值為None有三種情況
#1.不寫返回值
#2.只寫一個return
#3.return None (幾乎不用)
#return的作用:結束一個函數的執行
#函數的返回值不為None,有返回值
#return xxx 返回一個值(一個變量)
#return a,b 返回多個值(多個變量),多個值之間用逗號區分
#接收:可以用一個變量接收,以元組的形式返回
# 也可以用多個變量接收,返回幾個就用幾個變量去接收
#函數要先定義 ,后調用。
def func6(): '''返回一個值''' #return 111 #return 'abc' return ['abc',123]
def func7(): '''返回多個值''' a = 123 b = 'abc' return a,b,[1,2,3] # ret = func7() # print(ret) # m,n,k = func7() # print(m) # print(n) # print(k)
定義一個列表,返回列表的最后一個值。
def func8(): l = [1,2,3,4] return l[-1] ret = func8()print(ret)
====================================================
函數使用的原則:先定義,再調用

1 函數即“變量”,“變量”必須先定義后引用。未定義而直接引用函數,就相當於在引用一個不存在的變量名 2 #測試一 3 def foo(): 4 print('from foo') 5 bar() 6 foo() #報錯 7 8 #測試二 9 def bar(): 10 print('from bar') 11 def foo(): 12 print('from foo') 13 bar() 14 foo() #正常 15 16 #測試三 17 def foo(): 18 print('from foo') 19 bar() 20 21 def bar(): 22 print('from bar') 23 foo() #會報錯嗎? 24 25 26 #結論:函數的使用,必須遵循原則:先定義,后調用 27 #我們在使用函數時,一定要明確地區分定義階段和調用階段 28 29 #定義階段 30 def foo(): 31 print('from foo') 32 bar() 33 def bar(): 34 print('from bar') 35 #調用階段 36 foo()
函數在定義階段都干了什么:
#只檢測語法,不執行代碼 也就說,語法錯誤在函數定義階段就會檢測出來,而代碼的邏輯錯誤只有在執行時才會知道
定義函數的三種形式:
#1、無參:應用場景僅僅只是執行一些操作,比如與用戶交互,打印 #2、有參:需要根據外部傳進來的參數,才能執行相應的邏輯,比如統計長度,求最大值最小值 #3、空函數:設計代碼結構

1 #定義階段 2 def tell_tag(tag,n): #有參數 3 print(tag*n) 4 5 def tell_msg(): #無參數 6 print('hello world') 7 8 #調用階段 9 tell_tag('*',12) 10 tell_msg() 11 tell_tag('*',12) 12 13 ''' 14 ************ 15 hello world 16 ************ 17 ''' 18 19 #結論: 20 #1、定義時無參,意味着調用時也無需傳入參數 21 #2、定義時有參,意味着調用時則必須傳入參數

1 def auth(user,password): 2 ''' 3 auth function 4 :param user: 用戶名 5 :param password: 密碼 6 :return: 認證結果 7 ''' 8 pass 9 10 def get(filename): 11 ''' 12 :param filename: 13 :return: 14 ''' 15 pass 16 17 def put(filename): 18 ''' 19 :param filename: 20 :return: 21 ''' 22 def ls(dirname): 23 ''' 24 :param dirname: 25 :return: 26 ''' 27 pass 28 29 #程序的體系結構立見
空函數
如果想定義一個什么事也不做的空函數,可以用pass
語句:
def nop(): pass
pass
語句什么都不做,那有什么用?實際上pass
可以用來作為占位符,比如現在還沒想好怎么寫函數的代碼,就可以先放一個pass
,讓代碼能運行起來。
pass
還可以用在其他語句里,比如:
if age >= 18: pass
缺少了pass
,代碼運行就會有語法錯誤。