Python之定義函數


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()
View Code

函數在定義階段都干了什么:

#只檢測語法,不執行代碼
也就說,語法錯誤在函數定義階段就會檢測出來,而代碼的邏輯錯誤只有在執行時才會知道

定義函數的三種形式:

#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,代碼運行就會有語法錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM