一、集合
1.1 集合的特征
集合是無序的椎瘟,集合中的元素是唯一的,集合一般用于元組或者列表中的元素去重
1.2 集合的格式
格式
變量名=set()變量名.add(元素)# 必須不能初始化值
或
變量名={元素角溃,元素杠愧,,持际,}
注意:下面寫法為一個空字典沃琅,為空默認是字典,如果有數(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刪除集合中的元素 如果有直接刪除 如果沒有程序報錯
案例:該元素存在
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ù)字升序排列2、如果集合的元素是非數(shù)字, 刪除時, 刪掉的是隨機的元素, 其余元素隨機排列3郭脂、如果集合里既有數(shù)字又有非數(shù)字元素, 刪除時:若刪掉的是數(shù)字, 則一定是刪掉了最小的, 其他數(shù)字升序排列, 非數(shù)字元素隨機排列;若刪掉的非數(shù)字, 則一定是隨機刪掉了一個, 其他數(shù)字升序排列, 非數(shù)字則隨機排列.如果集合沒有元素程序報錯
案例:有元素
nums={11,24,45,96,28}nums.pop()print(nums)#{11, 45, 24, 28}
案例:無元素
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:交集
使用&連接多個集合,得到相同的元素
案例:存在相同元素
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:并集
使用|連接多個集合,得到全部集合中全部的元素
案例:
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:運算符
image-20210118195122815.png
(1)加法
image-20210118195528110.png
(2)乘法
image-20210118195549097.png
[圖片上傳失敗...(image-3e9eb6-1618241534738)]
(3)in
image-20210118195609362.png
1.6.2:python中的內置函數(shù)
image-20210118195732142.png
(1)長度:len()
image-20210118195807771.png
(2)最大值:max()
image-20210118195846907.png
(3)刪除:del()
image-20210118195927830.png
二年碘、函數(shù)
2.1 什么是函數(shù)
在開發(fā)程序時,需要某塊代碼多次展鸡,但是為了提高編寫的效率以及代碼的重用屿衅,所以把具有獨立功能的代碼塊組織為一個小模塊,這就是函數(shù)
2.2 函數(shù)定義和調用
格式
def函數(shù)名():執(zhí)行語句函數(shù)名()#調用函數(shù)
案例
defhello():print("hello word")hello()
注意:
定義了函數(shù)之后莹弊,就相當于有了一個具有某些功能的代碼涤久,想要讓這些代碼能夠執(zhí)行,需要調用它調用函數(shù)很簡單的忍弛,通過 函數(shù)名()即可完成調用每次調用函數(shù)時响迂,函數(shù)都會從頭開始執(zhí)行,當這個函數(shù)中的代碼執(zhí)行完畢后细疚,意味著調用結束了當然了如果函數(shù)中執(zhí)行到了return也會結束函數(shù)
2.3 函數(shù)參數(shù)
思考:現(xiàn)在需要定義一個函數(shù)蔗彤,這個函數(shù)能夠完成2個數(shù)的加法運算,并且把結果打印出來疯兼,該怎樣設計然遏?
案例
defadd2num():a=11b=22c=a+bprintc
思考:如果為了讓一個函數(shù)更通用,即想讓它計算哪兩個數(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)
結果:a: 2? ? b:3
小總結定義時小括號中的參數(shù),用來接收參數(shù)用的来氧,稱為 “形參”調用時小括號中的參數(shù)诫给,用來傳遞給函數(shù)用的,稱為 “實參”
2.3.2 關鍵字參數(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)
結果:a: 2? ? b:3
注意:參數(shù)調用時,可以改變傳參順序啦扬,如果有位置參數(shù)需要位置參數(shù)放在關鍵字參數(shù)前面
案例:
deffun(a,b):print("a:",a)print("b:",b)fun(3,b=2)
結果:a: 3? ? b:2
如果關鍵字參數(shù)傳參要在位置參數(shù)之前中狂,將會報錯
案例:錯誤
deffun(a,b):print("a:",a)print("b:",b)fun(a=3,2)#SyntaxError: positional argument follows keyword argument
2.3.3:缺省參數(shù)
在形參中默認有值的參數(shù),稱之為缺省參數(shù)
案例:調用函數(shù)時扑毡,缺省參數(shù)的值沒有傳入
defprintinfo(name,age=20):print("name:",name)print("age:",age)printinfo(name="anfly")#name: anfly#age: 20
案例:調用函數(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
總結
調用函數(shù)時,缺省參數(shù)的值如果沒有傳入瞄摊,則取默認值(形式參數(shù))勋又,如果傳入,則取實際參數(shù)缺省參數(shù)一定要位于位置參數(shù)的最后面
2.3.4 不定長參數(shù)
有時可能需要一個函數(shù)能處理比當初聲明時更多的參數(shù), 這些參數(shù)叫做不定長參數(shù)换帜,聲明時不會命名楔壤。
格式
defprintinfo(*args,**kwargs):print("args:",args)print("kwargs:",kwargs)printinfo(參數(shù))
注意:加了星號(*)的變量args會存放所有未命名的變量參數(shù),args為元組? ? 而加**的變量kwargs會存放命名參數(shù)惯驼,即形如key=value的參數(shù)蹲嚣, kwargs為字典
案例:不定長參數(shù)* args
defprintinfo(*args):print("args:",args)printinfo(100,200,300,400)#args: (100, 200, 300, 400)
案例:* args不能接收key=value類型的參數(shù)
defprintinfo(*args):print("args:",args)printinfo(100,200,300,b=400)#TypeError: printinfo() got an unexpected keyword argument 'b'
案例:不定長參數(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}
注意:?如果很多個值都是不定長參數(shù)递瑰,那么這種情況下,可以將缺省參數(shù)放到 *args的后面隙畜, 但如果有**kwargs的話抖部,**kwargs必須是最后的
2.4:函數(shù)返回值
場景:?我給兒子10塊錢,讓他給我買包煙议惰。這個例子中慎颗,10塊錢是我給兒子的,就相當于調用函數(shù)時傳遞到參數(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:多個return
defcreate_nums(num):print("---1---")ifnum==100:print("---2---")returnnum+1# 函數(shù)中下面的代碼不會被執(zhí)行,因為return除了能夠將數(shù)據(jù)返回之外县习,還有一個隱藏的功能:結束函數(shù)print("return執(zhí)行之后不會繼續(xù)執(zhí)行")print(“1231223")else:print("---3---")returnnum+2print("---4---")result1=create_nums(100)print(result1)# 打印101result2=create_nums(200)print(result2)# 打印202
注意:一個函數(shù)中可以有多個return語句,但是只要有一個return語句被執(zhí)行到谆趾,那么這個函數(shù)就會結束了躁愿,因此后面的return沒有什么用處
2.4.2:返回多個數(shù)據(jù)
代碼
defdivid(a,b):shang=a//b#取模yushu=a%b#取余returnshang,yushu#默認是元組result=divid(5,2)print(result)# 輸出(2, 1)
總結:return后面可以是元組,列表沪蓬、字典等彤钟,只要是能夠存儲多個數(shù)據(jù)的類型,就可以一次性返回多個數(shù)據(jù)
2.5:函數(shù)類型
分類:
1. 無參數(shù)跷叉,無返回值2. 無參數(shù)逸雹,有返回值3. 有參數(shù),無返回值4. 有參數(shù)云挟,有返回值
2.5.1:無參數(shù)梆砸,無返回值的函數(shù)
此類函數(shù),不能接收參數(shù)园欣,也沒有返回值帖世,一般情況下,打印提示燈類似的功能沸枯,使用這類的函數(shù)
defprintMenu():print('--------------------------')print('? ? ? xx涮涮鍋 點菜系統(tǒng)')print('')print('? 1.? 羊肉涮涮鍋')print('? 2.? 牛肉涮涮鍋')print('? 3.? 豬肉涮涮鍋')print('--------------------------')
2.5.2:無參數(shù)日矫,有返回值的函數(shù)
?此類函數(shù),不能接收參數(shù)绑榴,但是可以返回某個數(shù)據(jù)哪轿,一般情況下,像采集數(shù)據(jù)翔怎,用此類函數(shù)
defgetTemperature():# 這里是獲取溫度的一些處理過程# 為了簡單起見窃诉,先模擬返回一個數(shù)據(jù)return24
2.5.3:有參數(shù)杨耙,無返回值的函數(shù)
?此類函數(shù),能接收參數(shù)褐奴,但不可以返回數(shù)據(jù)按脚,一般情況下,對某些變量設置數(shù)據(jù)而不需結果時敦冬,用此類函數(shù)
2.5.4:有參數(shù)辅搬,有返回值的函數(shù)
?此類函數(shù),不僅能接收參數(shù)脖旱,還可以返回某個數(shù)據(jù)堪遂,一般情況下,像數(shù)據(jù)處理并需要結果的應用萌庆,用此類函數(shù)
# 計算1~num的累積和(案例需實際演示)defcalculateNum(num):result=0i=1whilei<=num:result=result+i? ? ? ? i+=1returnresult
2.6:函數(shù)的嵌套
一個函數(shù)里面又調用了另外一個函數(shù)溶褪,這就是所謂的函數(shù)嵌套調用
案例
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中互订,調用了另外一個函數(shù)B伏穆,那么先把函數(shù)B中的任務都執(zhí)行完畢之后才會回到上次 函數(shù)A執(zhí)行的位置
課堂作業(yè)
寫一個函數(shù)求三個數(shù)的和啡省,并返回結果寫一個函數(shù)求三個數(shù)的平均值适秩,并返回結果再寫一個函數(shù)求每個數(shù)與平均值之間的差猛铅,并返回結果
寫一個函數(shù)打印一條橫線打印自定義行數(shù)的橫線
# 打印一條橫線defprintOneLine():print("-"*30)# 打印多條橫線defprintNumLine(num):i=0# 因為printOneLine函數(shù)已經完成了打印橫線的功能剃斧,# 只需要多次調用此函數(shù)即可whilei<num:printOneLine()i+=1printNumLine(3)
2.8:匿名函數(shù)
lambda函數(shù)也叫匿名函數(shù)棱烂,即函數(shù)沒有具體的名稱
代碼
g=lambdax:x+1print(g(1))
defg(x):returnx+1print(g(1))
注意:lambda函數(shù)可以賦值給變量鱼的,默認是返回的占遥,所以不用再加return關鍵字
注釋:例如g=lambdax:x+1,可以看成如下函數(shù)俯抖,冒號前是參數(shù),可以有多個瓦胎,用逗號隔開芬萍,冒號右邊的返回值
三、變量
3.1:局部變量
定義
局部變量搔啊,就是在函數(shù)內部定義的變量
約束
其作用范圍是這個函數(shù)內部柬祠,即只能在這個函數(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ù)據(jù)需要在函數(shù)中定義變量來進行存儲當函數(shù)調用時瓶盛,局部變量被創(chuàng)建,當函數(shù)調用完成后這個變量就不能夠使用了
3.2:全局變量
定義
在函數(shù)外邊定義的變量叫做全局變量
約束
全局變量能夠在所有的函數(shù)中進行訪問
代碼
a=100deftest1():print(a)# 雖然沒有定義變量a但是依然可以獲取其數(shù)據(jù)deftest2():print(a)# 雖然沒有定義變量a但是依然可以獲取其數(shù)據(jù)# 調用函數(shù)test1()test2()
返回值: 100? ? 100
3.2.1 全局變量和局部變量名字相同
代碼
a=100#全局變量deftest1():a=300print("修改后的a:",a)deftest2():print(a)# 調用函數(shù)test1()test2()
返回值:? ? 修改后的a:300? ? 100
注意:函數(shù)中的變量修改不會導致全局變量改變
3.2.2:全局變量的修改
代碼:global的使用
a=100#全局變量deftest1():globala#將a變成全局變量a=300print("修改后的a",a)deftest2():print(a)# 調用函數(shù)test1()test2()
注意:在函數(shù)中出現(xiàn)global全局變量的名字 那么這個函數(shù)中即使出現(xiàn)和全局變量名相同的變量名=數(shù)據(jù) 也理解為對全局變量進行修改示罗,而不是定義局部變量
擴展
在一個函數(shù)中需要對多個全局變量進行修改惩猫,那么可以使用
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涮涮鍋 點菜系統(tǒng)')
print('')
print('? 1.? 羊肉涮涮鍋')
print('? 2.? 牛肉涮涮鍋')
print('? 3.? 豬肉涮涮鍋')
print('--------------------------')