2022-02-16集合和函數(shù)

一、集合

1.1 集合的特征

集合是無(wú)序的,集合中的元素是唯一的,集合一般用于元組或者列表中的元素去重

1.2 集合的格式

格式

變量名=set()變量名.add(元素)# 必須不能初始化值

變量名={元素,元素,,,}

注意:下面寫(xiě)法為一個(gè)空字典,為空默認(rèn)是字典,如果有數(shù)據(jù)在根據(jù)格式判斷為字典還是集合

name={}

1.3 添加元素

1.3.1 add

案例

nums={11,24,45,96,28}nums.add(42)print(nums)#{96, 42, 11, 45, 24, 28}

1.3.2 update

案例

nums={11,24,45,96,28}nums2=["anfly","tom"]nums.update(nums2)print(nums)#{96, 'anfly', 11, 45, 24, 28, 'tom'}

1.4:刪除元素

remove,pop,discard

1.4.1 remove

使用remove刪除集合中的元素 如果有直接刪除 如果沒(méi)有程序報(bào)錯(cuò)

案例:該元素存在

nums={11,24,45,96,28}nums.remove(24)print(nums)#{96, 11, 45, 28}

案例:該元素不存在

nums={11,24,45,96,28}nums.remove(245)print(nums)#KeyError: 245

1.4.2 pop

1、如果集合的元素都是數(shù)字, 刪除時(shí), 刪掉的是最小的數(shù)字, 其余數(shù)字升序排列2、如果集合的元素是非數(shù)字, 刪除時(shí), 刪掉的是隨機(jī)的元素, 其余元素隨機(jī)排列3、如果集合里既有數(shù)字又有非數(shù)字元素, 刪除時(shí):若刪掉的是數(shù)字, 則一定是刪掉了最小的, 其他數(shù)字升序排列, 非數(shù)字元素隨機(jī)排列;若刪掉的非數(shù)字, 則一定是隨機(jī)刪掉了一個(gè), 其他數(shù)字升序排列, 非數(shù)字則隨機(jī)排列.如果集合沒(méi)有元素程序報(bào)錯(cuò)

案例:有元素

nums={11,24,45,96,28}nums.pop()print(nums)#{11, 45, 24, 28}

案例:無(wú)元素

nums={}nums.pop()print(nums)#TypeError: pop expected at least 1 arguments, got 0

1.4.3 discard

使用discard刪除 如果元素存在直接刪除 如果元素不存在不做任何操作

案例:該元素存在

nums={11,24,45,96,28}nums.discard(24)print(nums)#{96, 11, 45, 28}

案例:該元素不存在

nums={11,24,45,96,28}nums.discard(242)print(nums)#{96, 11, 45, 24, 28}

1.5:集合的交集和并集

1.5.1:交集

使用&連接多個(gè)集合,得到相同的元素

案例:存在相同元素

set1={"anfly","tom","haha"}set2={"anfly","susala"}set3=set1&set2print(set3)

返回值:{'anfly'}

案例:存在相同元素

set1={"anfly","tom","haha"}set2={"anfly2","susala"}set3=set1&set2print(set3)

返回值:set()

1.5.2:并集

使用|連接多個(gè)集合,得到全部集合中全部的元素

案例:

set1={1,2,3,4}set2={3,4,5,6}new_set=set1|set2print(new_set)#{1, 2, 3, 4, 5, 6}

1.6 公共方法

1.6.1:運(yùn)算符

image-20210118195122815.png

(1)加法

image-20210118195528110.png

(2)乘法

image-20210118195549097.png

[圖片上傳失敗...(image-3e9eb6-1618241534738)]

(3)in

image-20210118195609362.png

1.6.2:python中的內(nèi)置函數(shù)

image-20210118195732142.png

(1)長(zhǎng)度:len()

image-20210118195807771.png

(2)最大值:max()

image-20210118195846907.png

(3)刪除:del()

image-20210118195927830.png

二、函數(shù)

2.1 什么是函數(shù)

在開(kāi)發(fā)程序時(shí),需要某塊代碼多次,但是為了提高編寫(xiě)的效率以及代碼的重用,所以把具有獨(dú)立功能的代碼塊組織為一個(gè)小模塊,這就是函數(shù)

2.2 函數(shù)定義和調(diào)用

格式

def函數(shù)名():執(zhí)行語(yǔ)句函數(shù)名()#調(diào)用函數(shù)

案例

defhello():print("hello word")hello()

注意:

