基礎(chǔ)班-第06-07天{函數(shù)}

函數(shù)介紹

<1>什么是函數(shù)

請(qǐng)看如下代碼:

一大串的print代碼......

運(yùn)行后打印出一個(gè)佛祖的畫(huà)像骗露。
想一想:

如果一個(gè)程序在不同的地方需要輸出“佛祖鎮(zhèn)樓”幔戏,程序應(yīng)該怎樣設(shè)計(jì)缩挑?

if 條件1:
   輸出‘佛祖鎮(zhèn)樓’
......
if 條件2:
   輸出‘佛祖鎮(zhèn)樓’
......

如果需要輸出多次弹渔,是否意味著編寫(xiě)這塊代碼多次呢媒熊?

小總結(jié):

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

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

<1>定義函數(shù)

定義函數(shù)的格式如下:

    def 函數(shù)名():
        代碼

demo:

    # 定義一個(gè)函數(shù)度秘,能夠完成打印信息的功能
    def printInfo():
        print '------------------------------------'
        print '         生命苦短,我用Python'
        print '------------------------------------'

<2>調(diào)用函數(shù)

定義了函數(shù)之后剑梳,就相當(dāng)于有了一個(gè)具有某些功能的代碼,想要讓這些代碼能夠執(zhí)行侨赡,需要調(diào)用它。
調(diào)用函數(shù)很簡(jiǎn)單的齐婴,通過(guò) 函數(shù)名() 即可完成調(diào)用柠偶。
demo:

    # 定義完函數(shù)后毡证,函數(shù)是不會(huì)自動(dòng)執(zhí)行的料睛,需要調(diào)用它才可以
    printInfo()

<3>練一練

要求:定義一個(gè)函數(shù),能夠輸出自己的姓名和年齡摇邦,并且調(diào)用這個(gè)函數(shù)讓它執(zhí)行

  • 使用def定義函數(shù)
  • 編寫(xiě)完函數(shù)之后恤煞,通過(guò) 函數(shù)名() 進(jìn)行調(diào)用

函數(shù)的文檔說(shuō)明

>>> def test(a,b):
...     "用來(lái)完成對(duì)2個(gè)數(shù)求和"
...     print("%d"%(a+b))
... 
>>> 
>>> test(11,22)
33

如果執(zhí)行,以下代碼

>>> help(test)

能夠看到test函數(shù)的相關(guān)說(shuō)明

Help on function test in module __main__:

test(a, b)
    用來(lái)完成對(duì)2個(gè)數(shù)求和
(END)

函數(shù)參數(shù)(一)

思考一個(gè)問(wèn)題喜喂,如下:

現(xiàn)在需要定義一個(gè)函數(shù),這個(gè)函數(shù)能夠完成2個(gè)數(shù)的加法運(yùn)算诈茧,并且把結(jié)果打印出來(lái),該怎樣設(shè)計(jì)鸥昏?下面的代碼可以嗎?有什么缺陷嗎膳汪?

  def add2num():
      a = 11
      b = 22
      c = a+b
      print c

為了讓一個(gè)函數(shù)更通用,即想讓它計(jì)算哪兩個(gè)數(shù)的和征字,就讓它計(jì)算哪兩個(gè)數(shù)的和匙姜,在定義函數(shù)的時(shí)候可以讓函數(shù)接收數(shù)據(jù),就解決了這個(gè)問(wèn)題郭计,這就是函數(shù)的參數(shù)

<1> 定義帶有參數(shù)的函數(shù)

示例如下:

    def add2num(a, b):
        c = a+b
        print c

<2> 調(diào)用帶有參數(shù)的函數(shù)

以調(diào)用上面的add2num(a, b)函數(shù)為例:

    def add2num(a, b):
        c = a+b
        print c

    add2num(11, 22) #調(diào)用帶有參數(shù)的函數(shù)時(shí)澎迎,需要在小括號(hào)中夹供,傳遞數(shù)據(jù)

調(diào)用帶有參數(shù)函數(shù)的運(yùn)行過(guò)程:


1.gif

<3> 練一練

