1.什麼是函數?
函數是具有某一功能的工具。
假如我們是一個修理工,幹活之前要準備好相應的工具,幹活時用到什麼直接拿就可以而不用現場造一個工具。函數就相當於工具,
我們事先定義好,使用時直接調用就好。
抑或將函數當做一個工廠,我們傳給工廠材料,工廠加工完給我們成品。
2.爲什麼要有函數?
- 代碼結構不清晰,可讀性查
- 代碼冗餘
- 可維護性差,擴展性差
3.函數的定義和使用
1.函數的定義
def 函數名(參數1,參數2,......):
"""
註釋
"""
函數體
return 值
1.函數名與變量名的命名規則相同(函數名實際上就是一個變量名)
3.參數可有可無
2.註釋可有可無,寫複雜函數時最好加上,提高可讀性
3.函數體必須有,即使沒有代碼也要寫pass
4.返回值可有可無
定義函數的過程:
- 申請內存地址並將函數體代碼存到內存中
- 將函數名綁定上述內存地址
- 定義函數時不會執行函數體代碼,但是會檢查函數體語法
示例1:
def func():
print("func")
運行完之後什麼都沒有,因爲我們只是定義了函數,不會執行函數體代碼
示例2:
def func():
print("func")
print(func)
結果如下:
因爲函數名對應函數體的內存地址,
示例3:
def func():
a
print("func")
雖然a未定義,但執行完並沒有報錯,因爲沒有語法錯誤,而且定義函數時並不會執行函數體代碼
示例4:
def func():
print("func"
執行時會報錯,因爲print語法錯誤,函數定義時雖然不會執行函數體代碼,但是會檢查語法
2.函數的調用
函數名(參數1,參數2)
調用函數的過程:
- 根據函數名找到函數體代碼的內存地址
- ()觸發函數體代碼的執行
示例1:
def func():
print("this is func")
func()
結果如下:
示例2:
def func1():
print("func1")
def func2():
func1()
print("func2")
func2()
結果如下:
雖然只是執行func2但是func2的函數體調用了func1
示例3:
def func1():
print("func1")
func2()
def func2():
print("func2")
func1()
結果如下:
上述代碼執行時並不會報錯,因爲雖然func2後於func1定義,但是func1的執行在func2定義後,定義func1時又不會執行func1函數體,在func1執行時,func2已經存到內存中了,所以不會報錯
但是如果將func1的執行放在func2的定義前則會報錯,如下所示:
def func1():
print("func1")
func2()
func1()
def func2():
print("func2")
結果如下:
3.函數定義的三種形式
1.無參函數
應用場景:函數體的執行不需要參數(工廠加工不需要原材料)
實例代碼:
def func():
name = input("your name:")
age = input("your age:")
print("your name:{},your age:{}".format(name,age)
2.有參函數
應用場景:函數體的執行需要藉助外界參數(工廠加工需要原材料)
實例代碼:
def add(x,y):
print(x+y)
3.空函數
應用場景:開發時,先將函數框架寫出來,再慢慢填充內容(啥也不幹的工廠)
實例代碼:
def func():
pass