天天看點

學習11:内容# 1.函數名第一類對象及使用 ***** # 2.f格式化 *** # 3.疊代器 **** # 4.遞歸 ****

學習11:内容# 1.函數名第一類對象及使用 ***** # 2.f格式化 *** # 3.疊代器 **** # 4.遞歸 ****

目錄

  • 1.第一類對象 -- 特殊點
  • 2.f.格式化 Python3.6版本以上才能夠使用
  • 3.疊代器 疊代 : 器 : 工具
  • 4.遞歸

1.第一類對象 -- 特殊點

1.可以當做值被指派給變量

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

2.當做元素存放在容器中

def func():
    print(1)

lst = [func,func,func]
for i in lst:
    i()           

3.函數名可以當做函數的參數

def func(f):
    f()

def foo():
    print("is foo")

func(foo)           

4.函數名可以當做函數的傳回值

def f1():
    def f2():
        print(1)
        def f3():
            print(2)
        return f2
    ret = f2()  # f2 函數的記憶體位址
    return ret  #
print(f1())           

2.f.格式化 Python3.6版本以上才能夠使用

s = f"你好{'常鑫'}"       # 填充字元串
s1 = F"你好{'常鑫'}"

s1 = f"你還是挺好的{s}" # 填充變量
print(s1)

s1 = f"{35+15}"         # 填充計算公式
print(s1)

a = 10
b = 20
s1 = f"{a if a>b else b}"  # 填充表達式
print(s1)

s1 = f"{{{{{{'常鑫吃..'}}}}}}"  # 填充大括号
print(s1)           
s1 = f"{{}}"
print(s1)


s1 = f"{'{}{}{}{}{}'}"
print(s1)           
s1 = f"{print(123)}"
print(s1)

def prin(a):
    print(a)

s1 = f"{prin(123)}"
prin(s1)

def foo():
    def func():
        a = 1
        return a
    return func()

s1 = f"{foo()}"
print(s1)           
lst = [1,3,4,5,6]
s1 = f"{lst[0:5]}"
print(s1)  # [1,3,4,5,6]

dic = {"key1":123,"key2":345}
s1 = f"{dic['key2']}"
print(s1)

%s,format,f           

3.疊代器 疊代 : 器 : 工具

可疊代對象

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


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


except Exception:
    print("我是萬能的!")
    break           

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

總結:
    可疊代對象:
        優點:使用靈活,可以直接檢視值
        缺點:占記憶體,不能疊代取值

    疊代器:
        優點:節省記憶體,惰性機制
        缺點:使用不靈活,操作比較繁瑣,不能直接檢視元素
           
疊代器的特性:
    1.一次性的(用完就沒有了)
    2.不能逆行(不能後退)
    3.惰性機制(節省記憶體)           
什麼是可疊代對象:
    具有很多私有方法,具有__iter__()方法的就是一個可疊代對象

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

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

4.遞歸

滿足兩個條件才是有效遞歸

1.自己調用自己 (不斷調用自己本身) -- 死遞歸
2.有明确的終止條件

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

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

原理

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

第一例:

def age(n): # 1,2,3
    if n == 3:
        return "猜對了"
    else:
        age(n+1)
print(age(1))

def age2(n):
    if n == 3:
        return "猜對了"

def age1(n):
    if n == 3:
        return "猜對了"
    else:
        age2(n+1)

def age(n):
    if n == 3:
        return "猜對了"
    else:
        age1(n+1)
age(1)           

第二例:

1.寶元  18-2-2-2
2.太白  18-2-2
3.wusir 18-2
4.alex  18

def age(n):
    if n == 4:
        return 18
    else:
        return age(n+1)-2
print(age(1))


def age4(n):
    if n == 4:
        return 18
def age3(n):
    if n == 4: # 問的是不是第四個了
        return 18
    else:
        return age4(n+1)-2
def age2(n):
    if n == 4:  # 問的是不是第四個了
        return 18
    else:
        return age3(n+1)-2
def age1(n):
    if n == 4: # 問的是不是第四個了
        return 18
    else:
        return age2(n+1)-2
print(age1(1))           

posted on 2019-07-18 18:36 changxin7 閱讀(...) 評論(...) 編輯 收藏