函数传递参数

为什么要使用参数

  • 之前写的in_fridge函数,直接读取全局作用域的变量。
  • 函数直接操作全局变量,变量名字整个程序都可以访问。
  • 这种写法只适合很小的程序;项目变大之后,代码会变得难读、容易出错。
  • 更好的方案:给函数传递参数,把需要的数据传入函数内部。

定义带参数的函数

def in_fridge(some_fridge, desired_item):
    """This is a function to see if the fridge has a food.
    fridge has to be a dictionary defined outside of the function.
    the food to be searched for is in the string wanted_food"""
    try:
        count = some_fridge[desired_item]
    except KeyError:
        count = 0
    return countCode language: PHP (php)
  • def in_fridge(some_fridge, desired_item): 括号内写两个参数,多个参数用逗号隔开。
  • 参数的作用域仅限于函数内部some_fridgedesired_item 只在这个in_fridge函数里面生效,函数外部不能直接使用这两个变量。

调用带参数函数

# 定义冰箱字典
fridge = {"apple":3, "banana":2}

# 调用,把实际数据传进去
num = in_fridge(fridge, "apple")
print(num)Code language: PHP (php)

区分

  1. 形参(形式参数):定义函数时括号里的名字 some_fridge, desired_item,只占位置。
  2. 实参(实际参数):调用函数时传入的真实数据 fridge, "apple"
  3. 参数变量属于函数局部作用域,函数运行结束就销毁,不会污染全局变量。

两种写法

直接读取全局变量(不推荐大项目)

fridge = {"apple":3}
def in_fridge():
    # 直接读外面全局的fridge
    return fridge.get("apple",0)Code language: PHP (php)

通过参数传入

def in_fridge(some_fridge, desired_item):
    try:
        return some_fridge[desired_item]
    except KeyError:
        return 0Code language: JavaScript (javascript)

总结

  1. 不要过度依赖全局变量,大程序会很难维护。
  2. def 函数名(形参1,形参2)定义参数。
  3. 调用的时候函数名(实参1,实参2)传入真实数据。
  4. 参数属于函数局部变量,外部访问不到。

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注