接下來,咱們將按照這個函數體系給你們詳細的介紹函數:python
* 什麼是函數?
* 爲何要用函數?
* 函數的分類:內置函數與自定義函數
* 如何自定義函數
1.語法
2.定義有參數函數,及有參函數的應用場景
3.定義無參數函數,及無參函數的應用場景
4.定義空函數,及空函數的應用場景
* 調用函數
1.如何調用函數
2.函數的返回值
3.函數參數的應用:形參和實參,位置形參,位置實參,關鍵字實參,默認形參,*args,**kwargs編程
* 高階函數(函數對象)
* 函數嵌套
* 做用域與名稱空間
* 裝飾器
* 迭代器與生成器及協程函數
* 三元運算,列表解析、生成器表達式
* 函數的遞歸調用
* 內置函數
* 面向過程編程與函數式編程函數式編程
假設如今你是下水道工,若是你事先準備好你的工具箱,等你接到修理下水道的工做的時候,你直接把你的工具箱拿過去直接使用就好了,而不須要臨時準備錘子啥的。函數
在程序中,函數就是具有某一功能的工具,事先將工具準備好就是函數的定義,遇到應用場景拿來就用就是函數的調用.
總結:函數是事先準備好的具有一些功能的工具,能夠很大程度上提升開發者的開發效率.工具
若是不使用函數,寫程序時將會遇到這三個問題:code
1.程序冗長
2.程序的擴展性差
3.程序的可讀性差協程
先定義函數,後調用。
* 定義函數對象
def 函數名(param一、param2……): """ 函數功能的描述信息 :param1:描述 :param2:描述 :return:返回值 """ code 1 code 2 code 3 ... return 返回值
我的大白話:完整函數體要有def 函數名(參數): 函數註釋 函數體代碼 函數返回值(默認返回None,目前接觸2種形式yield(-->動態返回),return,默認不寫都是 return None 還有就是下面的函數的調用部分!)
* 調用函數遞歸
函數名(param一、param2……)
我的大白話:在函數名後加()就是調用該函數,實質上上就是執行函數名所指向的存放函數地址的信息ip
# 註冊功能函數 def register(): """註冊功能""" username = input('username: ').strip() pwd = input('password: ').strip() with open('38a.txt', 'a', encoding='utf8') as fa: fa.write(f"{username}:{pwd}\n") fa.flush() register() # 複用 register() register()
# 登陸功能函數 def login(): """登陸功能""" inp_username = input('username: ').strip() inp_pwd = input('password: ').strip() with open('38a.txt', 'rt', encoding='utf8') as fr: for user_info in fr: user_info = user_info.strip('\n') user_info_list = user_info.split(':') if inp_username == user_info_list[0] and inp_pwd == user_info_list[1]: print('login successful') break else: print('failed') login()
def func(): bar() # 不屬於語法錯誤,不會報錯 print('*'*10)
重點: 函數定義階段只檢測語法,不執行函數體代碼!!!
def bar(): print('from bar') def foo(): print('from foo') bar() foo() ''' from foo from bar '''
def foo(): print('from foo') bar() def bar(): print('from bar') foo() ''' from foo from bar '''
函數名() ---> 調用