python筆記day9 - 函數(shù)2

一、變量的作用域

1、變量的作用域

變量在程序中能夠使用的范圍

2呢铆、全局變量

a.聲明在函數(shù)或者類的外部的變量都是全局變量

b.變量的作用域:從聲明開始到整個(gè)py文件結(jié)束,任何位置都可以使用(作用域:從聲明開始到文件結(jié)束)

3罢防、局部變量

a.聲明在函數(shù)或者類的內(nèi)部的變量就是局部變量

b.變量的作用域:從聲明開始到函數(shù)結(jié)束艘虎,任何位置都可以使用

4、golbal的使用

golbal關(guān)鍵字只能在函數(shù)中使用

作用:在函數(shù)內(nèi)聲明一個(gè)全局變量

語法:

golbal 變量名

變量名 = 值

5咒吐、nonlocal的使用? (用到的非常少野建,理解就行)

nonlocal關(guān)鍵字只能在函數(shù)中使用

作用:在局部的局部中修改局部變量的的值

語法:

nonlocal 變量名

變量名 = 值

"""

# 思考?

funtions = []

for xin range(5):

def func1(a):

return a*x

funtions.append(func1)

t1 = funtions[0]

t2 = funtions[2]

print(t1(2),t2(2))

"""

二恬叹、函數(shù)作為變量

python中候生,聲明函數(shù)其實(shí)就是聲明一個(gè)類型是function的變量。函數(shù)名就是變量名

函數(shù)名作為變量除了可以用來調(diào)用函數(shù)獲取返回值以外绽昼,普通變量能做的它都能做唯鸭。

"""

# 聲明類型是int類型的值a

a=10

print(type(a))

# 聲明類型是dict類型的變量b

b = {'a':12,'b':200}

print(type(b))

print(b['a'])

# 聲明類型是function類型的變量c

c =lambda x: x*x

print(type(c))

c(10)

# 聲明類型是function類型的變量d

def d(x):

def e():

print('abc')

e()

return x*x

print(type(d))

d(10)

# 1、讓一個(gè)變量給另外一個(gè)變量賦值

#聲明一個(gè)列表變量list1

list1 = [1,2,3]

# 使用列表變量list1給list2賦值

list2=list1

print(list2[0])

# 聲明一個(gè)函數(shù)變量func11

def func11():

print("我是函數(shù)")

# 使用函數(shù)變量func11給ff賦值

ff = func11

# 將ff當(dāng)成函數(shù)來用

ff()

# 2硅确、將變量作為列表的元素或者是字典的值

# 聲明列表變量list1

list1 = [1,2,3]

# 將列表變量list1作為列表list2的元素

list2 = [list1,100]

print(list2[0][0])

# 聲明一個(gè)函數(shù)變量func2

def func2():

print("我是函數(shù)2")

# 將函數(shù)變量func2作為列表list3的元素

list3 = [func2,100]

print(list3[0]())

# 3目溉、作為函數(shù)的參數(shù)

# 將函數(shù)1作為實(shí)參,傳遞給函數(shù)2菱农;這兒的函數(shù)2就是一個(gè)高階函數(shù)(實(shí)參高階函數(shù))

def test(x):

print("text:",x)

if not isinstance(x,int):

x()

# 聲明一個(gè)int類型的變量a

a =10

# 將變量a作為test的實(shí)參

test(a)

def func3():

print("我是函數(shù)3")

test(func3)

#3.1? sort函數(shù)

"""

def sort(key=None,reverse=False)

key - 確定排序的時(shí)候以什么值為標(biāo)準(zhǔn)來排序(默認(rèn)的情況下缭付,以列表的元素的大小為標(biāo)準(zhǔn)來排序)

需要傳一個(gè)函數(shù),函數(shù)需要一個(gè)參數(shù)和一個(gè)返回值循未。這的參數(shù)是列表的元素

reverse - 是否降序排序陷猫,需要穿一個(gè)bool值

