为什么要使用参数
- 之前写的
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_fridge、desired_item只在这个in_fridge函数里面生效,函数外部不能直接使用这两个变量。
调用带参数函数
# 定义冰箱字典
fridge = {"apple":3, "banana":2}
# 调用,把实际数据传进去
num = in_fridge(fridge, "apple")
print(num)Code language: PHP (php)
区分
- 形参(形式参数):定义函数时括号里的名字
some_fridge, desired_item,只占位置。 - 实参(实际参数):调用函数时传入的真实数据
fridge, "apple"。 - 参数变量属于函数局部作用域,函数运行结束就销毁,不会污染全局变量。
两种写法
直接读取全局变量(不推荐大项目)
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)
总结
- 不要过度依赖全局变量,大程序会很难维护。
- 在
def 函数名(形参1,形参2)定义参数。 - 调用的时候
函数名(实参1,实参2)传入真实数据。 - 参数属于函数局部变量,外部访问不到。
Previous: 注释