要求:定義一個(gè)函數(shù),完成前2個(gè)數(shù)完成加法運(yùn)算氛什,然后對(duì)第3個(gè)數(shù),進(jìn)行減法贸铜;然后調(diào)用這個(gè)函數(shù)

  • 使用def定義函數(shù),要注意有3個(gè)參數(shù)
  • 調(diào)用的時(shí)候渤早,這個(gè)函數(shù)定義時(shí)有幾個(gè)參數(shù),那么就需要傳遞幾個(gè)參數(shù)

<4> 調(diào)用函數(shù)時(shí)參數(shù)的順序

>>> def test(a,b):
...     print(a,b)
... 
>>> test(1,2)
1 2
>>> test(b=1,a=2)
2 1
>>> 
>>> test(b=1,2)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> 
>>>

<5> 小總結(jié)

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

函數(shù)返回值(一)

<1>“返回值”介紹

現(xiàn)實(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í)煙就是返回值

開(kāi)發(fā)中的場(chǎng)景:

定義了一個(gè)函數(shù)抽减,完成了獲取室內(nèi)溫度,想一想是不是應(yīng)該把這個(gè)結(jié)果給調(diào)用者史汗,只有調(diào)用者擁有了這個(gè)返回值,才能夠根據(jù)當(dāng)前的溫度做適當(dāng)?shù)恼{(diào)整

綜上所述:

  • 所謂“返回值”,就是程序中函數(shù)完成一件事情后副硅,最后給調(diào)用者的結(jié)果

<2>帶有返回值的函數(shù)

想要在函數(shù)中把結(jié)果返回給調(diào)用者,需要在函數(shù)中使用return

如下示例:

    def add2num(a, b):
        c = a+b
        return c

或者

    def add2num(a, b):
        return a+b

<3>保存函數(shù)的返回值

在本小節(jié)剛開(kāi)始的時(shí)候,說(shuō)過(guò)的“買(mǎi)煙”的例子中,最后兒子給你煙時(shí)零蓉,你一定是從兒子手中接過(guò)來(lái) 對(duì)么,程序也是如此章喉,如果一個(gè)函數(shù)返回了一個(gè)數(shù)據(jù)落包,那么想要用這個(gè)數(shù)據(jù),那么就需要保存

保存函數(shù)的返回值示例如下:

    #定義函數(shù)
    def add2num(a, b):
        return a+b

    #調(diào)用函數(shù)撮竿,順便保存函數(shù)的返回值
    result = add2num(100,98)

    #因?yàn)閞esult已經(jīng)保存了add2num的返回值髓需,所以接下來(lái)就可以使用了
    print result

結(jié)果:

198

4種函數(shù)的類(lèi)型

函數(shù)根據(jù)有沒(méi)有參數(shù),有沒(méi)有返回值咧擂,可以相互組合俯逾,一共有4種

  • 無(wú)參數(shù)桌肴,無(wú)返回值
  • 無(wú)參數(shù)水醋,又反悔
  • 有參數(shù),無(wú)返回值
  • 有參數(shù),有返回值

<1>無(wú)參數(shù)耀盗,無(wú)返回值的函數(shù)

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

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

結(jié)果:


image.png

<2>無(wú)參數(shù)婿着,有返回值的函數(shù)

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

    # 獲取溫度
    def getTemperature():

        #這里是獲取溫度的一些處理過(guò)程

        #為了簡(jiǎn)單起見(jiàn)斩启,先模擬返回一個(gè)數(shù)據(jù)
        return 24

    temperature = getTemperature()
    print '當(dāng)前的溫度為:',temperature

結(jié)果:

    當(dāng)前的溫度為: 24

<3>有參數(shù),無(wú)返回值的函數(shù)

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

<4>有參數(shù)缆毁,有返回值的函數(shù)

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

    # 計(jì)算1~num的累積和
    def calculateNum(num):

        result = 0
        i = 1
        while i<=num:

            result = result + i

            i+=1

        return result

    result = calculateNum(100)
    print '1~100的累積和為:',result

結(jié)果:

    1~100的累積和為: 5050

<5>小總結(jié)

  • 函數(shù)根據(jù)有沒(méi)有參數(shù),有沒(méi)有返回值可以相互組合
  • 定義函數(shù)時(shí),是根據(jù)實(shí)際的功能需求來(lái)設(shè)計(jì)的,所以不同開(kāi)發(fā)人員編寫(xiě)的函數(shù)類(lèi)型各不相同

函數(shù)的嵌套調(diào)用

    def testB():
        print '---- testB start----'
        print '這里是testB函數(shù)執(zhí)行的代碼...(省略)...'
        print '---- testB end----'


    def testA():

        print '---- testA start----'

        testB()

        print '---- testA end----'

    testA()

結(jié)果:

    ---- testA start----
    ---- testB start----
    這里是testB函數(shù)執(zhí)行的代碼...(省略)...
    ---- testB end----
    ---- testA end----

小總結(jié):

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


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

函數(shù)應(yīng)用:打印圖形和數(shù)學(xué)計(jì)算

目標(biāo)

  • 感受函數(shù)的嵌套調(diào)用
  • 感受程序設(shè)計(jì)的思路,復(fù)雜問(wèn)題分解為簡(jiǎn)單問(wèn)題

思考&實(shí)現(xiàn)1

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

參考代碼1

# 打印一條橫線
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)

