一故响、集合
1.1集合的特征
集合是無序的颁独,集合中的元素是唯一的伪冰,集合一般用于元組或者列表中的元素去重
1.2集合的格式
格式
變量名=set()
變量名.add(元素)
# 必須不能初始化值
或
變量名={元素贮聂,元素,吓懈,耻警,}
注意:下面寫法為一個空字典,為空默認(rèn)是字典甘穿,如果有數(shù)據(jù)在根據(jù)格式判斷為字典還是集合
name={}
1.3添加元素
1.3.1add
案例
nums = {11,24,45,96,28}
nums.add(42)
print(nums)
#{96, 42, 11, 45, 24, 28}
1.3.2update
案例
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
使用pop刪除是隨機(jī)刪除集合中的元素 如果集合沒有元素程序報錯
案例:有元素
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 & set2
print(set3)
返回值:{'anfly'}
案例:存在相同的元素
set1 = {"anfly","tom","haha"}
set2 = {"anfly2","susala"}
set3= set1 & set2
print(set3)
返回值:set()
1.5.2:并集
使用|連接多個集合,得到全部集合中全部的元素
案例
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
new_set = set1 | set2
print(new_set)
#{1, 2, 3, 4, 5, 6}
二、函數(shù)
2.1什么是函數(shù)
格式
def 函數(shù)名():
執(zhí)行語句
函數(shù)名() #調(diào)用函數(shù)
案例
def hello():
print("hello word")
hello()
注意:
定義了函數(shù)之后届垫,就相當(dāng)于有了一個具有某些功能的代碼,想要讓這些代碼能夠執(zhí)行均澳,需要調(diào)用它
調(diào)用函數(shù)很簡單的符衔,通過 函數(shù)名() 即可完成調(diào)用
每次調(diào)用函數(shù)時,函數(shù)都會從頭開始執(zhí)行躺盛,當(dāng)這個函數(shù)中的代碼執(zhí)行完畢后形帮,意味著調(diào)用結(jié)束了
當(dāng)然了如果函數(shù)中執(zhí)行到了return也會結(jié)束函數(shù)
2.3函數(shù)參數(shù)
思考:現(xiàn)在需要定義一個函數(shù)周叮,這個函數(shù)能夠完成2個數(shù)的加法運(yùn)算仿耽,并且把結(jié)果打印出來各薇,該怎樣設(shè)計?
案例
def add2num():
a = 11
b = 22
c = a+b
print c
2.3.1:位置參數(shù)
格式
def 函數(shù)名(參數(shù)1,參數(shù)2):
代碼塊
函數(shù)名(值1,值2)
案例
def fun(a,b):
print("a:",a)
print("b:",b)
fun(2,3)
結(jié)果:a:2 b:3
小總結(jié)
定義時小括號中的參數(shù)开缎,用來接收參數(shù)用的林螃,稱為 “形參”
調(diào)用時小括號中的參數(shù),用來傳遞給函數(shù)用的完残,稱為 “實(shí)參”
2.3.2關(guān)鍵字參數(shù)
格式
def 函數(shù)名(參數(shù)1,參數(shù)2):
代碼塊
函數(shù)名(參數(shù)1=值1,參數(shù)2=值2)
案例
def fun(a,b):
print("a:",a)
print("b:",b)
fun(a=2,b=3)
結(jié)果:a:2 b:3
注意:參數(shù)調(diào)用時侮邀,可以改變傳參順序,如果有位置參數(shù)需要位置參數(shù)放在關(guān)鍵字參數(shù)前面
案例:
def fun(a,b):
print("a:",a)
print("b:",b)
fun(3,b=2)
結(jié)果:a:3 b:2
如果關(guān)鍵字參數(shù)傳參要在位置參數(shù)之前铝宵,將會報錯
案例:錯誤
def fun(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ù)华畏,稱之為缺省參數(shù)
案例:調(diào)用函數(shù)時亡笑,缺省參數(shù)的值沒有傳入
def printinfo(name,age=20):
print("name:",name)
print("age:",age)
printinfo(name="anfly")
#name: anfly
#age: 20
案例:調(diào)用函數(shù)時,缺省參數(shù)的值傳入
def printinfo(name,age=20):
print("name:",name)
print("age:",age)
printinfo(name="anfly",age=10)
#name: anfly
#age: 10
案例:
def printinfo(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ù)的值如果沒有傳入晰甚,則取默認(rèn)值(形式參數(shù)),如果傳入蓖捶,則取實(shí)際參數(shù)
缺省參數(shù)一定要位于位置參數(shù)的最后面
2.3.4 不定長參數(shù)
有時可能需要一個函數(shù)能處理必當(dāng)初聲明時更多的參數(shù)扁远,這些參數(shù)叫做不定長參數(shù)刻像,聲明時不會命名并闲。
格式
def printinfo(*args,**kwargs):
print("args:",args)
print("kwargs:",kwargs)
printinfo(參數(shù))
注意:加了星號(*)的變量args會存放所有未命名的變量參數(shù),args為元組
而加**的變量kwargs會存放命名參數(shù)纹冤,即形如key=value的參數(shù)购公, kwargs為字典
案例:不定長參數(shù)*args
def printinfo(*args):
print("args:",args)
printinfo(100,200,300,400)
#args: (100, 200, 300, 400)
案例:*args不能接收key=value類型的參數(shù)
def printinfo(*args):
print("args:",args)
printinfo(100,200,300,b = 400)
#TypeError: printinfo() got an unexpected keyword argument 'b'
案例:不定長參數(shù) **kwargs
def printinfo(**kwargs):
print("kwargs:",kwargs)
printinfo(a=100,b=200,c=300,d= 400)
#kwargs: {'a': 100, 'b': 200, 'c': 300, 'd': 400}
案例:**kwargs不能接收未命名的變量參數(shù)
def printinfo(**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ù)位置順序
格式
def fun(位置參數(shù),*args,缺省參數(shù),**kwargs):
代碼塊
fun(參數(shù)值)
案例
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)
返回值:
a: 100
args: (200, 300)
b: 2
kwargs: {'m': 3, 'n': 4}
注意:?如果很多個值都是不定長參數(shù)宏浩,那么這種情況下靠瞎,可以將缺省參數(shù)放到 *args的后面, 但如果有**kwargs的話佳窑,**kwargs必須是最后的
2.4函數(shù)返回值
場景:
我給兒子10塊錢父能,讓他給我買包煙。在這個例子中溉委,10塊錢是我給兒子的爱榕,就相當(dāng)于調(diào)用函數(shù)時傳遞到參數(shù),讓兒子買煙這個事情最終的目的是藻三,讓他把煙給你帶回來然后給你對跪者,,岖寞,柜蜈,指巡,此時煙就是返回值
格式:
def sum():
代碼塊
return 值
sum()
代碼
def sum(a,b):
return a+b
sum(1,2)
代碼:查看返回值
def sum(a,b):
return a+b
result = sum(1,2) #保存函數(shù)的返回值
print(result)
2.4.1:多個return
def create_nums(num):
print("---1---")
if num == 100:
print("---2---")
return num+1 # 函數(shù)中下面的代碼不會被執(zhí)行藻雪,因?yàn)閞eturn除了能夠?qū)?shù)據(jù)返回之外狸吞,還有一個隱藏的功能:結(jié)束函數(shù)
print("return執(zhí)行之后不會繼續(xù)執(zhí)行")
print(“1231223")
else:
print("---3---")
return num+2
print("---4---")
result1 = create_nums(100)
print(result1) # 打印101
result2 = create_nums(200)
print(result2) # 打印202
注意:一個函數(shù)中可以有多個return語句,但是只要有一個return語句被執(zhí)行到便斥,那么這個函數(shù)就會結(jié)束了威始,因此后面的return沒有什么用處
2.4.2:返回多個數(shù)據(jù)
代碼
def divid(a, b):
shang = a//b #取模
yushu = a%b #取余
return shang, yushu #默認(rèn)是元組
result = divid(5, 2)
print(result)
# 輸出(2, 1)
總結(jié):return后面可以是元組,列表晋渺、字典等脓斩,只要是能夠存儲多個數(shù)據(jù)的類型,就可以一次性返回多個數(shù)據(jù)
2.5:函數(shù)類型
分類:
1. 無參數(shù)八千,無返回值
2. 無參數(shù)挪挤,有返回值
3. 有參數(shù),無返回值
4. 有參數(shù)鸠信,有返回值
2.5.1:無參數(shù)论寨,無返回值的函數(shù)
此類函數(shù),不能接收參數(shù)绰垂,也沒有返回值火焰,一般情況下,打印提示燈類似的功能,使用這類的函數(shù)
def printMenu():
print('--------------------------')
print(' xx涮涮鍋 點(diǎn)菜系統(tǒng)')
print('')
print(' 1. 羊肉涮涮鍋')
print(' 2. 牛肉涮涮鍋')
print(' 3. 豬肉涮涮鍋')
print('--------------------------')
2.5.2:無參數(shù)绒怨,有返回值的函數(shù)
此類函數(shù)谦疾,不能接收參數(shù)念恍,但是可以返回某個數(shù)據(jù),一般情況下峰伙,像采集數(shù)據(jù)瞳氓,用此類函數(shù)
def getTemperature():
# 這里是獲取溫度的一些處理過程
# 為了簡單起見,先模擬返回一個數(shù)據(jù)
return 24
2.5.3:有參數(shù)顿膨,無返回值的函數(shù)
此類函數(shù)恋沃,能接收參數(shù)必指,但不可以返回數(shù)據(jù),一般情況下梅割,對某些變量設(shè)置數(shù)據(jù)而不需結(jié)果時葛家,用此類函數(shù)
2.5.4:有參數(shù),有返回值的函數(shù)
此類函數(shù)底燎,不僅能接收參數(shù)弹砚,還可以返回某個數(shù)據(jù),一般情況下朱沃,像數(shù)據(jù)處理并需要結(jié)果的應(yīng)用,用此類函數(shù)
# 計算1~num的累積和(案例需實(shí)際演示)
def calculateNum(num):
result = 0
i = 1
while i<=num:
result = result + i
i+=1
return result
2.6:韓式的嵌套
一個函數(shù)里面有調(diào)用了另外一個函數(shù)搬卒,這就是所謂的函數(shù)嵌套調(diào)用
案例:
def testb():
print("testb start")
print("testb testb 執(zhí)行")
print("testb end")
def testa():
print("testa start")
testb()
print("testa end")
返回值
testa start
testb start
testb testb 執(zhí)行
testb end
testa end
注意:如果函數(shù)A中敬察,調(diào)用了另外一個函數(shù)B,那么先把函數(shù)B中的任務(wù)都執(zhí)行完畢之后才會回到上次 函數(shù)A執(zhí)行的位置
課堂作業(yè)
寫一個函數(shù)求三個數(shù)的和蹂安,并返回結(jié)果
寫一個函數(shù)求三個數(shù)的平均值锐帜,并返回結(jié)果
再寫一個函數(shù)求每個數(shù)與平均值之間的差,并返回結(jié)果
寫一個函數(shù)打印一條橫線
打印自定義行數(shù)的橫線
# 打印一條橫線
def printOneLine():
print("-"*30)
# 打印多條橫線
def printNumLine(num):
i=0
# 因?yàn)閜rintOneLine函數(shù)已經(jīng)完成了打印橫線的功能允瞧,
# 只需要多次調(diào)用此函數(shù)即可
while i<num:
printOneLine()
i+=1
printNumLine(3)
2.8:匿名函數(shù)
lambda函數(shù)也叫匿名函數(shù)蛮拔,即函數(shù)沒有具體的名稱
代碼
g = lambda x :x+1
print(g(1))
def g(x):
return x + 1
print(g(1))
注意:lambda函數(shù)可以賦值給變量建炫,默認(rèn)是返回的,所以不用再加return關(guān)鍵字
注釋:例如g = lambda x:x+1,可以看成如下函數(shù)艺配,冒號前是參數(shù)衍慎,可以有多個,用逗號隔開赠法,冒號右邊的返回值
三乔夯、變量
3.1:局部變量
定義
局部變量,就是在函數(shù)內(nèi)部定義的變量
約束
其作用范圍是這個函數(shù)內(nèi)部驯嘱,即只能在這個函數(shù)中使用鞠评,在函數(shù)的外部是不能使用的
代碼
def test1():
a = 120
print("我是局部變量a:",a)
a = 240
print("修改之后的局部變量a:",a)
def test2():
a =360
print("我是test02函數(shù)中的局部變量a",a)
test1()
test2()
返回值
我是局部變量a: 120
修改之后的局部變量a: 240
我是test02函數(shù)中的局部變量a 360
注意:局部變量的作用,為了臨時保存數(shù)據(jù)需要在函數(shù)中定義變量來進(jìn)行存儲
當(dāng)函數(shù)調(diào)用時聋涨,局部變量被創(chuàng)建,當(dāng)函數(shù)調(diào)用完成后這個變量就不能夠使用了
3.2:全局變量
定義
在函數(shù)外邊定義的變量叫做全局變量
約束
全局變量能夠在所有的函數(shù)中進(jìn)行訪問
代碼
a = 100
def test1():
print(a) # 雖然沒有定義變量a但是依然可以獲取其數(shù)據(jù)
def test2():
print(a) # 雖然沒有定義變量a但是依然可以獲取其數(shù)據(jù)
# 調(diào)用函數(shù)
test1()
test2()
返回值:100 100
3.2.1 全局變量和局部變量名字相同
代碼
a = 100 #全局變量
def test1():
a= 300
print("修改后的a:",a)
def test2():
print(a)
# 調(diào)用函數(shù)
test1()
test2()
返回值:修改后的a:300 100
注意:函數(shù)中的變量修改不會導(dǎo)致全局變量改變
3.2.2:全局變量的修改
代碼:global的使用
a = 100 #全局變量
def test1():
global a #將a變成全局變量
a= 300
print("修改后的a",a)
def test2():
print(a)
# 調(diào)用函數(shù)
test1()
test2()
注意:在函數(shù)中出現(xiàn)global 全局變量的名字 那么這個函數(shù)中即使出現(xiàn)和全局變量名相同的變量名 = 數(shù)據(jù) 也理解為對全局變量進(jìn)行修改脊凰,而不是定義局部變量
擴(kuò)展
在一個函數(shù)中需要對多個全局變量進(jìn)行修改狸涌,那么可以使用
global a, b
# 還可以用多次global聲明都是可以的
global a
global b