定義了函數(shù)之后,就相當(dāng)于有了一個(gè)具有某些功能的代碼,想要讓這些代碼能夠執(zhí)行,需要調(diào)用它調(diào)用函數(shù)很簡(jiǎn)單的,通過(guò) 函數(shù)名()即可完成調(diào)用每次調(diào)用函數(shù)時(shí),函數(shù)都會(huì)從頭開(kāi)始執(zhí)行,當(dāng)這個(gè)函數(shù)中的代碼執(zhí)行完畢后,意味著調(diào)用結(jié)束了當(dāng)然了如果函數(shù)中執(zhí)行到了return也會(huì)結(jié)束函數(shù)

2.3 函數(shù)參數(shù)

思考:現(xiàn)在需要定義一個(gè)函數(shù),這個(gè)函數(shù)能夠完成2個(gè)數(shù)的加法運(yùn)算,并且把結(jié)果打印出來(lái),該怎樣設(shè)計(jì)?

案例

defadd2num():a=11b=22c=a+bprintc

思考:如果為了讓一個(gè)函數(shù)更通用,即想讓它計(jì)算哪兩個(gè)數(shù)的和,就讓它計(jì)算哪兩個(gè)數(shù)的和,在定義函數(shù)的時(shí)候可以讓函數(shù)接收數(shù)據(jù)?

引入:參數(shù)傳遞

2.3.1:位置參數(shù)

格式

def函數(shù)名(參數(shù)1,參數(shù)2):代碼塊函數(shù)名(值1,值2)

案例:

deffun(a,b):print("a:",a)print("b:",b)fun(2,3)

結(jié)果:a: 2? ? b:3

小總結(jié)定義時(shí)小括號(hào)中的參數(shù),用來(lái)接收參數(shù)用的,稱(chēng)為 “形參”調(diào)用時(shí)小括號(hào)中的參數(shù),用來(lái)傳遞給函數(shù)用的,稱(chēng)為 “實(shí)參”

2.3.2 關(guān)鍵字參數(shù)

格式

def函數(shù)名(參數(shù)1,參數(shù)2):代碼塊函數(shù)名(參數(shù)1=值1,參數(shù)2=值2)

案例:

deffun(a,b):print("a:",a)print("b:",b)fun(a=2,b=3)

結(jié)果:a: 2? ? b:3

注意:參數(shù)調(diào)用時(shí),可以改變傳參順序,如果有位置參數(shù)需要位置參數(shù)放在關(guān)鍵字參數(shù)前面

案例:

deffun(a,b):print("a:",a)print("b:",b)fun(3,b=2)

結(jié)果:a: 3? ? b:2

如果關(guān)鍵字參數(shù)傳參要在位置參數(shù)之前,將會(huì)報(bào)錯(cuò)

案例:錯(cuò)誤

deffun(a,b):print("a:",a)print("b:",b)fun(a=3,2)#SyntaxError: positional argument follows keyword argument

2.3.3:缺省參數(shù)

在形參中默認(rèn)有值的參數(shù),稱(chēng)之為缺省參數(shù)

案例:調(diào)用函數(shù)時(shí),缺省參數(shù)的值沒(méi)有傳入

defprintinfo(name,age=20):print("name:",name)print("age:",age)printinfo(name="anfly")#name: anfly#age: 20

案例:調(diào)用函數(shù)時(shí),缺省參數(shù)的值傳入

defprintinfo(name,age=20):print("name:",name)print("age:",age)printinfo(name="anfly",age=10)#name: anfly#age: 10

案例

defprintinfo(age=20,name):print("name:",name)print("age:",age)printinfo(name="anfly",age=10)#SyntaxError: non-default argument follows default argument

總結(jié)

調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒(méi)有傳入,則取默認(rèn)值(形式參數(shù)),如果傳入,則取實(shí)際參數(shù)缺省參數(shù)一定要位于位置參數(shù)的最后面

2.3.4 不定長(zhǎng)參數(shù)

有時(shí)可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù), 這些參數(shù)叫做不定長(zhǎng)參數(shù),聲明時(shí)不會(huì)命名。

格式

defprintinfo(*args,**kwargs):print("args:",args)print("kwargs:",kwargs)printinfo(參數(shù))

注意:加了星號(hào)(*)的變量args會(huì)存放所有未命名的變量參數(shù),args為元組? ? 而加**的變量kwargs會(huì)存放命名參數(shù),即形如key=value的參數(shù), kwargs為字典

案例:不定長(zhǎng)參數(shù)* args

defprintinfo(*args):print("args:",args)printinfo(100,200,300,400)#args: (100, 200, 300, 400)

