python第五天學習總結

來源:互聯網
上載者:User

標籤:Python

1.裝飾器詳解
def wrpper(f): #f = func1
def inner(*args,* kwargs):
print(111)
ret = f(
args,**kwargs)
print(333)
return ret
return inner #返回給wrapper(func1)

@wrpper # func1 = wrapper(func1)
def func1():
print(222)
return 444

func1() #inner()
# 1,執行wrapper函數,將func1函數名傳給f
# 2,將inner函數名 返回給了新的變數func1 (func1 = inner)
# 3,func1() == inner() 執行inner函數*
#4,執行print(111)執行func1 函數print(222) 執行print(333)

2.函數的有效資訊
#########沒有裝飾器
def logger(username,pwd):
‘‘‘ #描述此函數的作用及參數和傳回值等資訊
此函數是登入函數,需要username,pwd兩個參數
:return:True
‘‘‘
print(111)
return True

print(logger.doc) #查看函數的描述資訊
print(logger.name) #查看函數的函數名
###########有裝飾器
from functools import wraps #1.引入wraps
def wrpper(f):
@wraps(f) #[email protected](f)
def inner(*args,*kwargs):
‘‘‘
inner函數的資訊
:param args: 參數
:param kwargs: 參數
:return: True
‘‘‘
print(222)
ret = f(
args,**kwargs)
print(333)
return ret
return inner

@wrpper
def logger(username,pwd):
‘‘‘
此函數是登入函數,需要username,pwd兩個參數
:return:True
‘‘‘
print(111)
return True
print(logger.doc) #輸出logger函數資訊,如果沒有1 2的操作,輸出inner函數的資訊
print(logger.name) #輸出logger,如果沒有1 2的操作,輸出inner函數名

3 裝飾器的升級
##帶參數的裝飾器
def wrpperout(flag1): #flag1=flag=True
def wrpper(f):
def inner(*args,kwargs):
if flag1:
print(0)
ret = f(*args,*kwargs)
print(9)
return ret
else:
ret = f(
args,
kwargs)
return ret
return inner
return wrpper

flag = True
@wrpperout(flag) #1.將@與函數分開,執行wrpperout(flag)返回wrpper 2.將@與wrpper結合@wrpper
def func1():br/>print(111)
@wrpperout(flag)
print(222)
@wrpperout(flag)
print(333)

func1()
func2()
func3()

###多個裝飾器裝飾一個函數
def wrapper1(func):
def inner1():
print(‘wrapper1 ,before func‘)
func()
print(‘wrapper1 ,after func‘)
return inner1

def wrapper2(func):
def inner2():
print(‘wrapper2 ,before func‘)
func() # inner1()
print(‘wrapper2 ,after func‘)
return inner2

def wrapper3(func):
def inner3():
print(‘wrapper3 ,before func‘)
func()
print(‘wrapper3 ,after func‘)
return inner3

@wrapper3br/>@wrapper2
def f():
print(‘f‘)

f()
輸出:
wrapper3 ,before func
wrapper2 ,before func
wrapper1 ,before func
f
wrapper1 ,after func
wrapper2 ,after func
wrapper3 ,after func
執行順序:從上到下裝飾器裝飾函數之前的操作----執行函數-----從下到上裝飾器裝飾函數之後操作

4.迭代器
###可迭代對象:該對象中含有iter方法的就是可迭代對象,遵循可迭代協議
print(‘iter‘ in dir(str)) #判斷該對象是不是可迭代對象
from collections import Iterable
print(isinstance(‘abc‘,Iterable)) #判斷該對象是不是可迭代對象
print(isinstance(‘abc‘,str)) #判斷該對象是哪種資料類型

#####迭代器:內部含有iter且含有next方法的對象就是迭代器,遵循迭代器協議
s1 = ‘asgsdg‘
obj_s = s1.iter() #將可迭代對象轉換成迭代器或者obj_s = iter(s1)
print(obj_s.next()) #取值
print(‘next‘ in dir(obj_s)) #判斷該對象是不是迭代器
from collections import Iterator
print(isinstance(obj_s,Iterator)) #判斷該對象是不是迭代器
####迭代器的好處:1.節省記憶體 2.惰性機制 3.單向執行,無法復原

5.產生器
產生器本質就是迭代器,自訂的迭代器
def func1():
print(111)
yield 222 #yield關鍵字
yield 333
yield 444
g_obj = func1() #產生器對象
print(g_obj) #<generator object func1 at 0x000001E97F1303B8>
print(g_obj.next()) #取值,next()和yield一一對應
print(g_obj.send())#send和next都是對產生器的取值,send會給上一個yield發送一個值,send不能用在第一次取值,最後一個yield不能得到值

6.列表推導式
[變數(加工後的變數) for 變數 in iterable] #遍曆模式
[變數(加工後的變數) for 變數 in iterable if 條件] #篩選模式
####產生器運算式
(變數(加工後的變數) for 變數 in iterable)
(變數(加工後的變數) for 變數 in iterable if 條件)

7.內建函數
eval:去除兩邊的引號
print(eval(‘1+2+3‘)) #輸出6

exec:執行代碼
s1 = ‘‘‘
for i in range(5):
print(i)
‘‘‘
print(exec(s1))

print(sep=‘分隔字元,預設為空白格‘)
print(sep=‘分行符號,預設為\n‘)
print(file=f1w檔案控制代碼)

print(hash(‘cc‘)) #將一個不可變的資料類型轉換一個雜湊值,如果是數字就是數字本身

print(help(str))#協助資訊

callable:檢查一個對象是否可調用,可調用返回True,不可調用返回False

print(float(1)) #將整數和字串轉換成浮點數,輸出1.0
print(bin((18))) #十進位轉換成二進位,輸出0b10010
print(oct((18))) #將十進位裝換成八進位,輸出0o22
print(hex((18))) #將十進位裝換成十六進位,輸出0x12
print(abs(-1)) #abs取絕對值,輸出1
print(divmod(100,7)) #商和餘數,輸出(14, 2)
print(round(1.2345,3)) #保留小數的位元,輸出1.234
print(pow(2,3)) #x的y次冪,如果是三個參數表示對z取餘
l1 = [1,2,3]
print(sum(l1),4) #求和,輸出10
l1 = [1,2,-3]
print(min(l1,key=abs)) #取最小值,可加key,輸出1
print(max(l1,key=abs)) #輸出最大值,可加key,輸出-3
l_obj=reversed(l1) #翻轉形成一個迭代器,用for取值
repr:返回一個對象的原形
sorted:可指定key進行排序
enumerate:枚舉,返回一個枚舉對象
all:可迭代對象中,全是True才是True
any:可迭代對象中,有一個True,就是True
zip:拉鏈方法
map
filter

8,匿名函數
calc = lambda n:nn #calc函數名,lambda關鍵字,n參數:nn參數運算**

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.