iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

Discord-bot,從0開始到做出一個機器人系列 第 9

寫機器人必備 -- 函式的操作

  • 分享至 

  • xImage
  •  

創建第一個函式

def functionname([parameterlist]):
    ["comments"]
    ['functionbody']

functionname:函數名稱
parameterlist:可選參數,如有多個參數,須以","隔開
comments:可選參數,表示為函式指定註釋,通常表該函式功能
functionbody:可選參數,用於指定函式整體,如有返回值,可使用return字句返回

如想定義不做式的函式,可以使用pass做為佔位符
請注意,縮排問題

  • 舉例
# 此程式碼無法運行,是因為twoSum()函式還沒有被呼叫
def twoSum(a, b)
    """
    兩個數字加起來
    """
    c = a + b
    return c

調用函數

調用函數也就是執行函數,方法如下

functionname([parameterlist])
  • 舉例
a, b = 2, 3
ans = twoSum(a, b)
print(ans)
# 5

參數傳遞

def twoSum(a, b)

# twoSum => 函式名稱
# (a, b) => 函式參數

形式參數:在括號裡面的就是形式參數
實際參數:在調用的時候,函式括號裡的才是實際參數

位置參數

  • 數量必須一致
  • 位置必須與定義時一致
def twoSum(a, b):
    c = a + b
    return c

print(twoSum(2))
# TypeError: twoSum() missing 1 required positional argument: 'b'
# 少了一個參數便動不了

關鍵字參數

呼叫函式時,在傳入參數值的前面加上函式所定義的參數名稱

為參數設默認值

def funcname(parameter1 = defaultvalue1):
    pass

defaultvalue:可選參數,為該默認值

  • 範例
def twoSum(a, b = 3):
    return a + b

print(twoSum(5))
# 8
# 在沒有指定的情況下,b默認為3
print(twoSum(5, 5))
# 10

定義函式時,設置參數為默認值時須小心一點,默認參數必須指向不可變對象

可變參數

  • *parameter(可接收任意多個參數)
def add_all(*add):
    result = 0
    for i in range(len(add)):
        result += add[i]
    return result

print(add_all(1, 2, 3, 4, 5))
# 15
  • **parameter,表示可接收任意多個類似關鍵字參數一樣顯示賦值的實際參數,並放進字典中
def printSign(**sign):
    print()
    for key, value in sugn.items():
        print(key, value)

printSign(a = "b", c = "d")
# a b 
# c d

# 如果需要導入的是一個字典
# dict = {"a" : "b", "c" : "d"}
# printSign(**dict)

返回值

  • 也就是return,如果沒有return,即返回None空值
# 取自python tutor
def listSum(numbers):
    if not numbers:
        return 0
    else:
        (f, rest) = numbers
        return f + listSum(rest)

myList = (1, (2, (3, None)))
total = listSum(myList)
# 6

變量的作用域

  • 局部變量(只能在函式裡呼叫)
def print_test():
    mes = "god"
    print(mes)

print_test()
print(mes)
# god
# NameError: name 'mes' is not defined
  • 全域變量
mes = "god"
def print_test():
    print(mes)
    
print_test()    
print(mes)
# god
# god
  • 也可以......
# 也可以改成global
mes = "god"
print("函數外 = ", mes)

def test():
    global mes
    mes = "mes id god"
    print("函數內 = ", mes)

test()
print("函數外 = ", mes)
# 函數外 =  god
# 函數內 =  mes id god
# 函數外 =  mes id god

匿名函式

  • 指的是沒有名字的函式,使用lambda表達式
result = lambda[arg1[arg2[.....]]]: expression
  • 舉例
import math

def circlearea(r):
    return math.pi * r * r
    
print(circlearea(10))
# 314.1592653589793
# 上述寫法同等於 ......

import math

r = 10
result = lambda r:math.pi*r*r
print(result)

注意

注意函式的參數與默認值


上一篇
難搞的字串符
下一篇
後浪推前浪--前浪死在沙灘上,淺談class
系列文
Discord-bot,從0開始到做出一個機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言