参数
定义函数时位置参数可以带默认值的参数,如果不知道参数的具体数量也可以设置可变参数。
可变参数,在调用函数时可以传入任意数量的参数。
调用函数时按参数的传递方式,参数分为位置参数和关键字参数。
位置参数,调用函数时按定义函数时的参数次序传递参数。
关键字参数,调用函数时指定函数名称来传递参数,关键字参数可以不按顺序传入。
# 位置参数
def cal_volume(length, width, height=2): # height为带默认值的位置参数
"""计算立方体的体积"""
v = length * width * height
return v
volume = cal_volume(2, 3)
print('volume:', volume)
volume = cal_volume(width=3, height=2, length=2) # 关键字参数
print('volume:', volume)
# 可变参数
def cal_perimeter(*sides):
"""计算平面图形的周长"""
p = 0
for i in sides: # 可变参数sides为元组
p += i
return p
perimeter = cal_perimeter(1, 2, 3, 4, 5)
print('perimeter:', perimeter)
局部变量
函数内定义的变量为局部变量,作用范围为函数内。
n = 1 # 全局变量
def add1(n):
n = n + 1 # 等号左侧n是新的局部变量,不同于函数外的全局变量n,此处加法不会修改函数外的变量n,\
# 也不会修改参数变量n,等号右侧n是函数的形式参数
# 定义函数时函数局部变量与参数变量名称相同容易让人产生困惑,两者不要同名
return n
def add2(n):
m = n + 1 # 局部变量名不要与参数变量同名
return m
result1 = add1(n)
result2 = add2(n)
print(result1, result2)
print('n =', n) # n未被修改
def add3(m):
global n # 使用global声明n为全局变量,可以在函数内修改函数外的全局变量
n = m + 1
return n
result3 = add3(n)
print(result3)
print('n =', n) # n被修改
全局变量
在函数外部定义的变量为全局变量,作用范围为整个程序文件。
尽量不要使用全局变量,因为在任何地方都可以访问和修改全局变量。如果全局变量在程序执行过程中一直在变化,当全局变量的值有错误时,需要找到所有访问过全局变量的语句以确定错误来源于哪里,不便于程序的维护。
使用函数参数和返回值来实现不同部分之间的信息传递。
在必须使用全局变量的时候,可以把全局变量设置为常量,放在程序最顶部,便于程序的维护。
不要在函数内用global声明来访问全局常量。