【PY從0到1】第七節 函數

# 7 第七節 函數
# 函數對於程式語言來說是一塊重量級的內容。
# 他可以實現或者簡化編寫的程式碼。
# 編寫好特定功能的函數後,就可以重複調用函數來完成任務。
# 下面我們就用函數的形式來封裝前面學過的知識。

# 1> 簡單的函數結構
def plus_plus():#<---這是函數名
    '''
    運算既定的數字加法 #<-----這是函數功能的注釋
    '''
    a = 1 + 1
    return a#<-----return代表將a值賦值給plus_plus

print(plus_plus())#<-----列印plus_plus
# 輸出結果如下:
# 2
# 上面講的是函數最簡單的結構

# 2> 給函數加上參數
# 我們只要稍作修改就可以使plus_plus變成一個加法器。
def plus_plus(a,b):
    '''
    一個簡單的加法器
    '''
    c = a + b
    print(c)

plus_plus(2, 4)#默認a = 2,b = 4
# 輸出為:6
# 又或使用這樣的語句:
# plus_plus(a = 2,b = 4)
# plus_plus(b = 4,a = 2)

# 我們再定義一個新的函數
def introduce(name,age,like_foods='hamburgers'):
    '''
    一個簡單的自我介紹
    '''
    a = 'My name is '
    b = 'I am '
    c = ' years old. '
    d = 'I like '
    print(
        a + 
        name.title() + 
        '. ' + 
        b + 
        str(age) + 
        c + 
        d +
        like_foods + 
        '. '
        )

introduce('kitty', 6)
# 輸出結果如下:
# My name is Kitty. I am 6 years old. I like hamburgers. 
# 其中like_foods是默認為漢堡。我們一般把有默認值的參數置於末尾。
# 如果想修改默認值,只需要如下操作。
introduce('Tom', 8,like_foods='noodles')
# 輸出如下:
# My name is Tom. I am 8 years old. I like noodles. 

# 3> 可選實參
def introduce(name,age,like_foods=''):#給like_foods傳入空字元串
    '''
    一個簡單的自我介紹
    '''
    a = 'My name is '
    b = 'I am '
    c = ' years old. '
    d = 'I like '
    if like_foods:#<----如果like_foods不為空,就執行下方,否則執行else。
        '''
        做一個判斷,如果沒有輸入喜歡的食物就不輸出相關語句。
        '''
        print(
            a + name.title() + 
            '. ' + 
            b + 
            str(age) + 
            c + 
            d + 
            like_foods + 
            '.'
            )
    else:
        print(a + 
              name.title() + 
              '. ' + 
              b + 
              str(age) + 
              c
              )

introduce('lisa', 8)
# 輸出結果如下:
# My name is Lisa. I am 8 years old. 
introduce('lisa', 8,like_foods='noodles')
# 輸出結果如下:
# My name is Lisa. I am 8 years old. I like noodles. 

# 4> 每個函數最好只有一個功能
# 做個簽到模型
def signature_system(did_not_sign_in,already_signed_in):
    '''提示簽到成功'''
    while did_not_sign_in:
        signing = did_not_sign_in.pop()
        print('\n你好,' + signing.title() + '。簽到成功。')
        already_signed_in.append(signing)
        
def show_signature(already_signed_in):
    '''展示簽到列表'''
    print('\n已經按時簽到的員工:')
    for signature in already_signed_in:
        print('- ' + signature)
        
a = ['xixi','didi','huanhuan']
b = []
signature_system(a,b)
show_signature(b)
# 程式碼運行結果如下:
# 你好,Huanhuan。簽到成功。

# 你好,Didi。簽到成功。

# 你好,Xixi。簽到成功。

# 已經按時簽到的員工:
# - huanhuan
# - didi
# - xixi

# 在以後的編寫中,盡量做到單個函數只實現一個具體的內容。這樣可以讓程式碼看起來通俗易懂。
        
# 小技巧:
# 用[:]做複製操作
a = ['xixi','didi','lala']
b = a[:]
print(b)
# 結果如下:
# ['xixi', 'didi', 'lala']

# 5> 設置任意數量的參數
# 用*告訴Python我們傳入函數的變數是不確定數量的。
def guest(*b):
    print("\n歡迎您們的到來!")
    for a in b:
        print("- " + a)

guest('xixi','didi','huanhuan')
#運行結果如下:
# 
# 歡迎您們的到來!
# - xixi
# - didi
# - huanhuan

# 將*改為**就可以傳入任意數量的字典。

# 自己編寫函數時一定要遵循以下編寫習慣:
# 1>給函數命名時,只是用小寫字母和下劃線。
# 2>函數名通俗易懂,最好以其實現的功能為名稱。
# 3>每個函數都應該有注釋,短注釋用''' ''',長注釋用下面的格式:
# '''
# xxxx
# '''
# 4>給參數指定默認值時,不要在等號的兩邊添加空格。
# 5>如果函數包含的參數過多,超過了一行79個字元,則要用下方的格式:
# def function_name(
#         parameter_0,parameter_1,parameter_2
#         parameter_3,parameter_4,parameter_5):
#     '''
#     xxxxx
#     '''
# 6>函數與函數之間要有兩個回車分開。
# 7>至少遵循以上編寫原則。