写机器人必备 -- 函式的操作

创建第一个函式

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)

注意

注意函式的参数与默认值


<<:  Day9:[资料结构] Linked-List - 链结串列

>>:  Day1-前言

机器学习:深度学习

随着理论的成熟,丛集运算能力的提升,深度神经网路模型逐渐发挥了巨大的影响力。 神经元模型 来自於对动...

介绍影像辨识的处理流程 - Day 10

介绍影像辨识的处理流程 - Day 10 所有影像辨识的问题都会面临以下几个问题:图片中有几个要辨识...

Day 14 试用 Heroku

今天来试用 Heroku,并请使用 Heroku 的 Python 范例。 在这之前我已经有注册过 ...

课堂笔记 - 深度学习 Deep Learning (18)

上一篇有提到关於如何在向量中求梯度下降的公式, 因此此篇要来讲为什麽要向量v跟f(x,y)的偏微分作...

Day 11 - OOP 初探 (1) - Closures 与继承链

前言 在学习 FP 的过程中,会看到 FP 常常被拿来跟 OOP 做比较,那 OOP 究竟是什麽呢?...