"""

def yt_sort(list1,key):

if key ==None:

for indexin range(len(list1)):

for index2in range(index+1,len(list1)):

current = list1[index]

behind = list2[index2]

if behind

list1[index],list2[index2] = list2[index2],list1[index]

else:

for indexin range(len(list1)):

for index2in range(index+1,len(list1)):

current = key(list1[index])

behind = key(list2[index2])

if behind

list1[index],list2[index2] = list2[index2],list1[index]

my_list = [1,34,20,89,8]

# yt_sort(my_list)

# my_list.sort()

print(my_list)

my_list2 = [

{'name':'張三','age':18},

{'name':'李四','age':30},

{'name':'王五','age':10}

]

# my_list2.sort() # TypeError: '<' not supported between instances of 'dict' and 'dict'

# yt_sort(my_list2) # TypeError: '<' not supported between instances of 'dict' and 'dict'

def get_age(x):

return x['age']

yt_sort(my_list2, get_age)

print(my_list2)

my_list2 = [

{'name':'張三','age':18,'score':90},

{'name':'李四','age':30,'score':80},

{'name':'王五','age':10,'score':89}

]

# 取最大年齡對應(yīng)的字典

max_age =max(my_list2,key=lambda x: x['age'])

print(max_age)

# 取最大成績對應(yīng)的字典

max_score =max(my_list2,key=lambda x: x['score'])

print(max_score)

# 4.變量作為函數(shù)的返回值

# 返回值是函數(shù)的函數(shù),也叫高階函數(shù)(返回值高階函數(shù))

def test2(n):

sum1 =1

? ? for xin range(1, n+1):

sum1 *= x

return sum1

re = test2(5) +10

print(re)

# =================================

def get_operation(char):

# char = '+'? ? (不能使用單行注釋)

"""

根據(jù)不同的符號(hào)返回不同的功能(函數(shù)功能的描述)

? ? :paramchar: 運(yùn)算符符號(hào)

? ? :return: 不同運(yùn)算符對應(yīng)的功能的函數(shù)

"""

? ? if char =='+':

# 求和的功能

? ? ? ? def sum(*args, **kwargs):

# args = (10,20,30)

"""求多個(gè)數(shù)的和"""

? ? ? ? ? ? sum1 =0

? ? ? ? ? ? for item1in args:

sum1 += item1

for keyin kwargs:

sum1 += kwargs[key]

print('yt')

return sum1

return sum

elif char =='*':

def mul(*args, **kwargs):

sum1 =1

? ? ? ? ? ? for item1in args:

sum1 *= item1

for keyin kwargs:

sum1 *= kwargs[key]

return sum1

return mul

elif char =='-':

def diff(*args):

"""求多個(gè)數(shù)的差"""

# (10, 20, 30)

? ? ? ? ? ? sum1 = args[0]

for indexin range(1,len(args)):

sum1 -= args[index]

return sum1

return diff

else:

print('暫時(shí)不支持這個(gè)運(yùn)算符')

return None

# re是一個(gè)函數(shù)

re = get_operation('+')

# re(10, 20, 30) - 調(diào)用函數(shù)獲取返回值

print(re(10,20,30))# 60? = 10+20+30

# get_operation('*')? - 這個(gè)整體是一個(gè)函數(shù)

# get_operation('*')(1, 2, 3)? - 調(diào)用求乘積的那個(gè)函數(shù),并且獲取返回值

re = get_operation('*')(1,2,3)

print(re)

# 10 - 20 - 30

print(get_operation('-')(100,20,30))

"""

四绣檬、迭代器

1足陨、什么是迭代器(iter)

迭代器是python中的容器類型數(shù)據(jù),同時(shí)可以存儲(chǔ)多個(gè)數(shù)據(jù)河咽。

取迭代器中的數(shù)據(jù)只能一個(gè)一個(gè)取钠右,而且取出來的數(shù)據(jù),在迭代器中就不存在

2忘蟹、迭代器中數(shù)據(jù)的來源

a.將其他數(shù)據(jù)類型轉(zhuǎn)換成迭代器

b.使用生成式飒房、生成器取產(chǎn)生數(shù)據(jù)

3、將數(shù)據(jù)轉(zhuǎn)換成迭代器

所有的序列都可以轉(zhuǎn)換成迭代器

"""

# 將字符串轉(zhuǎn)換成迭代器

iter1 =iter('abcd')

print(iter1)

iter2 =iter([1,10,100,1000])

print(iter2)

iter3 =iter({'name':'小明','age':20})

print(iter3)

"""

