1. 程式人生 > 實用技巧 >02Python-函式的第一類物件及使用-f格式化-迭代器-遞迴

02Python-函式的第一類物件及使用-f格式化-迭代器-遞迴

目錄


Day11

函式名的第一類物件及使用

1.可以當做值被賦值給變數
2.當做元素存放在容器中
3.函式名可以當做函式的引數
4.函式名可以當做函式的返回值

# def func():
#     print(1)
# # print(func)
# a = func
# a()


# def func():
#     print(1)
#
# lst = [func,func,func]
# for i in lst:
#     i()


# def func(f):
#     f()
# def foo():
#     print(123)
# func(foo)


# def func():
#     def foo():
#         print(123)
#     return foo
# a = func()
# a()

f格式化

python3.6版本及以上才能夠使用

s = f"Hello {'world'}"      # 填充字串
# s1 = F"Hello {'world'}"
s1 = f"你好呀{s}"           # 填充變數
s2 = f"{11+22}"             # 填充計算公式
print(s)
print(s1)
print(s2)


a = 10
b = 20
s1 = f"{a if a>b else b}"   # 填充表示式
s2 = f"{{{{'xiaoming bubeiguo'}}}}"     # 填充大括號
print(s1)
print(s2)

迭代器 -- 工具

可迭代物件:
	優點:使用靈活,可以直接檢視值
	缺點:佔記憶體,不能迭代取值

迭代器:
	優點:節省記憶體,惰性機制
	缺點:使用不靈活,操作比較繁瑣,不能直接檢視元素


迭代器的特性:
	1.一次性的(用完就沒有了)
	2.不能逆行(不能後退)
	3.惰性機制(節省記憶體)


什麼是可迭代物件:
    具有很多私有方法,具有__iter__()方法的就是一個可迭代物件

什麼是迭代器:
    具有__iter__()和__next__()方法的就是迭代器

迭代器什麼時候使用:當容器中資料量較多的時候使用迭代器

可迭代物件

list,dict,str,set,tuple -- 可迭代物件  使用靈活

方式一:
list.__iter__()
dict.__iter__()
str.__iter__()
set.__iter__()
tuple.__iter__()

方法二:
檢視原始碼

方法三:
print(dir(list))

官方宣告只要具有__iter__()方法的就是可迭代物件

可迭代物件的優點:
    1.使用靈活
    2.直接檢視值
可迭代物件的缺點:
    1.消耗記憶體

迭代物件取值方式
list,tuple,str -- 索引
dict -- 鍵
set  -- 直接取值


迭代器

官方宣告只要具有__iter__()方法__next__()方法就是迭代器
f = open("xxxx","w")
f.__iter__()
f.__next__()

lst = [1,2,3,4,6]
new_list = lst.__iter__()  #將可迭代物件轉換成迭代器
new_list.__iter__()
new_list.__next__()

s = "123434"
new_s = s.__iter__()       #將可迭代物件轉換成迭代器
print(new_s)
new_s.__iter__()
new_s.__next__()


new_s = s.__iter__()       #將可迭代物件轉換成迭代器
print(new_s)
new_s.__iter__()
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())

s = "12343"               # 更改版for的本質
# s = [1,2,3,4,5,7]
count = len(s)
new_s = s.__iter__()
while count:
    print(new_s.__next__())
    count -= 1

s = "12345"
new_s = s.__iter__()
while True:
    try:
        print(new_s.__next__())   # for真實本質
    except StopIteration:
        break


except Exception:
    print("萬能異常捕獲")
    break

遞迴

1.自己呼叫自己 (不斷呼叫自己本身) -- 死遞迴
2.有明確的終止條件
滿足以上兩個才是有效遞迴

遞:一直執行直到碰到結束條件
歸:從結束條件開始往回退


官方宣告: 最大層次1000,實際測試 998/997

def func():
    print(123)
    func()
func()