day09柒爵、函數(shù) 2019-01-04

一友扰、復(fù)習(xí)

0.列表(list)

[元素1, 元素2, 元素3···] [元素]
可變彤叉、有序
元素可以是任何數(shù)據(jù)類型,可以重復(fù)
元素的增刪改查
相關(guān)運算和方法

1.元組(tuple)

(元素1, 元素2, 元素3···) 元素1, 元素2··· [元素]
不可變村怪、有序
元素可以是任何數(shù)據(jù)類型秽浇,可以重復(fù)
獲取元素的值
相關(guān)運算

2.字典(dict)

{key1: value, key2: value2```} {}
可變、無序
元素是鍵值對甚负,鍵不可變且唯一柬焕,值可以是任何數(shù)據(jù)類型,可以重復(fù)
元素的增刪改查
相關(guān)運算和方法

3.集合(set)

{元素1, 元素2, 元素3···} set()
可變梭域,無序
元素不可變且唯一
元素的增刪查斑举;數(shù)學(xué)集合運算
相關(guān)運算

二、了解函數(shù)

打飛機游戲:
飛機的功能:左移病涨、右移 上移富玷、下移、發(fā)射子彈既穆、爆炸···

print('左移')
print('右移')
print('上移')
print('下移')
print('發(fā)射子彈')
print('爆炸')

飛行過程:左移赎懦、右移、左移幻工、左移

沒有使用函數(shù)時励两,遇到的問題:
1.同樣的代碼要寫很多事。
2.一旦功能發(fā)生改變囊颅,需要修改多處代碼

解決方法:使用函數(shù):



def zuo_yi():
    print('左移')
    print('看后視鏡')
    print('向左打方向盤')
    print('踩油門')
    print('回正方向盤')


def you_yi():
    print('左移')
    print('看后視鏡')
    print('向右打方向盤')
    print('踩油門')
    print('回正方向盤')


三当悔、函數(shù)

1.什么是函數(shù):

函數(shù)就是對實現(xiàn)某一功能的代碼段的封裝。

2.函數(shù)的分類:

系統(tǒng)函數(shù):系統(tǒng)已經(jīng)給我們定義好的函數(shù)踢代,我們可以直接調(diào)用函數(shù)先鱼,使用函數(shù)的功能。
input(), print(), id(), id(), type(), chr(), bin(), max()...
自定義函數(shù):需要我們自己去定義的函數(shù)奸鬓。

3.自定義函數(shù)的規(guī)范:

a.語法:

def 函數(shù)名(參數(shù)列表):
函數(shù)體

b.說明:

def -----python中聲明函數(shù)的關(guān)鍵字焙畔。
函數(shù)名 -----標(biāo)識符,不能是關(guān)鍵字串远。
PEP8命名規(guī)范宏多;見名知意(看到函數(shù)名就能大概知道函數(shù)的功能)。
() -----固定格式澡罚。
參數(shù)列表 -----參數(shù)1伸但,參數(shù)2,參數(shù)3···留搔;這里的參數(shù)叫形參更胖;
定義的時候,形參就是變量;
功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面却妨。
: -----固定格式饵逐。
函數(shù)體 -----一個完整的函數(shù)體包含:
函數(shù)說明文檔、實現(xiàn)函數(shù)功能的代碼段彪标、函數(shù)返回值倍权。

c.初學(xué)者聲明的函數(shù)的步驟:

第一步:確定函數(shù)的功能;
第二步:根據(jù)功能給函數(shù)命名捞烟;
第三步:確定參數(shù)(形參薄声,確定需不需要參數(shù),要幾個)题画;
看實現(xiàn)的功能需不需要從外表傳值進來默辨,要傳幾個。
第四步:實現(xiàn)函數(shù)的功能苍息。
第五步:確定函數(shù)返回值

注意:函數(shù)在聲明的時候是不會執(zhí)行函數(shù)體的廓奕,只有在調(diào)用的時候才會執(zhí)行。

4.函數(shù)的調(diào)用 -----使用機器

a.語法:

函數(shù)名(實參列表)

b.說明:

函數(shù)名 -----這個函數(shù)名必須是已經(jīng)聲明過的函數(shù)档叔。
() -----固定寫法桌粉。
實參列表 -----用實參用來給形參賦值(用實參給形參賦值的過程加傳參)
實參和形參要一一對應(yīng)(數(shù)量、位置)衙四。

c.函數(shù)的調(diào)用過程(重點铃肯。。传蹈。押逼。。):

第一步:調(diào)用時惦界,回到函數(shù)聲明的位置挑格。
第二步:用實參給形參賦值(傳參)。
第三步:執(zhí)行函數(shù)體沾歪。
第四步:執(zhí)行完函數(shù)體后漂彤,確定并返回值,然后返回返回值灾搏。
第五步:回到函數(shù)調(diào)用的位置挫望,接著執(zhí)行后面的代碼。

例如:寫一個函數(shù)狂窑,功能為求兩個數(shù)的和媳板。



def new_sum(num1, num2):
    """
    求兩數(shù)之和。                       -----函數(shù)功能說明
    :param num1:求和的第一個數(shù)        -----對參數(shù) num1 進行說明
    :param num2:求和的第二個數(shù)        -----對參數(shù) num2 進行說明
    :return: 無                       -----對返回值進行說明
                        -----說明不換行時 Ctrl + 鼠標(biāo)指針 就都能看到所有提示
    """
    print('===========================')
    print(num1, '與', num2, '的兩數(shù)之和為:', num1 + num2)


x = 1
y = 2
new_sum(x, y)               # 調(diào)用函數(shù)
new_sum(10, 20)


運行結(jié)果:

===========================
1 與 2 的兩數(shù)之和為: 3
===========================
10 與 20 的兩數(shù)之和為: 30

練習(xí):

1.聲明一個函數(shù)泉哈,打印指定的 n1



def jc(num1):
    """求 指定數(shù) 的階乘蛉幸。"""
    i = 1
    num2 = 1
    while i <= num1:
        num2 *= i
        i += 1
    print('%d 這個數(shù)的階乘為:' % num1, num2)


n = int(input('請輸入一個數(shù):'))
jc(n)
jc(5)

運行結(jié)果:

請輸入一個數(shù):2
2 這個數(shù)的階乘為: 2
5 這個數(shù)的階乘為: 120

注意:一個函數(shù)可以使用多次

2.聲明一個函數(shù)破讨,打印指定列表中指定元素對應(yīng)的下標(biāo)



def xb(list1, item):
    """打印指定列表中指定元素對應(yīng)的下標(biāo)"""
    i = 0
    while i < len(list1):
        if list1[i] == item:
            print(item, '這個元素對應(yīng)的下標(biāo)為:', i)
        elif i == len(list1):
            print('指定列表內(nèi)沒有該元素')
        i += 1


list1 = ['a', 'b', 'c', 100]
xb(list1, 100)
xb([1, 2, 3, 'adc'], 3)

運行結(jié)果:

100 這個元素對應(yīng)的下標(biāo)為: 3
3 這個元素對應(yīng)的下標(biāo)為: 2

3.聲明一個函數(shù),功能為猜數(shù)字游戲:

隨機產(chǎn)生一個 0 ~ 100 的數(shù)字奕纫,用戶不斷的輸入數(shù)字提陶,直到輸入的數(shù)字和產(chǎn)生的數(shù)字一樣,游戲就結(jié)束若锁。
當(dāng)猜錯了搁骑,會給出大了或小了的提示斧吐。
產(chǎn)生隨機數(shù):

import random               # 導(dǎo)入 random 模塊又固。
random.randint(0, 100)      # 產(chǎn)生一個 0 ~ 100 的隨機整數(shù)。

解:



def csyx():
    """猜數(shù)游戲"""
    print('已經(jīng)進入猜數(shù)游戲煤率。')
    print('產(chǎn)生隨機數(shù)中...')
    import random  # 導(dǎo)入 random 模塊仰冠。
    num2 = random.randint(0, 100)  # 產(chǎn)生一個 0 ~ 100 的隨機整數(shù)。
    print('產(chǎn)生完成蝶糯。')
    num1 = int(input('請輸入一個整數(shù)( 0 ~ 100 ):'))
    cs = 1
    while num1 != num2:
        cs += 1
        if num1 < num2:
            print('猜錯了洋只,稍微小了點。')
            num1 = int(input('請再次輸入:'))
        elif num1 > num2:
            print('猜錯了昼捍,稍微大了點识虚。')
            num1 = int(input('請再次輸入:'))
    print('恭喜你,猜對了妒茬。\n一共猜了 %d 次担锤。\n獎勵一個么么噠~~~\n游戲結(jié)束。' % cs)


csyx()

運行結(jié)果:

已經(jīng)進入猜數(shù)游戲乍钻。
產(chǎn)生隨機數(shù)中...
產(chǎn)生完成肛循。
請輸入一個整數(shù)( 0 ~ 100 ):50
猜錯了,稍微小了點银择。
請再次輸入:70
猜錯了多糠,稍微大了點。
請再次輸入:60
猜錯了浩考,稍微小了點夹孔。
請再次輸入:65
猜錯了,稍微小了點析孽。
請再次輸入:68
猜錯了析蝴,稍微小了點。
請再次輸入:69
恭喜你绿淋,猜對了闷畸。
一共猜了 6 次。
獎勵一個么么噠~~~
游戲結(jié)束吞滞。

四佑菩、參數(shù)

1.位置參數(shù)和關(guān)鍵字參數(shù)(根據(jù)實參的傳遞方式對參數(shù)進行的分類)

a.位置參數(shù):

實參的位置和形參保持一致盾沫,按形參聲明是先后順序一一賦值

b.關(guān)鍵字參數(shù):

調(diào)用函數(shù)的時候,以 形參 = 實參 的方式來傳參殿漠,這個時候?qū)崊⒌捻樞驘o所謂
例如



def func1(a, b, c):
    print(a, b, c)


# 通過位置參數(shù)給形參賦值
func1(10, 100, 1000)
# 通過關(guān)鍵字參數(shù)給形參賦值
func1(b=1000, c=100, a=10)
# 通過位置參數(shù)和關(guān)鍵字參數(shù)結(jié)合傳參(注意:關(guān)鍵字參數(shù)必須在位置參數(shù)的后面)
func1(10, 100, c=1000)

運行結(jié)果:

10 100 1000
10 1000 100
10 100 1000

2.參數(shù)默認(rèn)值

聲明函數(shù)的時候赴精,可以給參數(shù)賦默認(rèn)值。
如果一個形參有默認(rèn)值了绞幌,那么調(diào)用函數(shù)的時候蕾哟,這個參數(shù)就可以不用傳參。
如果有的形參有默認(rèn)值莲蜘,有的形參沒有默認(rèn)值谭确,那么有默認(rèn)值的參數(shù),要放在沒有默認(rèn)值的形參的后面票渠。
例如



# 參數(shù) b逐哈、c 有默認(rèn)值,在調(diào)用函數(shù)的時候 b问顷、c 就可以不用傳參昂秃。
def func2(a, b=None, c=0):
    print(a, b, c)


func2(10)

運行結(jié)果:

10 None 0

3.參數(shù)的類型說明(這里面的類型說明沒有提示功能,沒有約束功能)

a.給參數(shù)設(shè)置默認(rèn)值杜窄,默認(rèn)值的類型肠骆,就是參數(shù)的類型
b.在形參后面加 : 類型名 ,來說明參數(shù)類型塞耕。這種方式調(diào)用的時候必須傳參蚀腿。
c.函數(shù)聲明的時候在 () 后面加 ->類型名 ,來說明函數(shù)返回值的類型

類型說明后的好處:
a.對實參的類型進行指導(dǎo)荷科。
b.實現(xiàn)函數(shù)功能的時候唯咬,有類型相關(guān)的語法提示。
例如:



def func3(a, list1: list, b=None)->int:
    list1.append()              # 說明類型后畏浆,就會有提示胆胰。
    print(a, b, list1)


4.不定長參數(shù)(參數(shù)個數(shù)不確定)

a.在參數(shù)名前面加 * ,可以用來同時獲取多個實參的值刻获。

實質(zhì)是將帶 * 的參數(shù)編程元組蜀涨,將多個實參的值作為元組的元素。

b.在參數(shù)名前面加 ** 蝎毡,

會將這個參數(shù)變成一個字典厚柳,來獲取關(guān)鍵字參數(shù)的值,其它關(guān)鍵字作為 key 沐兵,實參作為 value 别垮。

注意:
a.如果函數(shù)中既有不定長參數(shù)又有普通參數(shù),不定長參數(shù)要放在普通參數(shù)之前扎谎。
b.使用不定長參數(shù)時碳想, ** 定義的長參數(shù)要放在 * 定義的長參數(shù)之后烧董。

例如:

def func4(*nums):
    print(nums)


func4(1)
func4(1, 2)
func4(1, 2, 3)


# 加 * 的用法,不定長參數(shù)要放在不帶 * 的參數(shù)之前胧奔。
def func5(name, *nums):
    print(name, nums)


func4(1)
func4(1, 2)
func4(1, 2, 3)


def func6(**nums):
    print(nums)


func6(a=10)
func6(a=10, b=20)


# 既有 * 定義的長參數(shù)逊移,又有 ** 定義的長參數(shù),在使用的時候更靈活龙填。
def func7(*name, **nums):
    print(name, nums)


func7(1, 2, 3)
func7(a=10, b=20)
func7(1, 2, 3, a=10, b=20, c=30)

運行結(jié)果:

(1,)
(1, 2)
(1, 2, 3)
(1,)
(1, 2)
(1, 2, 3)
{'a': 10}
{'a': 10, 'b': 20}
(1, 2, 3) {}
() {'a': 10, 'b': 20}
(1, 2, 3) {'a': 10, 'b': 20, 'c': 30}

練習(xí):寫一個函數(shù)胳泉,計算多個數(shù)的和(要求可以使用位置參數(shù)也可以使用關(guān)鍵字參數(shù))

def dgsdh(*tuple1, **dict1):
    """算多個數(shù)的和。"""
    i = 0
    k = 0
    sum1 = 0
    while i < len(tuple1):
        sum1 += int(tuple1[i])
        i += 1
    for j in dict1:
        x = dict1[j]
        sum1 += x
        k += 1
    num1 = i + k
    print('一共有 %d 個數(shù)字岩遗,' % num1, '和為:', sum1)


dgsdh(1, 2, 3, a=4, b=5)

運行結(jié)果:

一共有 5 個數(shù)字扇商, 和為: 15

五、返回值

1.什么是返回值 -----就是將函數(shù)里面的數(shù)據(jù)傳遞到外面

a.返回值就是函數(shù)體中喘先,調(diào)用表達式的值钳吟,就是 return 關(guān)鍵字后面表達式的值廷粒。
b.python中每個函數(shù)都有返回值窘拯,默認(rèn)是None。

函數(shù)調(diào)用表達式 -----調(diào)用函數(shù)的語句坝茎。
return -----關(guān)鍵字涤姊,只能寫在函數(shù)體中。功能:1.確定函數(shù)的返回值嗤放;2.結(jié)束函數(shù)思喊。
執(zhí)行函數(shù)的時候,如果遇到 return 次酌,函數(shù)就直接結(jié)束恨课,
并且將 return 后面的值作為函數(shù)的返回值。

函數(shù)的調(diào)用過程:
1).回到函數(shù)聲明的位置
2).傳參 -----保證每個參數(shù)都有返回值
3).執(zhí)行函數(shù)體
4).執(zhí)行完函數(shù)確定返回值 -----如果執(zhí)行過程中岳服,沒有遇到 return 剂公,函數(shù)的返回值就為 None;
若遇到 return 吊宋,函數(shù)的返回值就為 return 后面的東西纲辽。
5).回到函數(shù)調(diào)用的位置(這個時候锈候,函數(shù)調(diào)用表達式的值轧邪,就是函數(shù)的返回值)
例如



def func1():
    print('*****')
    return True
    print('=====')


result = func1()             # func1()就是函數(shù)調(diào)用表達式
print(result)

運行結(jié)果:

*****

2.多個返回值

return 值1, 值2, 值3··· -----相當(dāng)于返回一個元組。
例如:



def func2():
    return 1, 2, 3


x, y, z = func2()
print(x, y, z)

運行結(jié)果:

1 2 3

3.怎么確定函數(shù)是否需要返回值

如果函數(shù)的功能要拿到新的數(shù)據(jù)琳水,就將這個數(shù)據(jù)用 return 返回这吻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊档,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唾糯,更是在濱河造成了極大的恐慌怠硼,老刑警劉巖涡上,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拒名,居然都是意外死亡吩愧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門增显,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雁佳,“玉大人,你說我怎么就攤上這事同云√侨ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵炸站,是天一觀的道長星澳。 經(jīng)常有香客問我,道長旱易,這世上最難降的妖魔是什么禁偎? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮阀坏,結(jié)果婚禮上如暖,老公的妹妹穿的比我還像新娘。我一直安慰自己忌堂,他們只是感情好盒至,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著士修,像睡著了一般枷遂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棋嘲,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天酒唉,我揣著相機與錄音,去河邊找鬼封字。 笑死黔州,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阔籽。 我是一名探鬼主播流妻,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笆制!你這毒婦竟也來了绅这?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤在辆,失蹤者是張志新(化名)和其女友劉穎证薇,沒想到半個月后度苔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浑度,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年寇窑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩张。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡甩骏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出先慷,到底是詐尸還是另有隱情饮笛,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布论熙,位于F島的核電站福青,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脓诡。R本人自食惡果不足惜无午,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誉券。 院中可真熱鬧指厌,春花似錦刊愚、人聲如沸踊跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽商玫。三九已至,卻和暖如春牡借,著一層夾襖步出監(jiān)牢的瞬間拳昌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工钠龙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炬藤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓碴里,卻偏偏與公主長得像沈矿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咬腋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 函數(shù)和對象 1羹膳、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句根竿,而且...
    道無虛閱讀 4,550評論 0 5
  • 函數(shù)只定義一次陵像,但可能被執(zhí)行或調(diào)用任意次就珠。JS函數(shù)是參數(shù)化的,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表醒颖,這些參數(shù)在...
    PySong閱讀 519評論 0 0
  • 函數(shù)只定義一次妻怎,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的泞歉,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表蹂季,這些參數(shù)在...
    PySong閱讀 311評論 0 0
  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次疏日。JS函數(shù)是參數(shù)化的偿洁,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表,這些參數(shù)在...
    PySong閱讀 847評論 0 0
  • 最近讀到季羨林的逛菜市場沟优,感到上海與北京的菜市場涕滋,應(yīng)該非常相像∧痈螅可以說季老已經(jīng)盡其所能宾肺,把一個菜市場寫成了一幅畫。...
    無_非閱讀 314評論 0 6