集合和函數(shù)

一故响、集合

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末最岗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子懒豹,更是在濱河造成了極大的恐慌驯用,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豹储,死亡現(xiàn)場離奇詭異淘这,居然都是意外死亡铝穷,警方通過查閱死者的電腦和手機(jī)佳魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宁脊,“玉大人贤姆,你說我怎么就攤上這事∽” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵街夭,是天一觀的道長躏筏。 經(jīng)常有香客問我,道長埃碱,這世上最難降的妖魔是什么弱卡? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任婶博,我火速辦了婚禮,結(jié)果婚禮上凡人,老公的妹妹穿的比我還像新娘挠轴。我一直安慰自己,他們只是感情好岸晦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布启上。 她就那樣靜靜地躺著,像睡著了一般倒慧。 火紅的嫁衣襯著肌膚如雪包券。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天付秕,我揣著相機(jī)與錄音侍郭,去河邊找鬼俩垃。 笑死汰寓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跃闹。 我是一名探鬼主播毛好,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肌访,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吼驶?” 一聲冷哼從身側(cè)響起蟹演,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酒请,沒想到半個月后骡技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羞反,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年布朦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼窗。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡是趴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膏秫,到底是詐尸還是另有隱情,我是刑警寧澤做盅,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站吹榴,受9級特大地震影響亭敢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜图筹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一帅刀、第九天 我趴在偏房一處隱蔽的房頂上張望让腹。 院中可真熱鬧,春花似錦扣溺、人聲如沸骇窍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹纳。三九已至,卻和暖如春驱犹,著一層夾襖步出監(jiān)牢的瞬間嘲恍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工雄驹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佃牛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓医舆,卻偏偏與公主長得像俘侠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彬向,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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