4媚值、獲取迭代器中的元素

a.

next(迭代器)/迭代器next() - 取出迭代器中第一個(gè)元素(已經(jīng)去出來的元素再也會(huì)不到迭代器中了)

"""

iter1 =iter('abcd')

print(iter1)

print(next(iter1))

print(next(iter1))

print(next(iter1))

print(next(iter1))

# print(next(iter1))? # 當(dāng)?shù)魇强盏臅r(shí)候狠毯,使用next獲取元素,會(huì)出現(xiàn)StopIteration異常

print(iter2.__next__())

print(next(iter2))

# b.通過for循環(huán)取出迭代器中每個(gè)元素

for xin iter2:

print('==:', x)

# print(next(iter2))? # 出現(xiàn)異常StopIteration褥芒,因?yàn)閒or循環(huán)已經(jīng)將這個(gè)迭代器中的元素取完了

"""

四嚼松、生成器

1、什么是生成器

迭代器就是生成器锰扶;迭代器不一定是生成器

調(diào)用帶有yield關(guān)鍵字的函數(shù)献酗,拿到的結(jié)果就是一個(gè)生成器。生成器中元素就是yield關(guān)鍵字后面的值坷牛。

2罕偎、生成器怎么產(chǎn)生數(shù)據(jù)

只要函數(shù)種有yield關(guān)鍵字,調(diào)用函數(shù)不會(huì)再執(zhí)行函數(shù)體獲取返回值京闰,而是創(chuàng)建一個(gè)生成器颜及。

當(dāng)獲取生成器的元素的時(shí)候,才會(huì)執(zhí)行函數(shù)的函數(shù)體,執(zhí)行到y(tǒng)ield語句為止,

并且將yield后面的值作為結(jié)果返回蹂楣;并且保存當(dāng)前執(zhí)行的位置俏站。

獲取下一個(gè)元素的時(shí)候,就從上次結(jié)束的位置接著往下去執(zhí)行函數(shù)痊土,直到函數(shù)結(jié)束或者遇到y(tǒng)ield為止;

如果遇到y(tǒng)ield就將yield后面的值作為結(jié)果返回肄扎,并且保存當(dāng)前執(zhí)行的位置。

如果函數(shù)結(jié)束了施戴,就出現(xiàn)StopIteration異常反浓。

生成器對應(yīng)的函數(shù),執(zhí)行完成遇到y(tǒng)ield的次數(shù)赞哗,決定了生成器能產(chǎn)生的數(shù)據(jù)的個(gè)數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雷则,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肪笋,更是在濱河造成了極大的恐慌月劈,老刑警劉巖度迂,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猜揪,居然都是意外死亡惭墓,警方通過查閱死者的電腦和手機(jī)而姐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴念,“玉大人,你說我怎么就攤上這事政鼠》缡荩” “怎么了公般?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長官帘。 經(jīng)常有香客問我瞬雹,道長,這世上最難降的妖魔是什么刽虹? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任挖炬,我火速辦了婚禮,結(jié)果婚禮上状婶,老公的妹妹穿的比我還像新娘。我一直安慰自己馅巷,他們只是感情好膛虫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钓猬,像睡著了一般稍刀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敞曹,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天账月,我揣著相機(jī)與錄音,去河邊找鬼澳迫。 笑死局齿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橄登。 我是一名探鬼主播抓歼,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼讥此,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谣妻?” 一聲冷哼從身側(cè)響起萄喳,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹋半,沒想到半個(gè)月后他巨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡减江,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年染突,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片您市。...
    茶點(diǎn)故事閱讀 38,687評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觉痛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茵休,到底是詐尸還是另有隱情薪棒,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布榕莺,位于F島的核電站俐芯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钉鸯。R本人自食惡果不足惜吧史,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贸营。 院中可真熱鬧岩睁,春花似錦、人聲如沸冰啃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扇调。三九已至抢肛,卻和暖如春痴腌,著一層夾襖步出監(jiān)牢的瞬間燃领,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工剥悟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留区岗,地道東北人毁枯。 一個(gè)月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像藐鹤,于是被迫代替她去往敵國和親赂韵。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容