環境小碩的轉行之路 15 小作業 閉包 迭代器

2022-05-17 03:30:59 字數 3814 閱讀 3233

前言1.傳入多個數字,求和。

2. 判斷兩個數字較小的乙個。

3. 函式:輸入1個可迭代物件,將裡面的元素以_相連拼接成字串。

4. 寫函式,傳入n個值,返回字典。

5. 寫函式,輸入n,返回n的階乘。

6. 寫函式返回乙個撲克牌列表,每一項都是乙個元組,需要用到笛卡爾積。

7. 列印9*9乘法表。(這個曾經自己在小學的時候用vb寫出來過,但是當時沒意識到自己有這個天賦。。。。)

**

#1.傳入多個數字,求和

#法1def sum_func(*args):

sum = 0

for i in args:

sum += i

return sum

print(1,sum_func(1,2,3,4,5,6,7,8,9,10))

#法2def sum1_func(*args):

return sum(args)#法二2,3,4,5,6,7,8,9,10))

#2.判斷兩個數字較小的乙個

def judge(a,b):

return a if a=1即可

if n>0:

sum *= n

n -=1

elif n == 0:

break

else:

print('minus is not allowed')

return 'error'

return sum

print(5,factorial(5))

#6. 寫函式返回乙個撲克牌列表,每一項都是乙個元組,需要用到笛卡爾積.

def pocker():

pocker_1 =

huase = ['黑桃','紅心','方塊','草花']

dianshu = [2,3,4,5,6,7,8,9,10,'j','q','k','a','2']

for i in huase:

for e in dianshu:

return pocker_1

print(6,pocker())

def extendlist(val,list=):#若預設引數可變的資料型別,函式載入的時候就被定義了,那麼每次執行都不會給它分配新的儲存空間.只有變數每次執行完函式會消亡.

return list

list1=extendlist(10)

list2 = extendlist(10,)

list3 = extendlist('c')#list1和3指向同乙個列表(list預設值被修改),而list不使用預設值新建立了乙個列表.

print('list1=%s'%list1)

print('list2=%s'%list2)

print('list3=%s'%list3)

#7.列印9*9乘法表

def multiplication():

for i in range(10):

for t in range(1,i+1):

print('%s*%s='%(i,t),i*t,end=' ')

print('')

multiplication()

閉包:在內層函式中訪問外層函式的變數

閉包的作用:

1.可以保護你的變數不受侵害

2.讓乙個變數常駐記憶體

例子

a = 10#此時變數不安全,容易被函式的global改變.

def outer():

a = 10#此時變數安全,無法在另乙個函式中改。對外界是不開放的。

def inner():

nonlocal a

a = 20

print(a)

return inner#保證a常駐記憶體

outer()()#inner什麼時候呼叫不確定,必須保證a常駐記憶體,為了inner執行的時候a有值.

閉包應用例子-超簡易爬蟲
from urllib.request import urlopen

def outter():

s = urlopen('').read()#常駐記憶體,第一次拿很慢,後面拿就快了。

def getcontent():#閉包

return s#讀出一堆資料

return getcontent#保證s常駐記憶體

#pa = outter()#如果**更新得重新跑一次這個

pa()

檢視是否閉包
#檢視爬蟲是否閉包

def outter():

a = 10

def inner():

print('我是inner')

#print(a)

print(inner.__closure__)#檢視是否閉包的函式

outter()#輸出none,說明inner不是閉包

迭代器一些概念

展示

diedaiqi = 'dadadada'.__iter__()

print(1,dir(diedaiqi))#有__iter__和__next__

迭代器的基本特質

1.只能向前不能向後

2.幾乎不占用記憶體,節省記憶體(和生成器處知識鏈結)

3.可用for迴圈提取資料

4.惰性機制(面試題,難度係數較高)

迭代器模擬for迴圈

#迭代器模擬for迴圈

lst = ['a','b','c','d']

for el in lst:#底層用的是迭代器

print(el)

相當於it = lst.__iter__()

while 1:

try:

el = it.__next__()

print(el)

except stopiteration:

break

迭代器的判斷
#法1
#可以通過dir來判斷資料是否可迭代的,以及資料是否是迭代器(__next__ in dir(xx))野路子

#法2#判斷迭代器和迭代物件,官方方案.

from collections import iterator

from collections import iterable

print(3,isinstance(it,iterable))#判斷某個物件是不是某個例項。(華為t30為手機的乙個例項).

list(引數)會把引數進行迴圈迭代

s = list(diedaiqi)#相當於將迭代器轉化成列表,在list函式中一定存在for迴圈->一定存在__next__

print(s)#['d','a','d','a','d','a'.....]

環境小碩的轉行之路 24 大作業 編寫電腦程式

法一 老師的標準答案 import re def atom cal exp 原子性計算 if in exp a,b exp.split return str float a float b 計算乘法 elif in exp a,b exp.split 計算除法 return str float a ...

環境小碩的轉行之路 21 序列化

序列 列表 元組 字串 bytes.序列化裡面的序列特指的就是字串和bytes.把其它的資料型別轉換成字串和bytes的過程就是序列化的過程.直接序列化的乙個例子 dic print str dic dic 序列化 主要內容 import json 為什麼要把其它資料型別轉換成字串?轉字串的過程不就...

小碩之路 01

趁導師出差的這段時間,終於有時間來做一些自己的事。從之前的專案中發現了許多自己欠缺的模組。作為乙個專科直接讀研的人,並且還是學的機械相關專業的。對於現在所從事的數位化方向,有很多需要學習的地方。做乙個記錄吧 記錄一下三年的生活,希望自己能堅持 之前的部落格也做的不是很到位。如果發現文章中的問題 希望...