案例:* args不能接收key=value類(lèi)型的參數(shù)

defprintinfo(*args):print("args:",args)printinfo(100,200,300,b=400)#TypeError: printinfo() got an unexpected keyword argument 'b'

案例:不定長(zhǎng)參數(shù)* * kwargs

defprintinfo(**kwargs):print("kwargs:",kwargs)printinfo(a=100,b=200,c=300,d=400)#kwargs: {'a': 100, 'b': 200, 'c': 300, 'd': 400}

案例:* * kwargs不能接收未命名的變量參數(shù)

defprintinfo(**kwargs):print("kwargs:",kwargs)printinfo(100,b=200,c=300,d=400)#TypeError: printinfo() takes 0 positional arguments but 1 was given

2.3.5:參數(shù)位置順序

格式

deffun(位置參數(shù),*args,缺省參數(shù),**kwargs):代碼塊fun(參數(shù)值)

案例

defsun(a,*args,b=22,**kwargs):print("a:",a)print("args:",args)print("b:",b)print("kwargs:",kwargs)sun(100,200,300,b=2,m=3,n=4)

返回值:

a: 100? args: (200, 300)b: 2kwargs: {'m': 3, 'n': 4}

注意:?如果很多個(gè)值都是不定長(zhǎng)參數(shù),那么這種情況下,可以將缺省參數(shù)放到 *args的后面, 但如果有**kwargs的話(huà),**kwargs必須是最后的

2.4:函數(shù)返回值

場(chǎng)景:?我給兒子10塊錢(qián),讓他給我買(mǎi)包煙。這個(gè)例子中,10塊錢(qián)是我給兒子的,就相當(dāng)于調(diào)用函數(shù)時(shí)傳遞到參數(shù),讓兒子買(mǎi)煙這個(gè)事情最終的目標(biāo)是,讓他把煙給你帶回來(lái)然后給你對(duì)么,,,此時(shí)就是返回值

格式

defsum():代碼塊return值sum()

代碼

defsum(a,b):returna+bsum(1,2)

代碼:查看返回值

defsum(a,b):returna+bresult=sum(1,2)#保存函數(shù)的返回值print(result)

2.4.1:多個(gè)return

defcreate_nums(num):print("---1---")ifnum==100:print("---2---")returnnum+1# 函數(shù)中下面的代碼不會(huì)被執(zhí)行,因?yàn)閞eturn除了能夠?qū)?shù)據(jù)返回之外,還有一個(gè)隱藏的功能:結(jié)束函數(shù)print("return執(zhí)行之后不會(huì)繼續(xù)執(zhí)行")print(“1231223")else:print("---3---")returnnum+2print("---4---")result1=create_nums(100)print(result1)# 打印101result2=create_nums(200)print(result2)# 打印202

注意:一個(gè)函數(shù)中可以有多個(gè)return語(yǔ)句,但是只要有一個(gè)return語(yǔ)句被執(zhí)行到,那么這個(gè)函數(shù)就會(huì)結(jié)束了,因此后面的return沒(méi)有什么用處

2.4.2:返回多個(gè)數(shù)據(jù)

代碼

defdivid(a,b):shang=a//b#取模yushu=a%b#取余returnshang,yushu#默認(rèn)是元組result=divid(5,2)print(result)# 輸出(2, 1)

總結(jié):return后面可以是元組,列表、字典等,只要是能夠存儲(chǔ)多個(gè)數(shù)據(jù)的類(lèi)型,就可以一次性返回多個(gè)數(shù)據(jù)

2.5:函數(shù)類(lèi)型

分類(lèi):

1. 無(wú)參數(shù),無(wú)返回值2. 無(wú)參數(shù),有返回值3. 有參數(shù),無(wú)返回值4. 有參數(shù),有返回值

2.5.1:無(wú)參數(shù),無(wú)返回值的函數(shù)

此類(lèi)函數(shù),不能接收參數(shù),也沒(méi)有返回值,一般情況下,打印提示燈類(lèi)似的功能,使用這類(lèi)的函數(shù)

defprintMenu():print('--------------------------')print('? ? ? xx涮涮鍋 點(diǎn)菜系統(tǒng)')print('')print('? 1.? 羊肉涮涮鍋')print('? 2.? 牛肉涮涮鍋')print('? 3.? 豬肉涮涮鍋')print('--------------------------')

2.5.2:無(wú)參數(shù),有返回值的函數(shù)

?此類(lèi)函數(shù),不能接收參數(shù),但是可以返回某個(gè)數(shù)據(jù),一般情況下,像采集數(shù)據(jù),用此類(lèi)函數(shù)

