1. 程式人生 > 其它 >函式:函式的基本使用、函式引數的使用

函式:函式的基本使用、函式引數的使用

一、函式的基本使用

1、什麼是函式  

    函式就類似於具備某一功能的工具,提前定義好之後可以反覆使用(即:函式就是盛放程式碼和功能的容器)

1.1函式的使用原則:

  先定義後呼叫

  為何要用函式==>解決下述問題:

  • 1.程式碼組織結構不清晰、過於冗餘、可讀性差
  • 2.程式碼沒有返回值(無法使用之後的返回結果)
  • 3.相容性、可維護性、可擴充套件性差、修改繁雜等等

如何用函式

  • 先定義------> 三種定義方式
  • 後呼叫------> 三種呼叫方式
  • 返回值------> 三種返回值的形式

2、函式定義語法

def 函式名(引數1,引數2,引數3,...):
    
'''函式的註釋''' 函式體程式碼 return 返回值 ''' 1.def: (必須) 定義函式的關鍵字; 2.函式名:(必須) 函式名指向函式記憶體地址,是對函式體程式碼的引用。函式的命名應該反映出函式的功能; 3.括號冒號:(必須) 括號後要加冒號,然後在下一行開始縮排編寫函式體的程式碼; 4.引數:(可選) 括號內定義引數,引數是可有可無的,且無需指定引數的型別; 5.函式註釋: (可選) 描述函式功能,引數介紹,非必要,但是建議加上,從而增強函式的可讀性; 6.函式體:(必須) 由語句和表示式組成; 7.return值:(可選) 定義函式的返回值,return是可有可無的。
'''

3、函式的定義與呼叫

  

  定義函式

    定義函式發生的事情

  • 1、在記憶體空間中申請一塊記憶體空間儲存函式體程式碼

  • 2、將函式體程式碼所在的記憶體空間地址繫結給函式名

  強調:定義函式只檢測語法,不執行程式碼

def login():  # login = 函式的記憶體地址
    print(111)  # 函式體程式碼
    print(222)

    
x = 10  # x = 10的記憶體地址
print(x)  # 10
'''
原則上列印應該返回記憶體地址,但是返回的是值。
變數名受到python直譯器特殊照顧由記憶體地址直接找到返回值列印。
'''
print(login) # <function login at 0x7fa136db91f0> ''' 但函式名不同,列印顯示的是記憶體地址。定義函式的目的是為了把程式碼丟到容器, 只需要執行不需檢視。則無需被照顧。 '''

呼叫函式

呼叫函式發生的事情:

  • 1、先通過函式名定位到函式的記憶體地址

  • 2、函式名加括號會觸發函式體程式碼的執行

強調:呼叫函式才會執行函式體程式碼

# 示例:
def login(): 
    print('hello') 
   
login()  # hello 觸發函式體程式碼的執行

# 語法錯誤
def func():
    print(111  # 無效語法,定義階段都無法通過

# 邏輯錯誤
def func():
    print(111)
    x  # x 沒有定義,變數名也需要先定義後引用
          
func()  # 呼叫肯定出錯

# 示例:
def bar():
    print('from bar')

def foo():
    print('from foo')
    bar()
foo()
'''
from foo
from bar
'''
          
# 語法錯誤         
def foo():
    print('from foo')
    bar()
          
foo()  # bar沒有定義,呼叫肯定出錯
          
def bar():
    print('from bar')

4、定義函式的三種形式

1.無參函式

  • 函式在定義階段括號內沒有引數
# 函式體不需要外部傳引數進行,它本身程式碼就是固定的,所以就是無參函式
def say():
    print('welcome to here')
    
say()

# 引數是函式的呼叫者向函式體傳值的媒介,有參無參是根據函式體程式碼去走的,看函式體程式碼是否需要外部傳引數
def login():
    inp_name = input("請輸入使用者名稱>>>: ").strip()  
    inp_pwd = input("請輸入密碼>>>: ").strip()
    if inp_name == "jack" and inp_pwd == "123":
        print('登入成功!')
    else:
        print("使用者名稱或密碼錯誤")

login()  # 直接呼叫無需傳引數,input功能已經實現與使用者互動

2.有參函式

  • 函式在定義階段括號內有引數
# 函式體程式碼需要外部傳引數進行,這種函式就需要定義為有參函式
def max2(x, y):  # 引數---》原材料 
    if x > y:
        print(x)
    else:
        print(y)
max2(10,20)

3.空函式

  • 函式在定義階段括號內沒有引數,並且函式體程式碼為空(pass)
# 函式體為pass代表什麼都不做,稱之為空函式。定義空函式通常是有用的,因為在程式設計的開始,往往是先想好程式都需要完成什麼功能,然後把所有功能都列舉出來用pass充當函式體“佔位符”,這將使得程式的體系結構清晰且可讀性強。例如要編寫一個程式,我們可能想到的功能有使用者認證,下載,上傳,等功能,可以先做出如下定義:

def auth_user():
    """使用者認證"""
    pass   # 代表佔位符

def download_file():
    """下載檔案"""
    pass

def upload_file():
    """上傳檔案"""
    pass

呼叫函式的三種形式

# 1.語句
len("hello")  # 單純的呼叫,例如len統計hello的長度

# 2.表示式
res = len("hello")  # 將呼叫函式的返回值賦值給res

res = len("hello") * 10  # 將呼叫函式的返回值乘以10的結果賦值給res
print(res)

# 3 .可以當做引數傳給另外一個函式
len("hello")  # 從形式上看就是將函式呼叫,從本質講是跟2同理
print(len("hello"))  # 先調len的返回值然後再賦值給print

函式的返回值

return 詳解

def max(x, y): 
    if x > y:
        return x
    else:
        return y
    
res = max(10, 20)
print(res)

1、return是一個函式結束的標誌,函式可以有多個return,但只要執行一次return,整個函式就立即結束,並且將return後的值當做本次呼叫的結果返回

def func():
    print("=====")  # 只執行到了此行
    return 111  # return後的值當做本次呼叫的結果返回
    print("****")  # ruturn 下面的值不會被執行
    return 222

res = func()
print(res)
'''
=====
111
'''
  • 2、return後的返回值有三種情況

    • 1)函式內可以沒有return 或者 return None 或者 return:返回的都是None
    • 2)return 值:返回的就是這一個值
    • 3)return 值1,值2,值3:會自動組織成一個元組返回
# 示例1:
def func():
    print(111)
    return
    print(2222) 

res = func()
print(res)

'''
111
None
'''

# 示例2:
def func():
    return 111,"xxx",[22,33]

res = func()
print(res)  # (111,"xxx",[22,33])返回的是元組