举例子吧
def f(x):
x = 2
y = 1
f(y)
print(y)
这个程序输出1,因为整数不可变
def f(x):
x[0] = 2
y = [1]
f(y)
print(y[0])
这个程序输出2,因为列表可变。
>>>def demo(a,b,c=1): # c是默认值参数
print(a,b,c)
>>>demo(1,2)
out:1,2,1
>>>demo(1,2,3)
out:1,2,3
####多次调用函数并且不为默认值参数传递值时,默认值参数只在定义时进行一次解释和初始化,对于列表、字典这样可变类型的默认值参数,这一点可能会导致很严重的逻辑错误。
>>>def demo(newitem, old_list=[]):
old_list.append(newitem)
print(old_list)
>>>demo('5', [1, 2, 3, 4])
out:[1,2,3,4,'5']
>>>demo('aaa', ['a', 'b'])
out:['a','b','aaa']
>>>demo('a')
out:['a']
>>>demo('b')
out['a','b']
关于参数类型的理解:
对于可变类型的参数,在函数体内不被修改,原参数的值不会改变。但需要注意的是,对于可变类型的默认参数,每次调用函数时都会复用同一个默认参数,导致多次调用函数时默认参数的值会受到影响。
对于不可变类型的参数,在函数体内被修改,原参数的值也不会改变。这是因为在Python中,不可变类型的参数在传递时,相当于传递了它的值的一个副本,函数体内操作的是副本而不是原值。
以下是示例代码:
# 可变类型参数示例
def demo(newitem, old_list=[]):
old_list.append(newitem)
print(old_list)
demo('5', [1, 2, 3, 4]) # [1, 2, 3, 4, '5']
demo('aaa', ['a', 'b']) # ['a', 'b', 'aaa']
demo('a') # ['a']
demo('b') # ['a', 'b']
# 不可变类型参数示例
def demo(num):
num = num + 1
print(num)
a = 1
demo(a) # 2
print(a) # 1
针对参考资料中的视频处理代码,这里不作具体讲解,仅简单介绍一下代码中使用的库及函数。
如果对以上库和函数不熟悉,建议先进行学习和了解。