defgetTemperature():# 這里是獲取溫度的一些處理過(guò)程# 為了簡(jiǎn)單起見(jiàn),先模擬返回一個(gè)數(shù)據(jù)return24

2.5.3:有參數(shù),無(wú)返回值的函數(shù)

?此類(lèi)函數(shù),能接收參數(shù),但不可以返回?cái)?shù)據(jù),一般情況下,對(duì)某些變量設(shè)置數(shù)據(jù)而不需結(jié)果時(shí),用此類(lèi)函數(shù)

2.5.4:有參數(shù),有返回值的函數(shù)

?此類(lèi)函數(shù),不僅能接收參數(shù),還可以返回某個(gè)數(shù)據(jù),一般情況下,像數(shù)據(jù)處理并需要結(jié)果的應(yīng)用,用此類(lèi)函數(shù)

# 計(jì)算1~num的累積和(案例需實(shí)際演示)defcalculateNum(num):result=0i=1whilei<=num:result=result+i? ? ? ? i+=1returnresult

2.6:函數(shù)的嵌套

一個(gè)函數(shù)里面又調(diào)用了另外一個(gè)函數(shù),這就是所謂的函數(shù)嵌套調(diào)用

案例

deftestb():print("testb start")print("testb testb? 執(zhí)行")print("testb end")deftesta():print("testa start")testb()print("testa end")

返回值

testa starttestb starttestb testb? 執(zhí)行testbendtestaend

注意:如果函數(shù)A中,調(diào)用了另外一個(gè)函數(shù)B,那么先把函數(shù)B中的任務(wù)都執(zhí)行完畢之后才會(huì)回到上次 函數(shù)A執(zhí)行的位置

課堂作業(yè)

寫(xiě)一個(gè)函數(shù)求三個(gè)數(shù)的和,并返回結(jié)果寫(xiě)一個(gè)函數(shù)求三個(gè)數(shù)的平均值,并返回結(jié)果再寫(xiě)一個(gè)函數(shù)求每個(gè)數(shù)與平均值之間的差,并返回結(jié)果

寫(xiě)一個(gè)函數(shù)打印一條橫線(xiàn)打印自定義行數(shù)的橫線(xiàn)

# 打印一條橫線(xiàn)defprintOneLine():print("-"*30)# 打印多條橫線(xiàn)defprintNumLine(num):i=0# 因?yàn)閜rintOneLine函數(shù)已經(jīng)完成了打印橫線(xiàn)的功能,# 只需要多次調(diào)用此函數(shù)即可whilei<num:printOneLine()i+=1printNumLine(3)

2.8:匿名函數(shù)

lambda函數(shù)也叫匿名函數(shù),即函數(shù)沒(méi)有具體的名稱(chēng)

代碼

g=lambdax:x+1print(g(1))

defg(x):returnx+1print(g(1))

注意:lambda函數(shù)可以賦值給變量,默認(rèn)是返回的,所以不用再加return關(guān)鍵字

注釋:例如g=lambdax:x+1,可以看成如下函數(shù),冒號(hào)前是參數(shù),可以有多個(gè),用逗號(hào)隔開(kāi),冒號(hào)右邊的返回值

三、變量

3.1:局部變量

定義

局部變量,就是在函數(shù)內(nèi)部定義的變量

約束

其作用范圍是這個(gè)函數(shù)內(nèi)部,即只能在這個(gè)函數(shù)中使用,在函數(shù)的外部是不能使用的

代碼

deftest1():a=120print("我是局部變量a:",a)a=240print("修改之后的局部變量a:",a)deftest2():a=360print("我是test02函數(shù)中的局部變量a",a)test1()test2()

返回值

我是局部變量a: 120修改之后的局部變量a: 240我是test02函數(shù)中的局部變量a 360

注意:局部變量的作用,為了臨時(shí)保存數(shù)據(jù)需要在函數(shù)中定義變量來(lái)進(jìn)行存儲(chǔ)當(dāng)函數(shù)調(diào)用時(shí),局部變量被創(chuàng)建,當(dāng)函數(shù)調(diào)用完成后這個(gè)變量就不能夠使用了

3.2:全局變量

定義

在函數(shù)外邊定義的變量叫做全局變量

約束

全局變量能夠在所有的函數(shù)中進(jìn)行訪(fǎng)問(wèn)

代碼

a=100deftest1():print(a)# 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)deftest2():print(a)# 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)# 調(diào)用函數(shù)test1()test2()

