匿名函數(shù)
普通函數(shù):
def 函數(shù)名(參數(shù)列表):
函數(shù)體
匿名函數(shù):
函數(shù)名 = lambda:參數(shù)列表:返回值
函數(shù)名:變量名
lambda:關鍵字
參數(shù)列表:參數(shù)名1,參數(shù)名2……
返回值:相當于一個只有return語句的函數(shù)體
匿名函數(shù)的調用也和普通函數(shù)一樣,函數(shù)名(實參列表),也支持位置參數(shù),關鍵字參數(shù),參數(shù)設定默認值,不定長參數(shù)
'''
寫一個匿名函數(shù),求兩個數(shù)的和
sum1 = lambda num1,num2:num1+num2
匿名函數(shù)的調用和普通函數(shù)一樣
print(sum1(10,20))
練習:求1+2+...+n
my_sum = lambda n:sum(range(n + 1))
print(my_sum(100))
變量的作用域
1、變量的作用域:變量聲明后,能夠使用的范圍
2、全局變量和局部變量:
全局變量:聲明在函數(shù)和類的外面的變量都是全局變量
作用域:從聲明開始到整個py文件結束,任何地方都可以使用
3、局部變量:聲明在函數(shù)和類中的變量
作用域:從聲明開始到函數(shù)或類結束
'''
'''
global關鍵字
在函數(shù)中說明一個變量是全局變量
注意:只能用在函數(shù)中使用
'''
name = 'aaa'
def func1():
global name#說明當前變量是全局變量
name = 'aaa'
print(name)
func1()
'''
nolocal關鍵字
在局部的局部變量中修改局部變量的值
'''
def fun2():
abc = 100
def fun3():
nonlocal abc
abc = 200
print('fun3',abc)
fun3()
print('fun2',abc)
函數(shù)作為變量
聲明函數(shù)就是聲明一個類型是function的變量,函數(shù)名是指就是變量名
'''
'''
1、變量可以給其他變量賦值
2、函數(shù)作為列表的元素
3、將函數(shù)作為參數(shù)
函數(shù)的調用
函數(shù)可以有多個返回值
求多個數(shù)的和與平均值
def my_sum(*nums):
sum1 = sum(nums)
average = sum1/len(nums)
return sum1,average #同時返回和、平均值
2、函數(shù)的調用過程是一個壓棧的過程
每次調用函數(shù)的時候,系統(tǒng)都會在內存中(棧)開辟空間來存儲函數(shù)執(zhí)行過程中產生的數(shù)據(jù)(函數(shù)聲明的變量)
當函數(shù)調用完成后,這塊內存會自動銷毀
遞歸函數(shù)
1、遞歸函數(shù):在函數(shù)體中調用函數(shù)本身
循環(huán)能做得遞歸都能做,但實際上能用循環(huán)解決的不用遞歸
2、怎么寫遞歸函數(shù)
a.確定臨界值(循環(huán)結束條件),讓函數(shù)結束
b.找關系,假設函數(shù)的功能已經實現(xiàn),找f(n)和f(n-1)的關系
c.根據(jù)關系,用f(n-1)實現(xiàn)f(n)的功能
'''
寫一個遞歸函數(shù),實現(xiàn)1+2+3+...+n
def my_sum(n):
#找臨界值
if n == 1:
return 1
# 找關系
# my_sum(n) = 1+2+3+...+n
# my_sum(n-1) = 1 + 2 + 3 + ... + n-1
# my_sum(n) = my_sum(n-1)+n
# 用f(n - 1)實現(xiàn)f(n)的功能
return my_sum(n-1)+n