貓哥教你寫爬蟲 016--函數

什麼是函數

1558576206542
1558576220651
1558576237595
1558576273478

#函數名:最好是取體現函數功能的名字,通常用小寫字母和單下劃線、數字等組合
def greet(name):
#參數:根據函數功能,括號裏能夠有多個參數,也能夠不帶參數,命名規則與函數名相同
#規範:括號是英文括號,後面的冒號不能丟
    print(name+'早上好')
#函數體:函數體就是體現函數功能的語句,要縮進,通常是四個空格
    return 
複製代碼

1558576365856

思考: 如何使用函數進行以下輸出

1558578237963

def eat(param1,param2):
    print('一份開胃菜:'+param1)
    print('一份主食:'+param2+'\n')
eat('牛肉拉麪','話梅花生')
eat('話梅花生','牛肉拉麪')
eat(param2 = '話梅花生',param1 = '牛肉拉麪')
複製代碼

每句後面, 加一個甜品

1558578190920

默認參數能夠解決參數傳值不肯定的問題

若是參數個數不肯定呢?

def menu(*barbeque):
    print(barbeque)
menu('烤雞翅','烤茄子','烤玉米')
#這幾個值都會傳遞給參數barbeque
複製代碼
order=('烤雞翅','烤茄子','烤玉米')
#元組的長度沒有限制
def menu(*barbeque):
    print(barbeque)
menu(*order)
複製代碼
barbeque_list = ['烤雞翅','烤茄子','烤玉米','烤腰子']
def menu(*barbeque):
    print(barbeque)
menu(barbeque_list)
# (['烤雞翅', '烤茄子', '烤玉米', '烤腰子'],) 把列表當成一個參數了...
menu(*barbeque_list)
# ('烤雞翅', '烤茄子', '烤玉米', '烤腰子')
複製代碼

1558580994710

位置參數、默認參數、不定長參數

def menu(appetizer,course):
    print('一份開胃菜:'+appetizer)
    print('一份主食:'+course)
menu('話梅花生','牛肉拉麪')
複製代碼

這裏的'話梅花生'和'牛肉拉麪'是對應參數appetizer和course的位置順序傳遞的,

因此被叫做【位置參數】 ,這也是最多見的參數類型

def menu(appetizer,course):
    print('一份開胃菜:'+appetizer)
    print('一份主食:'+course+'\n')
#還記得轉義字符\n吧,表示換行
menu('牛肉拉麪','話梅花生')
menu('話梅花生','牛肉拉麪')
複製代碼
def menu(appetizer,course):
    print('一份開胃菜:'+appetizer)
    print('一份主食:'+course+'\n')
#還記得轉義字符\n吧,表示換行
menu('牛肉拉麪','話梅花生')
menu('話梅花生','牛肉拉麪')
#若是採用下面這種形式傳遞,就不須要理會參數位置
menu(course='牛肉拉麪',appetizer='話梅花生')
複製代碼

不定長參數

def menu(*barbeque):
    print(barbeque)
menu('烤雞翅','烤茄子','烤玉米')
#這幾個值都會傳遞給參數barbeque
複製代碼

參數的順序問題

def menu(appetizer,course,*barbeque,dessert='綠豆沙'):
    print('一份開胃菜:'+appetizer)
    print('一份主菜:'+course)
    for i in barbeque:
        print('一份烤串:'+i)
        
menu('話梅花生','牛肉拉麪','烤雞翅','烤茄子','烤玉米')
複製代碼
def menu(appetizer,course,*barbeque,dessert='綠豆沙'):
    print('一份開胃菜:'+appetizer)
    print('一份主菜:'+course)
    for i in barbeque:
        print('一份烤串:'+i)
    print('一份甜品: '+dessert)
        
menu('話梅花生','牛肉拉麪','烤雞翅','烤茄子','烤玉米',dessert = '奶昔')
複製代碼

1558581331611

若是沒有返回值呢?

若是函數沒有返回值, 默認返回None

何時使用print寫在函數裏仍是函數外?

def hello0():
    print('hello world')
def hello1():
    return 'hello world'
hello0()
print(hello1()) # 除非須要當即顯示, 不然通常都是先返回, 而後用變量保存...
複製代碼

1558581368497
1558581526778
1558581544498

def face(name):
    return name + '的臉蛋'
def body(name):
    return name + '的身材'
def main(dream_face,dream_body):
    return '個人夢中情人:' + face(dream_face) + ' + ' + body(dream_body)
print(main('李若彤','林志玲'))
print(main('新垣結衣','長澤雅美'))
複製代碼

1558581580446

函數能夠有多個返回值嗎?

1558581653355
1558581674808
1558581734658

有了第五條, 咱們能夠模擬一次跳出兩層循環

def demo():
    for i in range(10):
        for j in range(10):
            if j == 4:
                return
            print(str(i)+'==>'+str(j))
demo()
複製代碼

1558581777579

猜一下結果...

x=99   #全局變量x 
def num():
    x=88 #局部變量x 
    print(x)
    
num() 
#打印局部變量x
print(x) 
#打印全局變量x
複製代碼

1558581812972
1558581838550

代碼會報錯嗎?

def egg():    
#定義了一個叫egg的函數
    quantity = 108
#定義了一個變量quantity,並賦值爲108
egg()
#調用egg() 函數
print(quantity)   
# 打印egg() 函數裏面的變量quantity
複製代碼