返回值: 100? ? 100

3.2.1 全局變量和局部變量名字相同

代碼

a=100#全局變量deftest1():a=300print("修改后的a:",a)deftest2():print(a)# 調(diào)用函數(shù)test1()test2()

返回值:? ? 修改后的a:300? ? 100

注意:函數(shù)中的變量修改不會(huì)導(dǎo)致全局變量改變

3.2.2:全局變量的修改

代碼:global的使用

a=100#全局變量deftest1():globala#將a變成全局變量a=300print("修改后的a",a)deftest2():print(a)# 調(diào)用函數(shù)test1()test2()

注意:在函數(shù)中出現(xiàn)global全局變量的名字 那么這個(gè)函數(shù)中即使出現(xiàn)和全局變量名相同的變量名=數(shù)據(jù) 也理解為對(duì)全局變量進(jìn)行修改,而不是定義局部變量

擴(kuò)展

在一個(gè)函數(shù)中需要對(duì)多個(gè)全局變量進(jìn)行修改,那么可以使用

globala,b# 還可以用多次global聲明都是可以的globalaglobalb

作業(yè):

# info = {"name":"anfly","age":12,"sex":"男"}

# info["age"] = 14

# print(info)

# info = {"name":"anfly","age":12,"sex":"男"}

# info["gender"] = "屬雞"

# # del info

# info.clear()

# print(info)

# info = {"name":"anfly","age":12,"sex":"男"}

# print(len(info))

# info = {"name":"anfly","age":12,"sex":"男"}

# for i in info.keys():

#? ? print(i)

# info = {"name":"anfly","age":12,"sex":"男"}

# for i in info.keys():

#? ? print(i,info[i])

# info = {"name":"anfly","age":12,"sex":"男"}

# for k,v in info.items():

#? ? print(k,v)

# names=["anfly","tom","Meachal"]

# for i,chr in enumerate(names):

#? ? print(i,chr)

# nums = {11,24,45,96,28}

# nums.discard(24)

# print(nums)

# set1 = {"anfly","tom","haha"}

# set2 = {"anfly","susala"}

# set3= set1 & set2

# print(set3)

# set1 = {1, 2, 3, 4}

# set2 = {3, 4, 5, 6}

# new_set = set1 | set2

# print(new_set)

# def fun(a,b):

#? ? print("a:",a)

#? ? print("b:",b)

# fun(2,3)

# def printinfo(name,age=20):

#? ? print("name:",name)

#? ? print("age:",age)

# printinfo(name="anfly",age=10)

# def printinfo(**kwargs):

#? ? print("kwargs:",kwargs)

# printinfo(100,b=200,c=300,d= 400)

# def sun(a,*args,b=22,**kwargs):

#? ? print("a:",a)

#? ? print("args:",args)

#? ? print("b:",b)

#? ? print("kwargs:",kwargs)

# sun(100,200,300,b=2,m=3,n=4)

# def divid(a, b):

#? ? shang = a//b

#? ? yushu = a%b

#? ? return shang, yushu

# result = divid(5, 2)

# print(result)

def printMenu():

print('--------------------------')

print('? ? ? xx涮涮鍋 點(diǎn)菜系統(tǒng)')

print('')

print('? 1.? 羊肉涮涮鍋')

print('? 2.? 牛肉涮涮鍋')

print('? 3.? 豬肉涮涮鍋')

print('--------------------------')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 集合的格式 變量名=set() 變量名.add(元素) # 必須不能初始化值 一、集合 1.1 集合的特征 集合是...
    藝術(shù)家123閱讀 245評(píng)論 0 0
  • 一、集合 1.1 集合的特征 集合是無(wú)序的,集合中的元素是唯一的,集合一般用于元組或者列表中的元素去重 1.2 集...
    淺色年華_7d4f閱讀 389評(píng)論 0 0
  • 集合 1.格式: 變量名={元素,元素,,,} 2.添加元素:(add) nums={11,24,45,96,28...
    我向星明許愿閱讀 533評(píng)論 0 0
  • 集合 1.1 集合的特征 集合是無(wú)序的,集合中的元素是唯一的,集合一般用于元組或者列表中的元素去重 1.2 集合的...
    吹牛逼老藝術(shù)家閱讀 407評(píng)論 0 0
  • 1.字典 格式:變量名={key1:value,key2:value,,,} 1.1根據(jù)鍵訪(fǎng)問(wèn)值 有對(duì)應(yīng)的key的...
    wen_b182閱讀 258評(píng)論 0 0

友情鏈接更多精彩內(nèi)容