函數(shù)二
1. 函數(shù)的返回值
- 通過return來指定函數(shù)的返回值
- 可以通過一個變量來接收函數(shù)的返回值,也可以直接使用函數(shù)的返回值
- return后?可以跟任意對象妻坝,返回值甚?可以是?個函數(shù)
- 如果僅僅寫一個return 或者沒有寫return 相當(dāng)于 return None
- return一旦執(zhí)行函數(shù)自動結(jié)束仇参,return后面的語句不執(zhí)行
- 利用r=fn4() print(r) 才會返回return后面的值篡殷,沒有則返回None
- return可以用來結(jié)束函數(shù)
-
返回值就是函數(shù)執(zhí)?以后返回的結(jié)果
用return代替prin,可以直接進(jìn)行運算
2. ?檔字符串
- help()是Python中內(nèi)置函數(shù)迷雪,通過help()函數(shù)可以查詢Python中函數(shù)的?法
'''
help()
通過help()函數(shù)可以查詢其他函數(shù)的用法
語法: help(函數(shù)對象)
'''
help(print)
- 在定義函數(shù)時,可以在函數(shù)內(nèi)部編寫?檔字符串虫蝶,?檔字符串就是對函數(shù)的說明
def fn(a:int,b:str,c:bool)->int: # 或者簡略寫也可以def fn(a,b,c):
.... '''
....這個函數(shù)的功能就是一個文檔字符串在函數(shù)中的使用說明
....參數(shù)
....a,作用,類型,默認(rèn)值...
....b,作用,類型,默認(rèn)值...
....c,作用,類型,默認(rèn)值...
....返回值
....'''
....return 1
help(fn)
3. 函數(shù)的作?域
- 作?域(scope)
- 作?域指的是變量?效的區(qū)域
- 在Python中?共有兩種作?域
1.全局作?域
全局作?域在程序執(zhí)?時創(chuàng)建章咧,在程序執(zhí)?結(jié)束時銷毀
所有函數(shù)以外的區(qū)域都是全局作?域
在全局作?域中定義的變量,都是全局變量能真,全局變量可以在程序的任意位置進(jìn)?訪問
2.函數(shù)作?域
函數(shù)作?域在函數(shù)調(diào)?時創(chuàng)建赁严,在調(diào)?結(jié)束時銷毀
函數(shù)每調(diào)??次就會產(chǎn)??個新的函數(shù)作?域
在函數(shù)作?域中定義的變量,都是局部變量粉铐,它只能在函數(shù)內(nèi)部被訪問 -
從里面可以看到外面(變量)疼约,從外面看不到里面(變量)
4. 命名空間
- 命名空間實際上就是?個字典汤踏,是?個專??來存儲變量的字典
- locals()?來獲取當(dāng)前作?域的命名空間
- 如果在全局作?域中調(diào)?locals()則獲取全局命名空間,如果在函數(shù)作?域中調(diào)?locals()則獲取函數(shù)命名空間
- 返回值是?個字典
全局
函數(shù)
- 在函數(shù)內(nèi)部獲取一個全局的命名空間
定義一個global 獲取到外面的20 30
5. 遞歸函數(shù)
例:嘗試求10的階乘(10!)
1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
n = 10
for i in range(1,10):
....n *= i
print(n)
結(jié)果:3628800
例:定義一個函數(shù) 求任意數(shù)的階乘
- 遞歸是解決問題的?種?式(它和循環(huán)非常的像)徘钥,它的整體思想,是將?個?問題分解為?個個的?問題,直到問題?法分解時,再去解決問題
- 遞歸式的函數(shù)
遞歸簡單理解就是自己調(diào)用自己
遞歸式函數(shù)就是在函數(shù)中自己調(diào)用自己
def fn2():
....fn2() - 遞歸式函數(shù)有2個條件
- 基線條件 問題可以被分解為最?問題,當(dāng)滿?基線條件時,遞歸就不執(zhí)?了
- 遞歸條件 可以將問題繼續(xù)分解的條件
例:用遞歸的方式來解決 任意數(shù)的階乘
10促王! = 10 * 9!
9! = 9 * 8纽哥!
...
1! = 1
練習(xí):定義一個函數(shù) 來為任意數(shù)字做任意冪運算 n ** i
10 ** 5 = 10 * 10 ** 4
10 ** 4 = 10 * 10 ** 3
...
10 ** 1 = 10
作業(yè):定義一個函數(shù),用來檢查一個任意的字符串是否是回文字符串锅必,如果是返回True,不是返回False√柩蓿回文字符串從前往后念和從后往前念是一樣的搞隐。例如 TNT
print(fn('aba'))
用遞歸的思想來解決
'''
abcdefgfedcba
如果是一個字符肯定是回文
先檢查第一個字符和最后一個字符是否一致,如果不一致則不是回文
bcdefgfedcb 是不是回文
cdefgfedc 是不是回文
defgfed 是不是回文
....
g 是不是回文
'''