python之路——函數名的應用,閉包,迭代器

來源:互聯網
上載者:User

標籤:結束   傳回值   exce   判斷   元素   print   返回   als   閉包   

 

# ##函數名的應用
# def func():
# print(666)
# func()
#
# 1.函數名就是函數的記憶體位址
# print(func) #結果<function func at 0x000002AC2188C1E0>

# 2.函數名可以作為變數
# a = 2
# b = a
# c = b
# print(c)

# def func1():
# print(666)
# f1 = func1()
# f2 = f1
# f2()

# 3.函數名可以作為函數的參數
# def func1():
# print(666)
# def func2(x):
# print(x) #<function func1 at 0x0000026C3D983BF8>
# x()
# func1()

# def func():
# print(666)
# def func1():
# print(123) # 疑問
# func()
# def func2(x):
# x()
# func2(func1)

# 4.函數名可以當作函數的傳回值
# def wraaper():
# def inner():
# print(‘inner ‘)
# return inner
# ret = wraaper() # inner
# ret() # inner()

# def func2():
# print(‘in func‘)
#
# def func3(x):
# print(‘in func3‘)
# return x
# f1 = func3((func2()))

# f1()
# 5.函數名可以作為容器類類型的元素
# a = 6
# b = 4
# c = 5
# l1 = [a,b,c]
# print(l1)

# def func1():
# print(‘in func1‘)
# def func2():
# print(‘in func2‘)
# def func3():
# print(‘in func2‘)
# def func4():
# print(‘in func4‘)
# l1 = [func1,func2,func3,func4]
# for i in l1:
# i()

# 向上面的函數名這種,第一類對象

# #返回當前位置的局部變數的字典globals() locals()
# # globals() #返回全域變數的一個字典
# # locals()

# def func1():
# a= 2
# b = 3
# print(globals()) #返回全域變數的一個字典
# func1()

# def func1(): #返回當前位置局部變數的一個字典
# a = 2 # {‘a‘: 2, ‘b‘: 3}
# b = 3
# print(locals())
# func1()

# 閉包
# 內層函數對外層函數的變數(非全域變數)的引用
# 並返回,這樣就形成了閉包

# def wraaper():
# name = ‘alex‘ #最裡層函數調用了上一級的局部變數
# def inner(): #記憶體種不會立刻消失,再在函數裡面
# print(name) #調用的話可以調用成功
# print(inner.__closure__)
# inner()
# def qwe():
# print(name)
# qwe()
# return inner
#
# wraaper()
# print(name)

‘‘‘閉包的作用
當程式執行時,遇到了函數執行,他會在記憶體開闢一個空間,
局部名稱空間,如果這個函數內部形成了閉包
那麼他就不會隨著函數的結束而消失。
‘‘‘
#可迭代對象

#對象內部含有_iter_方法就是可迭代對象。
# 可迭代對象滿足可迭代協議
# 可迭代對象
#str list dict tuple set ranger()

# s1 = ‘strs‘
# print(dir(s1)) #可以查字串的所有方法

# 判斷一個對象是否是可迭代對象
# 第一個方法
# dic = {‘name‘:‘alex‘,‘age‘:‘18‘}
# print(‘__iter__‘ in dir(dic))
# print(dir(dic))

# s1 = [1,2,3]
# print(dir(s1))
# 第二種方法
# from collections import Iterable
# from collections import Iterator
#
# print(isinstance(‘alex‘,Iterable))
# print(isinstance(‘alex‘,Iterator)) # True

# print(isinstance(‘alex‘,str))

# 迭代器
# 對象內部含有__iter__方法且含有__next_方法就是迭代器
# 一個檔案控制代碼就是一個迭代器
# f = open(‘t1.txt‘,encoding=‘utf-8‘,mode=‘r‘)
# print(‘__iter__‘ in dir(f)) #True
# print(‘__next__‘ in dir(f)) #True
# print(‘__iter__‘ in dir(dict)) #False
# print(‘__next__‘in dir(dict)) #False

# dic = {‘name‘:‘alex‘}
# print(‘__iter__‘ in dir(dic)) #True

# 可迭代對象和迭代器的區別
# 可迭代對象不能取值,迭代器是可以取值的
# 可迭代對象可以轉化為迭代器

# lis = [1,2,3,4,5,6]
# ite1 = lis.__iter__() #迭代器
# ite1 = iter(lis)
# print(ite1) #itel的記憶體位址
# print(ite1.__next__()) #取迭代器第一個值

# l1 = {‘name‘:‘alex‘}
# l2 = l1.__iter__()
# # l3 = iter(l2)
# print(l2.__next__())

# l1 = [1,2,3,4,5,6,7,8,9,10]
# l2 = l1.__iter__()
# print(l2.__next__())

# 將可迭代對象轉化為迭代器
# 迭代器 = 可迭代對象.__iter__()

# 迭代器如何取值? next一次,去一個值
# print(ite1.__next__())
# print(ite1.__next__())
# print(ite1.__next__())
# print(ite1.__next__())
#調用__next__取值

# 1.可迭代對象不能取值,迭代器是可以取值的
# 2.迭代器非常節省記憶體
# 3.迭代器每次只能取一個值
# 4.迭代器是單向的,一條路走到頭

# 利用異常處理停止報錯
# try

# s1 = ‘1233456‘
# s = s1.__iter__()
# while 1:
# try:
# print(s.__next__())
# except StopIteration:
# break

python之路——函數名的應用,閉包,迭代器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.