一、函數體系
接下來,我們將按照這個函數體系給大家詳細的介紹函數:
- 什么是函數?
- 為什么要用函數?
- 函數的分類:內置函數與自定義函數
- 如何自定義函數
- 語法
- 定義有參數函數,及有參函數的應用場景
- 定義無參數函數,及無參函數的應用場景
- 定義空函數,及空函數的應用場景
- 調用函數
- 如何調用函數
- 函數的返回值
- 函數參數的應用:形參和實參,位置形參,位置實參,關鍵字實參,默認形參,*args,**kwargs
- 高階函數(函數對象)
- 函數嵌套
- 作用域與名稱空間
- 裝飾器
- 迭代器與生成器及協程函數
- 三元運算,列表解析、生成器表達式
- 函數的遞歸調用
- 內置函數
- 面向過程編程與函數式編程
如果現在有一個需求需要實現用戶登錄注冊的功能,我們該怎么實現呢?
# 注冊
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()
# 登錄
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')
二、什么是函數?
假設現在你是下水道工,如果你事先准備好你的工具箱,等你接到修理下水道的工作的時候,你直接把你的工具箱拿過去直接使用就行了,而不需要臨時准備錘子啥的。
在程序中,函數就是具備某一功能的工具,事先將工具准備好就是函數的定義,遇到應用場景拿來就用就是函數的調用,所以需要注意的是:
三、為何用函數
如果不使用函數,寫程序時將會遇到這三個問題:
- 程序冗長
- 程序的擴展性差
- 程序的可讀性差
四、如何用函數
先定義函數,后調用。
- 定義函數:
def 函數名(param1、param2……):
"""
函數功能的描述信息
:param1:描述
:param2:描述
:return:返回值
"""
code 1
code 2
code 3
...
return 返回值
- 調用函數
函數名(param1、param2……)
4.1 注冊功能函數
# 注冊功能函數
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()
4.2 登錄功能函數
# 登錄功能函數
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()
4.3 函數定義階段
def func():
bar() # 不屬於語法錯誤,不會報錯
print('*'*10)
- 只檢測語法,不執行函數體代碼
4.4 函數調用階段
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
'''
- 執行函數代碼