思考&實(shí)現(xiàn)2

1.寫(xiě)一個(gè)函數(shù)求三個(gè)數(shù)的和
2.寫(xiě)一個(gè)函數(shù)求三個(gè)數(shù)的平均值

參考代碼2

# 求3個(gè)數(shù)的和
def sum3Number(a,b,c):
    return a+b+c # return 的后面可以是數(shù)值,也可是一個(gè)表達(dá)式

# 完成對(duì)3個(gè)數(shù)求平均值
def average3Number(a,b,c):

    # 因?yàn)閟um3Number函數(shù)已經(jīng)完成了3個(gè)數(shù)的就和,所以只需調(diào)用即可
    # 即把接收到的3個(gè)數(shù),當(dāng)做實(shí)參傳遞即可
    sumResult = sum3Number(a,b,c)
    aveResult = sumResult/3.0
    return aveResult

# 調(diào)用函數(shù)骚秦,完成對(duì)3個(gè)數(shù)求平均值
result = average3Number(11,2,55)
print("average is %d"%result)

局部變量

<1>什么是局部變量

如下圖所示:


image.png

小總結(jié)

  • 局部變量胞得,就是在函數(shù)內(nèi)部定義的變量
  • 不同的函數(shù)跃巡,可以定義相同的名字的局部變量,但是各用個(gè)的不會(huì)產(chǎn)生影響
  • 局部變量的作用兔朦,為了臨時(shí)保存數(shù)據(jù)需要在函數(shù)中定義變量來(lái)進(jìn)行存儲(chǔ)俐填,這就是它的作用

全局變量

<1>什么是全局變量

如果一個(gè)變量,既能在一個(gè)函數(shù)中使用驶悟,也能在其他的函數(shù)中使用,這樣的變量就是全局變量
demo如下:

    # 定義全局變量
    a = 100

    def test1():
        print(a)

    def test2():
        print(a)

    # 調(diào)用函數(shù)
    test1()
    test2()

運(yùn)行結(jié)果:


image.png

<2>全局變量和局部變量名字相同問(wèn)題

看如下代碼:


image.png

<3>修改全局變量

既然全局變量材失,就是能夠在所以的函數(shù)中進(jìn)行使用痕鳍,那么可否進(jìn)行修改呢龙巨?
代碼如下:


image.png

<4>總結(jié)1:

  • 在函數(shù)外邊定義的變量叫做全局變量
  • 全局變量能夠在所有的函數(shù)中進(jìn)行訪問(wèn)
  • 如果在函數(shù)中修改全局變量笼呆,那么就需要使用global進(jìn)行聲明,否則出錯(cuò)
  • 如果全局變量的名字和局部變量的名字相同旨别,那么使用的是局部變量的诗赌,小技巧強(qiáng)龍不壓地頭蛇

<5>可變類(lèi)型的全局變量

>>> a = 1
>>> def f():
...     a += 1
...     print a
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
UnboundLocalError: local variable 'a' referenced before assignment
>>>
>>>
>>> li = [1,]
>>> def f2():
...     li.append(1)
...     print li
...
>>> f2()
[1, 1]
>>> li
[1, 1]

