目錄
函數的定義與調用
1.函數遵循先定義后調用的原則
func1() # 報錯,name 'func1' is not defined
def func1():
print('stydy hard')
2.函數在定義階段只檢測語法,不執行代碼
def func2():
sjjaxxnncnnks
askjjamdnxnncnn
asjdjkjdkjsan
dsjdjfjsk
return # 不調用函數執行不會報錯
3.函數體代碼只有在調用函數的時候才會執行
def func2():
sjjaxxnncnnks
askjjamdnxnncnn
asjdjkjdkjsan
dsjdjfjsk
return
func2() # 不調用函數執行不會報錯,一旦調用后執行函數體代碼之后才會報錯
4.函數名其實相當於是變量名,函數名指向的是函數體代碼在內存中的位置
def func2():
pass
return
print(func2) # 指代函數體代碼內存地址0x0000023AD7381EA0>
函數的分類
一、內置函數
python解釋器提前定義好可以直接調用的函數
eg:len、open... # 如何查看代碼的內部源碼ctrl+鼠標左鍵
二、自定義函數
簡而言之就是程序員自己編寫的函數
1.無參函數
def func3(): # 無參函數:在函數定義階段括號內沒有參數
print('讀過一本好書,像交了一個益友')
print('學必求其心得,業必貴其專精')
func3() # 調用無參函數:括號內也不需要寫參數
2.有參函數
def func4(writer): # 有參函數:在函數定義階段括號內有參數,類似於變量名
print('尺有所短;寸有所長。物有所不足;智有所不明。》', writer.rjust(10, '-'))
func4('屈原《卜居》') # 調用有參函數:在函數調用階段括號內也必須傳參數,類似於變量值
3.空函數
# 空函數:在定義階段函數體代碼是用pass或者...占位,搭建功能框架
# 例如寫一個自動駕駛系統,先羅列出程序中大致的功能
def auto_start():
pass
def auto_brake():
pass
def auto_drive():
pass
函數的返回值
# 函數的返回值其實就是在調用函數之后返回的結果
str1 = 'hello world'
res = str1.count('l') # 將count函數的返回值賦值給變量res
print(res)
# 如何設定返回值
# 1.當函數體代碼沒有return關鍵字的時候,返回值是None
def func5():
print('生活的理想,就是為了理想的生活')
res = func5()
print(res) # None
# 2.當函數體代碼后面有return關鍵字,但是return后面為空,返回值也是None
def func5():
print('生活的理想,就是為了理想的生活')
return
res = func5()
print(res) # None
# 3.當函數體代碼后面有return,並且后面有元素,返回該元素
# 如果該元素是值那么直接返回值,值可以是任意數據類型
# 如果該元素是變量名那么返回變量名指向的值
def func5():
print('生活的理想,就是為了理想的生活')
writer = '張聞天'
return writer
res = func5()
print(res) # 張聞天
# 4.return后面還可以跟多個元素,用逗號隔開,返回值的形式是元組
def func5():
print('生活的理想,就是為了理想的生活')
return '作者', '張聞天'
res = func5()
print(res) # ('作者', '張聞天')
# 5.函數體代碼遇到return會立刻結束函數運行
def func5():
print('生活的理想,就是為了理想的生活')
return '作者', '張聞天'
print('盛年不重來,一日難再晨。及時當勉勵,歲月不待人') # 不會執行
res = func5() # 生活的理想,就是為了理想的生活
print(res) # ('作者', '張聞天')
函數的參數
一、函數的參數可以分為兩大類
- 函數在定義階段括號內寫的參數
我們稱之為'形式參數', 簡稱為形參 - 函數在調用階段括號內寫的參數
我們稱之為'實際參數' ,簡稱為實參
二、形參與實參的關系
形參類似於是變量名、實參類似於是變量的值,在調用函數的時候傳入實參,會與形參臨時綁定,函數運行結束之后自動解除綁定。
位置參數
- 位置形參
在函數定義階段括號內從左往右依次填寫的變量名
def info_func(name,age,hooby): # name,age,hooby就是位置形參
pass
- 位置實參
在函數調用階段括號內從左往右依次傳入的值
info_func('yashuo','20','swim') # 'yashuo','20','swim'就是位置實參
- 位置參數的特征
- 位置形參與位置實參在綁定關系的時候就是按照從左往右的順序依次綁定
- 位置形參與位置實參的個數要一致
def info_func(name,age,hobby):
print(name,age,hobby)
info_func('yashuo','20','swim') # 正常打印
# info_func() # 調用的時候不傳實參報錯
# info_func('yashuo','20') # 傳少了報錯
index('yashuo','20','swim','qaq') # 傳多了報錯
關鍵字參數
def info_func(name, age, hobby):
print(name, age, hobby)
info_func(age='20', hobby='swim', name='yasuo') # 關鍵字一一對應
# info_func(name = 'yasuo',age='20', 'swim') # 報錯 positional argument follows keyword argument
info_func('yasuo', hobby='swim', name='jeyce') # 報錯 info_func() got multiple values for argument 'name'
info_func('yasuo', '20', hobby='swim') # 相當於位置參數
默認參數
在函數定義階段就已經給一些形參賦值,后續如果不傳值則使用默認的,后續如果傳值則使用傳入的值
def inp_info(name, age, gender, position ='普通員工'):
'''員工信息輸入'''
print("""
員工姓名:%s
員工年齡:%s
員工性別:%s
員工職位:%s
""" % (name, age, gender, position))
inp_info('marial', 18, 'female')
inp_info('jack', 32, 'male', '老板')
inp_info('tom', 28, 'male')
inp_info('Jack', 22, 'male', '保安隊長')
可變長參數
def func(*args,**kwargs):
print(args,kwargs)
func() # () {}
func(11, 22, 33, 44, 55,66, 77, ame='yasuo', age='20', name='swim') # (11, 22, 33, 44, 55, 66, 77) {'ame': 'yasuo', 'age': '20', 'name': 'swim'}