跳轉到

2.6 函式

基本語法架構

# Function is a group of related statements that perform a specific task.
def function_name(parameters):
  statement(s)
  • def
  • marks the start of function header.
  • function name
  • to uniquely identify it.
  • parameters
  • through which we pass values to a function. (optional)
  • colon (:)
  • to mark the end of function header.
  • return statement
  • to return a value from the function. (optional)

定義一個簡單的Define, Call Function

無輸入參數呼叫

# define function without parameters
def greet():
  print("Hello!")
# call function
greet() # Hello!

有輸入參數呼叫

# define function with parameter
def greet(name):
  print("Hello", name + ", nice to meet you.")
greet("Felix") # Hello Felix, nice to meet you.

定義一個具有回傳值的函式 Return Statement

單一個回傳

# One
def add_two_nums(arg1, arg2):
  sum = arg1 + arg2
  return sum
# call function
result = add_two_nums(10, 20)
print(result) # 30

多個回傳值

第一種是回傳接收一組tuple

# constructs a tuple and returns this to the caller
def square(x,y):
  return x*x, y*y
result = square(2,3)
print(result) # (4,9)

可以將回傳結果用變數去接收

# "unwrap" the tuple into the variables directly by specifying the same number of variables
def square(x,y):
  return x*x, y*y
res_x, res_y = square(2,3)
print(res_x) # 4
print(res_y) # 9

匿名函式 Anonymous Function - Lambda

單個數入參數

# Lambda functions can have only one expression.
# The expression is evaluated and returned.
double = lambda x: x * 2
print(double(5)) # 10

# is nearly the same as
def double(x):
  return x * 2

多個輸入參數

# Lambda functions can have any number of arguments
double = lambda x, y: x * 2 + y
print(double(5,2)) # 12

# is nearly the same as
def double(x, y):
  return x * 2 + y

Global, Local variables

# global
x = "global"

def foo():
  y = x + "_variable"
  print(y)
foo() # global_variable
# local
def foo():
  z = "local"

# NameError: name 'z' is not defined
print(z)

Test

Q1. 請寫出一個函式,將列表中的數字相乘。
Sample List : [1, 2, 3, 4, 5]
Expected Result : 120
def myFunction(list):
  tot=1
  for num in list:
    tot*=num
  return tot
print(myFunction([1, 2, 3, 4, 5]))
Q2. 請寫一個函式,輸入一字串,返回反轉全部字元的字串。

a_func("test")
Expected Result : "tset"
def a_func(str):
  reverseStr=""
  for char in range(len(str)-1,-1,-1):
    reverseStr+=str[char]
  return reverseStr
print(a_func('test'))
def a_func(x):
  return x[::-1]
print(a_func('test'))
a_func=lambda x: x[::-1]
print(a_func('test'))
Q3. 請寫一個函式把裡面的字串,每個單字本體做反轉,但是單字的順序不變。 (Optional)

a_func("it is a test string")
Expected Result : "ti si a tset gnirts"
def a_func(str):
  arr=str[::-1].split(' ')
  return (' ').join(arr[::-1])
print(a_func('it is a test string'))