<6>總結(jié)2:

  • 在函數(shù)中不使用global聲明全局變量時(shí)不能修改全局變量的本質(zhì)是不能修改全局變量的指向,即不能將全局變量指向新的數(shù)據(jù)秸弛。
  • 對(duì)于不可變類(lèi)型的全局變量來(lái)說(shuō)铭若,因其指向的數(shù)據(jù)不能修改洪碳,所以不使用global時(shí)無(wú)法修改全局變量。
  • 對(duì)于可變類(lèi)型的全局變量來(lái)說(shuō)叼屠,因其指向的數(shù)據(jù)可以修改瞳腌,所以不使用global時(shí)也可修改全局變量。

函數(shù)應(yīng)用:學(xué)生管理系統(tǒng)


函數(shù)返回值(二)

在python中我們可不可以返回多個(gè)值镜雨?

>>> def divid(a, b):
...     shang = a//b
...     yushu = a%b 
...     return shang, yushu
...
>>> sh, yu = divid(5, 2)
>>> sh
2
>>> yu
1

本質(zhì)是利用了元組


函數(shù)參數(shù)(二)

1. 缺省參數(shù)

調(diào)用函數(shù)時(shí)嫂侍,缺省參數(shù)的值如果沒(méi)有傳入,則被認(rèn)為是默認(rèn)值冷离。下例會(huì)打印默認(rèn)的age吵冒,如果age沒(méi)有被傳入:

def printinfo( name, age = 35 ):
   # 打印任何傳入的字符串
   print "Name: ", name
   print "Age ", age

# 調(diào)用printinfo函數(shù)
printinfo(name="miki" )
printinfo( age=9,name="miki" )

以上實(shí)例輸出結(jié)果:

Name:  miki
Age  35
Name:  miki
Age  9

注意:帶有默認(rèn)值的參數(shù)一定要位于參數(shù)列表的最后面。

>>> def printinfo(name, age=35, sex):
...     print name
...
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

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

有時(shí)可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)西剥。這些參數(shù)叫做不定長(zhǎng)參數(shù)痹栖,聲明時(shí)不會(huì)命名。
基本語(yǔ)法如下:

    def functionname([formal_args,] *args, **kwargs):
       "函數(shù)_文檔字符串"
       function_suite
       return [expression]

加了星號(hào)()的變量args會(huì)存放所有未命名的變量參數(shù)瞭空,args為元組揪阿;而加*的變量kwargs會(huì)存放命名參數(shù),即形如key=value的參數(shù)咆畏, kwargs為字典南捂。

>>> def fun(a, b, *args, **kwargs):
...     """可變參數(shù)演示示例"""
...     print "a =", a
...     print "b =", b
...     print "args =", args
...     print "kwargs: "
...     for key, value in kwargs.items():
...         print key, "=", value
...
>>> fun(1, 2, 3, 4, 5, m=6, n=7, p=8)  # 注意傳遞的參數(shù)對(duì)應(yīng)
a = 1
b = 2
args = (3, 4, 5)
kwargs: 
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> c = (3, 4, 5)
>>> d = {"m":6, "n":7, "p":8}
>>> fun(1, 2, *c, **d)    # 注意元組與字典的傳參方式
a = 1
b = 2
args = (3, 4, 5)
kwargs: 
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> fun(1, 2, c, d) # 注意不加星號(hào)與上面的區(qū)別
a = 1
b = 2
args = ((3, 4, 5), {'p': 8, 'm': 6, 'n': 7})
kwargs:
>>>
>>>

3. 引用傳參

  • 可變類(lèi)型與不可變類(lèi)型的變量分別作為函數(shù)參數(shù)時(shí),會(huì)有什么不同嗎旧找?
  • Python有沒(méi)有類(lèi)似C語(yǔ)言中的指針傳參呢溺健?
>>> def selfAdd(a):
...     """自增"""
...     a += a
...
>>> a_int = 1
>>> a_int
1
>>> selfAdd(a_int)
>>> a_int
1
>>> a_list = [1, 2]
>>> a_list
[1, 2]
>>> selfAdd(a_list)
>>> a_list
[1, 2, 1, 2]

Python中函數(shù)參數(shù)是引用傳遞(注意不是值傳遞)。對(duì)于不可變類(lèi)型钮蛛,因變量不能修改鞭缭,所以運(yùn)算不會(huì)影響到變量自身;而對(duì)于可變類(lèi)型來(lái)說(shuō)魏颓,函數(shù)體中的運(yùn)算有可能會(huì)更改傳入的參數(shù)變量岭辣。