函數外的變量, 函數內能夠用; 函數內的變量, 函數外不能用

使用global語句, 定義全局變量

def egg():    
    global quantity
#global語句將變量quantity聲明爲全局變量
    quantity = 108
    
egg()
print(quantity)
複製代碼

兩種隨機(從123中隨機選一個)

import random
print(random.randint(1,3))
list1 = [1,2,3]
print(random.choice(list1))
複製代碼

做業: 抽取幸運觀衆

1558589593050

# 查看註釋,運行代碼。
import random
import time
# 用random函數在列表中隨機抽獎,列表中只有3位候選者。
luckylist = ['海綿寶寶','派大星','章魚哥']
# random模塊中有個隨機選取一個元素的方法:random.choice()。
a = random.choice(luckylist)  # 從3我的中隨機選取1我的。
print('開獎倒計時',3)
time.sleep(1)  # 調用time模塊,控制打印內容出現的時間
print('開獎倒計時',2)
time.sleep(1)
print('開獎倒計時',1)
time.sleep(1)
# 使用三引號打印hellokitty的頭像
image = ''' /\_)o< | \\ | O . O| \_____/ '''
print(image)  # ……
print('恭喜'+a+'中獎!')  # 使用print函數打印幸運者名單
複製代碼
開始抽取幸運觀衆......
第一個字: 劉
......
第二個字: 德
......
第三個字: 華
最終的幸運觀衆: 劉德華!
若是是兩個字
開始抽取幸運觀衆......
第一個字: 黎
......
第二個字: ※
......
第三個字: 明
最終的幸運觀衆: 黎明!
複製代碼

素材

students = ['劉少康',
            '左月',
            '侯志傑',
            '王楓元',
            '張居正',
            '王濤',
            '曹亞南',
            '劉偉',
            '楊成龍',
            '鄧凱凱',
            '吳成浩',
            '彭博',
            '段妮',
            '白泉林',
            '喻祿',
            '劉嘉偉',
            '鄭明利',
            '陳朋來',
            '嶽佳蕊',
            '李傑',
            '楊栓',
            '張承恩',
            '李國慶',
            '王嵩',
            '張彩芸',
            '張瑤',
            '張虎躍',
            '宋晨光',
            '朱顏恩',
            '楊歡歡',
            '韋丹丹',
            '康濤濤',
            '高廣宇',
            '吳紀昌',
            '王宇行',
            '龐忠良',
            '郭天',
            '陳雲',
            '金寶順',
            '尚尚',
            '曹新宇',
            '祁書',
            '秦磊']
複製代碼
import random,time
students = ['劉少康',
            '左月',
            '侯志傑',
            '王楓元',
            '張居正',
            '王濤',
            '曹亞南',
            '劉偉',
            '楊成龍',
            '鄧凱凱',
            '吳成浩',
            '彭博',
            '段妮',
            '白泉林',
            '喻祿',
            '劉嘉偉',
            '鄭明利',
            '陳朋來',
            '嶽佳蕊',
            '李傑',
            '楊栓',
            '張承恩',
            '李國慶',
            '王嵩',
            '張彩芸',
            '張瑤',
            '張虎躍',
            '宋晨光',
            '朱顏恩',
            '楊歡歡',
            '韋丹丹',
            '康濤濤',
            '高廣宇',
            '吳紀昌',
            '王宇行',
            '龐忠良',
            '郭天',
            '陳雲',
            '金寶順',
            '尚尚',
            '曹新宇',
            '祁書',
            '秦磊']
            
def name_to_three():
    stu_list = []
    for i in students:
        if len(i) == 2:
            tmp_list = list(i)
            tmp_list.insert(1,'※')
            i = ''.join(tmp_list)
        stu_list.append(i)
    return stu_list
def make_first():
    first_list = []
    stu_dict = {}
    for i in name_to_three():
        first_list.append(i[0])
        one_set = set(first_list)
    for i in one_set:
        stu_dict[i] = {}
    return stu_dict
def make_second():
    stu_dict = make_first()
    for i in stu_dict:
        for j in name_to_three():
            if i == j[0]:
                stu_dict[i][j[1]] = []
    return stu_dict
def make_third():
    stu_dict = make_second()
    for i in stu_dict:
        for j in stu_dict[i]:
            for k in name_to_three():
                if i+j == k[:2]:
                    stu_dict[i][j].append(k[2]) 
    return stu_dict
def stu_split():
    return make_third()
def print_point():
    for i in range(6):
        print('.',end='')
        time.sleep(0.3)
    print('')
def find_lucky_dog():
    print('開始抽取幸運觀衆')
    print_point()
    stu_dict = stu_split()
    one = random.choice(list(stu_dict))
    two = random.choice(list(stu_dict[one]))
    three = random.choice(stu_dict[one][two])
    print('第一個字: '+one)
    print_point()
    print('第二個字: '+two)
    print_point()
    print('第三個字: '+three)
    print('')
    if two == '※':
        two = ''
    time.sleep(0.5)
    print('最終的幸運觀衆: {}{}{}!!!'.format(one,two,three))
    time.sleep(0.5)
    print('')
def start():
    while True:
        find_lucky_dog()
        if input('是否繼續? (輸入"y"繼續, 不然退出...) ') != "y":
            break
        else:
            print('')
            
start()
複製代碼

快速跳轉:

貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdhtml

相關文章
相關標籤/搜索