目錄
函式在執行過程中,直接或間接呼叫了自身
# 官網表示:python預設的最大遞迴深度為1000次
# import sys
# print(sys.getrecursionlimit()) # 檢視當前遞迴最大深度
# print(sys.setrecursionlimit(2000)) # 修改遞迴最大深度
# 無限自己呼叫自己,但是python限制了次數
# 無用遞迴1:
count = 1
def index():
global count
count += 1
print(count)
print('from index')
index()
index()
# 無用遞迴2:
def func():
print('from func')
index()
def index():
print('from index')
func()
index() # 兩個函式互相呼叫
遞迴使用
1.遞推:一層層往下推導,每次往下推會相對於上一次復制度一定要有所下降
2.回溯:依據最後的結論往上推導出最初的答案
3.遞迴一定要有結束條件
'''偽**:可能無法執行,但是可以表述邏輯
'''# 不列印列表,只列印數字
l1 = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
def func1(l1):
for i in l1:
if type(i) is int:
print(i)
else:
func1(i)
func1(l1)
# 實現階乘
def factorial(n):
if n == 1:
return 1
else:
res = n*factorial(n-1)
return res
print(factorial(4)) # 24
# 在列表中查出指定數字
# 第一種方法 直接用for迴圈從左往右依次查詢
# 第二種使用二分法,二分法使用前提資料集必須有序
num = 567
l2 = [1, 11, 23, 43, 44, 57, 68, 76, 81, 99, 123, 222, 321, 432, 444, 567, 666, 712, 899, 999, 1111]
def get_num(num, l2):
if len(l2) == 0: # 列表中沒有這個數
return
sli_num = len(l2) // 2 # 先從中間獲取位置索引值
if num > l2[sli_num]: # 與列表中間的值做對比
r_list = l2[sli_num + 1:] # 如果大於中間值,擷取優化右邊為新列表
print(r_list)
get_num(num, r_list) # 重新走到這個函式
elif num < l2[sli_num]: # 如果小於中間值,目標值就在左邊
l_list = l2[:sli_num] # 將左邊記錄為新列表
print(l_list)
get_num(num, l_list) # 繼續走到這個函式
else:
print(num) # 剛好等於中間值的情況
get_num(444, l2)
1.當功能需求僅僅是二選一的情況下 那麼推薦使用三元表示式
# 常規使用時
def max_num(a, b):
if a > b:
return a
else:
return b
# 使用三元表示式後
def max_num(a, b):
return a if a > b else b
# 條件成立丟擲if前面的值,否則就丟擲else後面的值
2.雖然可以巢狀使用,但是不推薦
# 求三個數最大值
def max_num(a, b, c):
return a if a > b else (b if b > c else c)
print(max_num(10, 22, 33))
# 案例二
is_free = input("是否收費y/n:").strip().upper()
res = '收費'if is_free == 'y' else '免費'
print(res)
# 案例三
username = input("username:").strip()
res = 'nb' if username == 'jason' else 'lb'
print(res)
# 給列表中所有的人名加上_new字尾
name_list = ['jason', 'kevin', 'tony', 'jerry']
# 方式一:for迴圈加字元拼接
new_list =
for i in name_list:
print(new_list)
# 方式二:列表生成式
new_list = ['%s_new' % i for i in name_list]
print(new_list)
# 將兩個列表合成為乙個字典
l1 = ['jason', 18, 'read']
l2 = ['name', 'age', 'hobby']
new_dict = {}
for i in range(len(l2)):
new_dict[l2[i]] = l1[i]
print(new_dict)
name_list = ['jason', 'tony', 'tom']
res =
print(res) #
# 列舉
'''enumerate(l1)
針對該方法使用for迴圈取值 每次會產生兩個結果
第乙個是從0開始的數字
第二個是被迴圈物件裡面的元素
還可以通過start引數控制起始位置
'''
# 匿名函式:沒有名字的函式
'''語法格式:
lambda 形參:返回值
'''# 簡單使用
eg1:
a = (lambda x, y: x * y)(5, 6)
print(a)
eg2:
res = [x**2 for x in range(10)]
print(res)
res2 = [(lambda x:x**2)(i) for i in range(10)]
print(res2)
eg3:
print((lambda a, b: a if a > b else b)(10, 11))
# 匿名函式一般不會單獨使用,會配合其他函式一起使用
# map() 對映
# 使用 map(function, iterable)
# 函式名,可迭代物件
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def double(i):
return i ** 2
print(list(map(double, l)))
print(list(map(lambda x: x ** 2, l)))
Python使用函式實現楊輝三角
執行效果 可在函式中指定階層數,輸出對應的楊輝三角 源 如下 1 coding utf 8 2 3chapter4 do.py 4函式yanghui n 用於輸出n階楊輝三角 5 6def yanghui n 7if not str n isdecimal or n 2 or n 25 8print...
python函式怎麼使用 python函式的使用
函式形參和實參 函式取得的引數是你提供給函式的值,這樣函式就可以利用這些值 做 一些事情。這些引數就像變數一樣,只不過它們的值是在我們呼叫函式的時候定義的,而非在函式本身內賦值。引數在函式定義的圓括號對內指定,用逗號分割。當我們呼叫函式的時候,我們以同樣的方式提供值。注意我們使用過的術語 函式中的引...
Python高階函式 三
排序演算法在各種程式中都有廣泛的應用,排序的核心就是按照某種規則比較所謂的 大小 然後交換位置,如果是數字,我們可以直接比較,但如果是字串或者兩個字典呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。python的內建sorted函式就可以對list進行排序。sorted ...