形参与实参
在定义函数时给定的名称称作形参(Parameter),而在调用函数时实际传递给函数的值称作实参(Argument)。理解两者的区别是掌握函数调用的基础。
def greet(name):
print(f"Hello, {name}")
# name 是形参,'Alice' 是实参
greet('Alice')
这里 greet 函数期待一个名字,我们传入 'Alice' 后,函数内部就能使用这个值了。这种机制让函数具备了复用性。
作用域与局部变量
所有变量的作用域通常限制在它们被定义的代码块内。从定义点开始,直到该块结束,变量才有效。如果在函数内部定义变量,它通常是局部的,外部无法直接访问。
def calculate():
result = 100 # 局部变量
return result
print(calculate()) # 输出 100
# print(result) # 报错:NameError,外部无法访问
这种隔离机制避免了命名冲突,让代码更健壮。不过要注意,如果需要在函数内修改全局变量,就需要特殊处理。
全局变量与 global 语句
如果你想在函数内部修改程序顶层定义的变量(即全局变量),必须显式声明它为全局的。否则 Python 会认为你在创建一个同名的局部变量。
count = 0
def increment():
global count # 声明使用全局变量
count += 1
increment()
print(count) # 输出 1
虽然这能解决问题,但过度依赖 global 会让数据流向变得不清晰,建议优先通过参数传递和返回值来管理状态。
默认参数值
为参数提供默认值可以让函数调用更灵活,用户可以选择性地省略某些参数。这在配置类函数中非常常见。
def connect(host='localhost', port=8080):
print(f"Connecting to {host}:")
connect()
connect()