想一想為什么

>>> def selfAdd(a):
...     """自增"""
...     a = a + a   # 我們更改了函數(shù)體的這句話
...
>>> a_int = 1
>>> a_int
1
>>> selfAdd(a_int)
>>> a_int
1
>>> a_list = [1, 2]
>>> a_list
[1, 2]
>>> selfAdd(a_list)
>>> a_list
[1, 2]      # 想一想為什么沒(méi)有變呢?

遞歸函數(shù)

<1>什么是遞歸函數(shù)

通過(guò)前面的學(xué)習(xí)知道一個(gè)函數(shù)可以調(diào)用其他函數(shù)甸饱。
如果一個(gè)函數(shù)在內(nèi)部不調(diào)用其它的函數(shù)沦童,而是自己本身的話,這個(gè)函數(shù)就是遞歸函數(shù)叹话。

<2>遞歸函數(shù)的作用

舉個(gè)例子偷遗,我們來(lái)計(jì)算階乘 n! = 1 * 2 * 3 * ... * n

解決辦法1:


image.png

看階乘的規(guī)律

1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!

解決辦法2:


image.png

原理


image.png

匿名函數(shù)

用lambda關(guān)鍵詞能創(chuàng)建小型匿名函數(shù)。這種函數(shù)得名于省略了用def聲明函數(shù)的標(biāo)準(zhǔn)步驟渣刷。

lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句鹦肿,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

如下實(shí)例:

    sum = lambda arg1, arg2: arg1 + arg2

    #調(diào)用sum函數(shù)
    print "Value of total : ", sum( 10, 20 )
    print "Value of total : ", sum( 20, 20 )

以上實(shí)例輸出結(jié)果:

    Value of total :  30
    Value of total :  40

Lambda函數(shù)能接收任何數(shù)量的參數(shù)但只能返回一個(gè)表達(dá)式的值

匿名函數(shù)不能直接調(diào)用print,因?yàn)閘ambda需要一個(gè)表達(dá)式

應(yīng)用場(chǎng)合

函數(shù)作為參數(shù)傳遞

1.自己定義函數(shù)

>>> def fun(a, b, opt):
...     print "a =", a
...     print "b =", b
...     print "result =", opt(a, b)
...
>>> fun(1, 2, lambda x,y:x+y)
a = 1
b = 2
result = 3

2.作為內(nèi)置函數(shù)的參數(shù)

想一想辅柴,下面的數(shù)據(jù)如何指定按age或name排序箩溃?

stus = [
    {"name":"zhangsan", "age":18}, 
    {"name":"lisi", "age":19}, 
    {"name":"wangwu", "age":17}
]

按name排序:

>>> stus.sort(key = lambda x:x['name'])
>>> stus
[{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

按age排序:

>>> stus.sort(key = lambda x:x['age'])
>>> stus
[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]

函數(shù)使用注意事項(xiàng)

1. 自定義函數(shù)

<1>無(wú)參數(shù)瞭吃、無(wú)返回值

    def 函數(shù)名():
        語(yǔ)句

<2>無(wú)參數(shù)、有返回值

    def 函數(shù)名():
        語(yǔ)句
        return 需要返回的數(shù)值

注意:

  • 一個(gè)函數(shù)到底有沒(méi)有返回值涣旨,就看有沒(méi)有return歪架,因?yàn)橹挥衦eturn才可以返回?cái)?shù)據(jù)
  • 在開(kāi)發(fā)中往往根據(jù)需求來(lái)設(shè)計(jì)函數(shù)需不需要返回值
  • 函數(shù)中,可以有多個(gè)return語(yǔ)句霹陡,但是只要執(zhí)行到一個(gè)return語(yǔ)句和蚪,那么就意味著這個(gè)函數(shù)的調(diào)用完成

<3>有參數(shù)、無(wú)返回值

    def 函數(shù)名(形參列表):
        語(yǔ)句

