Day 10 生成器和迭代器習題

2021-10-24 19:00:56 字數 4581 閱讀 2621

寫乙個裝飾器@tag要求滿足如下功能:

@tag(name=

'p')

defrender

(text)

:# 執行其他操作

return text

@tag(name=

'div'

)def

render2()

:return

'abc'

print

(render(

'hello'))

# 列印出: hello

print

(render2())

# 列印出: abc

def

tag(name:

str)

:def

test

(func)

:def

tag_str

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

return f'<><>'

return tag_str

return test

@tag(name=

'p')

defrender

(text)

:# 執行其他操作

return text

@tag(name=

'div'

)def

render2()

:return

'abc'

print

(render(

'hello'))

print

(render2(

))

為函式寫乙個裝飾器,根據引數不同做不同操作。

flag為 true,則 讓原函式執行後返回值加 100,並返回。

flag為 false,則 讓原函式執行後返回值減 100,並返回。

def

num(flag:

bool):

deftest

(func)

:def

judgment_num

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

iftype

(result)in(

int,

float

,complex):

if flag ==

true

:return result +

100return result -

100return judgment_num

return test

@num(

true

)def

num1()

:return

2@num(

false

)def

num2()

:return

4print

(num1())

print

(num2(

))

為函式寫乙個裝飾器,根據不同的運算子和資料對原函式的返回值進行相應的數值操作

例如:

運算子是+,資料是 100, 就對原函式的返回值進行加100的處理

運算子是-

, 資料是 20,就對原函式的返回值進行減20的處理

運算子是*

, 資料是 3

, 就對原函式的返回值進行乘3的處理

運算子是/

, 資料是 2, 就對原函式的返回值進行除2的處理

其他情況的符號不做處理

def

modify

(operator:

str, number:

(int

,float

,complex))

:def

test

(func)

:def

operating

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

if operator in

('+'

,'-'

,'*'

,'/'):

if operator ==

'+':

return result + number

elif operator ==

'-':

return result - number

elif operator ==

'*':

return result * number

return result /

2return operating

return test

@modify(

'+',12)

defmodify1()

:return

4@modify(

'-',12)

defmodify2()

:return

4@modify(

'*',12)

defmodify3()

:return

4@modify(

'/',2)

defmodify4()

:return

4

寫乙個鬥地主發牌器

import random

# 方法一:

defcards()

: card_colors =

['♣'

,'♦'

,'♥'

,'♠'

,'joker'

] card_number1 =[2

,3,4

,5,6

,7,8

,9,10

,'j'

,'q'

,'k'

,'a'

] card_number2 =

['red'

,'black'

] n =

1 delete_list =

while n <=3:

count =

1 your_list =

while count <=17:

color = random.choice(card_colors)

if color ==

'joker'

: number = random.choice(card_number2)

else

: number = random.choice(card_number1)

if f'_'

notin delete_list:))

count +=

1# print(your_list)

yield your_list

n +=

1# print(delete_list)

gen1 = cards(

)print

(next

(gen1)

)print

(next

(gen1)

)print

(next

(gen1)

)# 方法二:

card_colors =

['♣'

,'♦'

,'♥'

,'♠'

]card_number1 =[2

,3,4

,5,6

,7,8

,9,10

,'j'

,'q'

,'k'

,'a'

]card_list2 =

['red_joker'

,'black_joker'

]card_list1 =

[f''

for i in card_colors for j in card_number1]

card_list1.extend(card_list2)

sets =

set(card_list1)

gen2 =

(i for i in sets)

your_cards1 =

your_cards2 =

your_cards3 =

for _ in

range(17

):next

(gen2)

)next

(gen2)

)next

(gen2)

)print

(your_cards1)

print

(your_cards2)

print

(your_cards3)

Day 10 迭代器和生成器

day 10 迭代器生成器模組 匯入原理 不管是通過import還是from import,在匯入模組時,系統會自動將被匯入的模組中的所有 執行一次 書寫規範 在定義模組時,可以通過if name main 這個if語句來阻止模組中指定 在被其他模組匯入時執行 在這個if語句中的 不會被其他模組執行...

Python基礎 day10 生成器

示例一 a x for x in range 30 這行 就是列表生成器,執行順序就是先執行後面的for迴圈,然後執行前面的x print a 執行結果 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27...

day19 生成器,迭代器

一 列表解析 l1 雞蛋 s i for i in range 10 if i 5 print l1 雞蛋6 雞蛋7 雞蛋8 雞蛋9 這種方法比較佔記憶體,因為要先生成列表,列表佔記憶體 print sum i for i in range 100000000 這種方法計算 1 10000000 的...