一、函數(shù)返回值
- 返回函數(shù)執(zhí)行的結果
通過return來指定函數(shù)的返回值
函數(shù)的返回值可以直接使用博烂。另一種方式是通過一個變量來接收函數(shù)的返回值
def fn2():
print('abc')
return
r=fn2()
- return后面可以跟任意的對象香椎,甚至可以是一個函數(shù)
def fn():
print(‘hello’)
def fn2():
print(‘ejoaj’)
return fn2
r = fn()
- 函數(shù)中Return 后面的語句不執(zhí)行
fn是函數(shù)對象,print(fn)就是打印函數(shù)對象
fn()是調用函數(shù)禽篱,print(fn())就是打印fn()的返回值
二畜伐、文檔字符串
- 在定義函數(shù)時,可以在函數(shù)內部編寫文檔字符串躺率,即函數(shù)的說明
help()驗證:內置函數(shù) 可以查詢python中函數(shù)的用法
語法: help(函數(shù)對象)
def fn(a,b,v):
'''
這是一個文檔字符串的案例
這個函數(shù)的作用玛界。。悼吱。慎框。
函數(shù)的參數(shù)
:param a:作用,類型后添, 默認值笨枯。。遇西。
:param b:
:param v:
:return: 需要/不需要
'''
return 123
help(fn)
>>fn(a, b, v)
這是一個文檔字符串的案例
這個函數(shù)的作用馅精。。粱檀。硫嘶。
函數(shù)的參數(shù)
:param a:作用,類型梧税, 默認值沦疾。称近。。
:param b:
:param v:
:return: 需要/不需要
三哮塞、函數(shù)的作用域
作用域(scope):指的是變量生效的區(qū)域
- 2種作用域:
全局作用域:在函數(shù)以外的區(qū)域刨秆,可在程序任意位置訪問。
函數(shù)作用域:在函數(shù)調用時創(chuàng)建忆畅,函數(shù)結束后銷毀衡未,只能在函數(shù)內部使用。
b=20
def fn():
a = 123
print('函數(shù)內部:a=',a)
print('函數(shù)內部:b=', b)
fn()
#print('函數(shù)內部:a=', a) :NameError: name 'a' is not defined
print('函數(shù)外部:b=', b)
>>函數(shù)內部:a= 123
函數(shù)內部:b= 20
函數(shù)外部:b= 20
def fn2():
a = 123
def fn3():
a=40
print('函數(shù)內部:a=', a)
fn3()
fn2()
>>函數(shù)內部:a= 40
在函數(shù)內修改全局變量家凯,需要使用global關鍵字來聲明局部變量
a=346
def fn3():
global a
a=123
print('函數(shù)內部:a=', a)
fn3()
print('函數(shù)外部:a=', a)
>>函數(shù)內部:a= 123
函數(shù)外部:a= 123
四缓醋、命名空間
- 命名空間 是一個用來保存變量的字典
- locals():獲取當前作用域的空間 返回一個字典
a=123
b=124
scope=locals()
#print(scope)
print(scope['a'])
scope['c']=797#向scope里面添加了一個KEY-VALUE 是全局變量 不可在函數(shù)內部使用
print(c)
>> 123
>>797
- 在函數(shù)內部調用locals(),獲取函數(shù)的命名空間
def fn():
a=23
scope=locals()
print(scope)
fn()
- 在函數(shù)內部 獲取全局的命名空間 globals()
d=23
def fn():
a=23
s=globals() #在函數(shù)內部調用locals(),獲取函數(shù)的命名空間
print(s['d'])
fn()
>>23
五、遞歸函數(shù):在函數(shù)中自己引用自己
1.0遞歸是解決問題的一種思想绊诲,和循環(huán)很像送粱。
2.0 把一個大的問題分解為一個小的問題,直到問題無法分解時再去解決問題
3.0 遞歸函數(shù)的兩個條件:
基線條件:問題可以被分解為最小的問題掂之,當滿足基線條件時抗俄,遞歸就不在執(zhí)行了
遞歸條件:將問題繼續(xù)分解的條件嘗試求10的階乘(10!)
def fn(n):
for i in range(1,n):
n *=i
print(n)
fn(10)
>>3628800
- 遞歸方法:求階乘函數(shù)
def fn(n):
#1.基線條件 :10=10*9世舰! 9=9*8动雹! 8!=8*7跟压!胰蝠。。震蒋。
if n ==1:
return 1
else:
#2 遞歸條件: return n*fn2(n-1)
return n * fn(n - 1)
print(fn(10))
>>3628800
- 用遞歸函數(shù)定義一個函數(shù)姊氓,為任意數(shù)字做任意的冪運算
def fn(n,i):
# 1.基線條件:
if i==1:
return n
#2 遞歸條件:
else:
return n*fn(n,i-1)
print(fn(2,3))
>>8
- 定義函數(shù) 用來檢測任意一個字符串是否是回文字符串,如果是True,不是返回False: (回文字符串:如 ABCBA 前后讀一樣)
def fn(s):
i=len(s)
# 1.基線條件
if i==1:
return True
elif s[0]!=s[-1]:
return False
else:
return fn(s[1:-1])
print(fn('sdfkj'))
>> False
案例:漢羅塔游戲 fn(n,'A','B','C')