"""author = 陳俊龍"""
============函數的返回值==============
1.什么是返回值:
返回值就是函數返回給函數調用者的值(概念)
返回值就是return后面的值(語法)
返回值就是函數調用表達式的值(獲取返回值)
2.return:
1)什么是return:
return是一個關鍵字牧抵,只能出現在函數體中
2)return的作用:
a.執(zhí)行函數體的時候撰茎,一旦遇到return函數直接結束
b.將值返回給函數調用者(將函數內部的數據傳遞到函數外):return后面跟上需要返回的數據
說明:
看一個函數的返回值是什么亡容,就看執(zhí)行函數的過程中有沒有遇到return,
如果遇到,后面的值就是函數的返回值
如果沒有遇到或者遇到return后面沒有數據牵囤,函數默認都會返回None
3)什么樣的數據應該作為函數的返回值:
如果實現完函數的功能會產生新的數據反砌,那么產生的新數據就可以返回,產生多少返回多少
函數可以返回多個返回值:return 返回值1葱轩, 返回值2.....
返回值可以加以利用
4)怎么獲取函數的返回值:
獲取函數調用表達式的值就是獲取函數的返回值
def sum_1(x, y):
z = x+y
return z
print(sum_1(1, 2))
3.如何通過return返回數據:
def sum_1(x, y):
return x+y
print(sum_1(1, 2))
4.函數的調用過程(完整版):
1回到函數調用位置
2傳參
3執(zhí)行函數體
4執(zhí)行完函數體,確定函數返回值
a.函數結束:執(zhí)行完函數的最后一條語句
b.執(zhí)行過程中遇到return
怎么確定返回值,看執(zhí)行過程有沒有遇到return,如果遇到靴拱,return后面的值就是返回值)
5回到函數調用的位置(這個時候函數調用表達式的值才是函數的返回值
6接著往下執(zhí)行
@啊!袜炕!5.函數調用過程其實是一種壓棧的過程
"""
每次調用函數本谜,系統(tǒng)都會自動的在內存中專門為這個函數開辟一個內存空間,用來保存在函數中聲明的變量(形參也是聲明在函數中的變量)偎窘,當函數調用結束乌助,這個內存區(qū)域會自動釋放,如果不把里面變量的數據返回出函數外,那這些數據將全部消失
6.多個返回值:
多個返回值的時候陌知,實際是返回一個!元組!他托,其中的元素就是返回值
def sum_1(x, y):
return x+y, x-y
print(sum_1(1, 2)) # (3, -1)
================匿名函數=============
1.匿名函數
匿名函數本質還是函數,普通函數中除了聲明的語法其他都適用于匿名函數
1)語法:
lambda 參數列表:返回值
2)說明:
lambda:
- 關鍵字纵诞,固定寫法
參數列表:
- 新參列表上祈,以 參數名1,參數名2浙芙,...
返回值 :
- 寫任何有結果的表達式
注意:
匿名函數的函數體登刺,只要一條語句,而且這條語句的結果就是函數的返回值(不需要return)
可以把接收函數的變量看作是它的函數名
3)什么時候使用:
函數的代碼一行就可以實現
函數的功能不會重復使用
sum1 = lambda num1, num2: num1+num2
print(type(sum1)) # <class 'function'>
練習:寫一個匿名函數嗡呼,求兩個數中的最大值
max_1 = lambda num1, num2: num1 if num1 > num2 else num2
print(max_1(1, 2))
補充:python中的三目運算符
java:
條件語句纸俭?值1:值2
- 判斷條件語句的結果是否為true,是的話整個表達式的結果就是值1南窗,否則就是值二
python:
值1 if 條件語句 else 值2
- 判斷條件語句的結果是否為true揍很,是的話整個表達式的結果就是值1,否則就是值二
===============變量的作業(yè)域============
1.什么是作用域1:
聲明完變量后万伤,這個變量可以作用的范圍就是變量的作用域
2.全局變量和局部變量:
1)全局變量:聲明在函數或者類外面的變量都是全局變量
作用范圍:
是從聲明開始到整個文件使用
2)局部變量:聲明在窒悔!函數!中的變量就是局部變量
作用范圍:
是從聲明開始到整個函數結束
全局變量的實例:
# a 是全局變量
a = 100
print('外部', a)
for _ in range(a):
print('循環(huán)體', a)
y = 100 # !這里的y也是全局變量
for x in range(4):
print('x也是全局變量') # 敌买!這里的x也是全局變量简珠!
局部變量的實例:
# aa是局部變量
def func(aa):
print('函數中', aa)
3.global和nonlocal:
這兩個關鍵字只能在函數體中使用
1)global:在函數中去聲明一個全局變量或修改一個全局變量的值
用法:
global 變量名
變量名 = 值
n1 = 100
def func4():
n1 = 200
print(n1)
func4() # 200
print(n1) # 100
=======加入global后======
def func5():
global n1
n1 = 200
print(n1)
func5() # 200
print(n1) # 200
2)nonlocal:在局部的局部中去修改局部變量的值
用法:
nonlocal 變量名
變量名 = 值
def func5():
m = 10
def func55():
nonlocal m
m = 20
print('函數中的函數', m)
func55()
print('函數中', m)
func5() # 函數中的函數 20 函數中 20
===============遞歸函數==============
1.什么是遞歸函數:在函數中調用函數本身就是遞歸函數
循環(huán)能做的事情遞歸都可以做
1)怎么寫遞歸函數
第一步:聲明函數
第二步:找臨界值(函數結束的條件)
第三步:找關系
假設函數的功能已經實現了,找f(n)與f(n-1)的關系
第四步:通過關系虹钮,使用f(n-1)去實現f(n)的功能
2)聋庵!循環(huán)能做的事情不要用遞歸做!
用遞歸實現1+2+3+4+...+n
def sum1(n):
# 1找臨界值
if n == 1:
return 1
# 2找關系
return sum1(n-1)+n
print(sum1(100))
用遞歸實現
n = 4
*
**
***
****
def func1(n):
if n == 1:
print('*')
return
func1(n-1)
print(n*'*')
func1(5)
用遞歸打印出斐波那契數列的第n位:
def func2(n):
if n == 1 or n == 2:
return 1
return func2(n-2)+func2(n-1)
print(func2(7))