日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中da_python学习 da4

發(fā)布時間:2025/4/16 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中da_python学习 da4 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、裝飾器

##裝飾器:

#定義:本質(zhì)是函數(shù),(裝飾其他函數(shù)),就是為其他函數(shù)添加附加功能

#原則:1.不能修改被裝飾的函數(shù)的源代碼

# 2.不能修改被裝飾的函數(shù)的調(diào)用方式

# 裝飾器對被裝飾函數(shù)來說,是完全透明的。裝飾函數(shù)不知道裝飾器的存在。

###實現(xiàn)裝飾器知識儲備

#1.函數(shù)即“變量”

#2.高階函數(shù)

#3.嵌套函數(shù)

#高階函數(shù)+嵌套函數(shù)---》裝飾器

import time

def timmer(func):

def warpper(*args,**kwargs):

start_time = time.time()

func()

stop_time = time.time()

print('the func run time is {a}'.format(a=stop_time-start_time))

return warpper

@timmer

def test1():

time.sleep(3)

print('in the test1')

import time

def timer(func):

def deco(*args,**kwargs):

start_time = time.time()

# print(func)

func(*args,**kwargs) #run test1

stop_time = time.time()

print('the func time is {a}'.format(a=stop_time-start_time))

return deco

@timer # 等價于test1 = timer(test1) (相當(dāng)于把原來的test1給偷梁換柱為我們的timer(test1)了)

def test1():

time.sleep(1)

print('in the test1')

@timer #test2 = timer(test2) = deco test2(name) = deco(name)

def test2(name,age,):

print('test2:',name,age)

test1()

##(相當(dāng)于把原來的test1給偷梁換柱為我們的timer(test1)了)

##思考1.要想達(dá)到裝飾函數(shù)效果:即不改變調(diào)用方式,不改變函數(shù)源代碼,增加函數(shù)功能,那么

##思路必然是搞一個新的函數(shù),并且把函數(shù)地址賦給test1,即完成test1函數(shù)的偷梁換柱。

test2('alex',22) ##2.目的是增加函數(shù)功能,那么前提是保證原來函數(shù)功能,所以就要把test1函數(shù)地址作為實參

##傳遞給裝飾函數(shù),并且在裝飾函數(shù)中執(zhí)行test1. 此外,就是在裝飾函數(shù)中實現(xiàn)附加功能。

#####最后,要返回嵌套內(nèi)函數(shù)的地址,(外函數(shù)只是個形式,起到傳參作用),賦給test1,保證被

#####偷梁換柱后的test1,具有原功能和附加功能。

二、迭代器

# 我們已經(jīng)知道,可以直接作用于for循環(huán)的數(shù)據(jù)類型有以下幾種:

# 一類是集合數(shù)據(jù)類型,如list、tuple、dict、set、str等;

# 一類是generator,包括生成器和帶yield的generator function。

# 這些可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable。

# 可以使用isinstance()判斷一個對象是否是Iterable對象:

#*可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:Iterator。

#可以使用isinstance()判斷一個對象是否是Iterator對象:

#生成器都是迭代器Iterator,但list、dict、str雖然是Iterable,卻不是迭代器Iterator。

#把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù):

#range(10)是個迭代器

#for line in f 也是迭代器

from collections import Iterable

from collections import Iterator

print(isinstance([],Iterable))

print(isinstance([],Iterator))

a = [1,2,3]

b = iter(a)

print(b.__next__())

三、生成器

import time

def consumer(name):

print("%s 準(zhǔn)備吃包子啦!" %name)

while True:

baozi = yield

print("包子[%s]來了,被[%s]吃了!" %(baozi,name))

# c = consumer('llw') #產(chǎn)生一個生成器,不會執(zhí)行consumer里面語句

# c.__next__() #只是調(diào)用yield

# b1 = '韭菜餡'

# c.send(b1) #調(diào)用yield,并給yield傳值

def producer(name):

c = consumer('A')

c2 = consumer('B')

c.__next__()

c2.__next__()

print("老子開始準(zhǔn)備做包子啦!")

for i in range(10):

time.sleep(1)

print("做了2個包子!")

c.send(i)

c2.send(i)

producer("alex")

四、匿名函數(shù)

#匿名函數(shù):函數(shù)即變量。沒有名字,就沒有門牌號,就會被回收。

# (變量和函數(shù)均有內(nèi)存回收機制,當(dāng)沒有門牌號時,內(nèi)存回收)

# calc = lambda x:x*3

# print(calc(3))

#

#

# def sayhi(n):

# print(n)

# sayhi(3)

#

# calc = (lambda n:print(n)) ##只能把簡單函數(shù)搞成匿名函數(shù)

# calc(5)

#

# calc = lambda n:3 if n<4 else n ##三元組

五、內(nèi)置方法

#匿名函數(shù):函數(shù)即變量。沒有名字,就沒有門牌號,就會被回收。

# (變量和函數(shù)均有內(nèi)存回收機制,當(dāng)沒有門牌號時,內(nèi)存回收)

# calc = lambda x:x*3

# print(calc(3))

#

#

# def sayhi(n):

# print(n)

# sayhi(3)

#

# calc = (lambda n:print(n)) ##只能把簡單函數(shù)搞成匿名函數(shù)

# calc(5)

#

# calc = lambda n:3 if n<4 else n ##三元組

總結(jié)

以上是生活随笔為你收集整理的python中da_python学习 da4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。