注意:

  • 在調(diào)用函數(shù)時(shí)烹棉,如果需要把一些數(shù)據(jù)一起傳遞過(guò)去攒霹,被調(diào)用函數(shù)就需要用參數(shù)來(lái)接收
  • 參數(shù)列表中變量的個(gè)數(shù)根據(jù)實(shí)際傳遞的數(shù)據(jù)的多少來(lái)確定

<4>有參數(shù)、有返回值

    def 函數(shù)名(形參列表):
        語(yǔ)句
        return 需要返回的數(shù)值

<5>函數(shù)名不能重復(fù)

image.png

2. 調(diào)用函數(shù)

<1>調(diào)用的方式為:

    函數(shù)名([實(shí)參列表])

<2>調(diào)用時(shí)浆洗,到底寫(xiě)不寫(xiě) 實(shí)參

  • 如果調(diào)用的函數(shù) 在定義時(shí)有形參催束,那么在調(diào)用的時(shí)候就應(yīng)該傳遞參數(shù)

<3>調(diào)用時(shí),實(shí)參的個(gè)數(shù)和先后順序應(yīng)該和定義函數(shù)中要求的一致

<4>如果調(diào)用的函數(shù)有返回值伏社,那么就可以用一個(gè)變量來(lái)進(jìn)行保存這個(gè)值

3. 作用域

<1>在一個(gè)函數(shù)中定義的變量抠刺,只能在本函數(shù)中用(局部變量)

image.png

<2>在函數(shù)外定義的變量,可以在所有的函數(shù)中使用(全局變量)


作業(yè)

1. 編程實(shí)現(xiàn) 9*9乘法表

提示:使用循環(huán)嵌套

2.用函數(shù)實(shí)現(xiàn)求100-200里面所有的素?cái)?shù)

提示:素?cái)?shù)的特征是除了1和其本身能被整除摘昌,其它數(shù)都不能被整除的數(shù)

3.請(qǐng)用函數(shù)實(shí)現(xiàn)一個(gè)判斷用戶輸入的年份是否是閏年的程序

提示:
1.能被400整除的年份
2.能被4整除速妖,但是不能被100整除的年份
以上2種方法滿足一種即為閏年

4.用函數(shù)實(shí)現(xiàn)輸入某年某月某日,判斷這一天是這一年的第幾天聪黎?閏年情況也考慮進(jìn)去

20160818
是今年第x天

5.編寫(xiě)“學(xué)生管理系統(tǒng)”排作,要求如下:

必須使用自定義函數(shù)膀值,完成對(duì)程序的模塊化
學(xué)生信息至少包含:姓名找御、年齡辨萍、學(xué)號(hào),除此以外可以適當(dāng)添加
必須完成的功能:添加湘纵、刪除、修改滤淳、查詢梧喷、退出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脖咐,隨后出現(xiàn)的幾起案子铺敌,更是在濱河造成了極大的恐慌,老刑警劉巖屁擅,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偿凭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡派歌,警方通過(guò)查閱死者的電腦和手機(jī)弯囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)痰哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匾嘱,你說(shuō)我怎么就攤上這事斤斧。” “怎么了霎烙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵撬讽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我悬垃,道長(zhǎng)游昼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任尝蠕,我火速辦了婚禮烘豌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趟佃。我一直安慰自己扇谣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布闲昭。 她就那樣靜靜地躺著罐寨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪序矩。 梳的紋絲不亂的頭發(fā)上鸯绿,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音簸淀,去河邊找鬼瓶蝴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛租幕,可吹牛的內(nèi)容都是我干的舷手。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼劲绪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼男窟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贾富,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤歉眷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后颤枪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汗捡,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年畏纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扇住。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春缕。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖台囱,靈堂內(nèi)的尸體忽然破棺而出淡溯,到底是詐尸還是另有隱情,我是刑警寧澤簿训,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布咱娶,位于F島的核電站,受9級(jí)特大地震影響强品,放射性物質(zhì)發(fā)生泄漏膘侮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一的榛、第九天 我趴在偏房一處隱蔽的房頂上張望琼了。 院中可真熱鬧,春花似錦夫晌、人聲如沸雕薪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)所袁。三九已至,卻和暖如春凶掰,著一層夾襖步出監(jiān)牢的瞬間燥爷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工懦窘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留前翎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓畅涂,卻偏偏與公主長(zhǎng)得像港华,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子午衰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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