函数的参数:
-
形参:函数中出现
-
实参:主调函数中使用
-
实参传递的内容可以是任何数据类型,
-
参数传递:关键字传递 位置传递
-
关键字传递和位置传递可以混用,但是关键字传递后面不能再有位置参数,换言之就是混用时只能是最后一个参数用关键字传递
fn(1,2,c=10) 可以
fn(1,b=2,3) SyntaxError: positional argument follows keyword argument
fn(c=2,1,3) 也是错的 -
有函数fn()
-
fn 是函数本身,打印fn打印的是函数的ID
-
fn() 是调用函数,进行函数的相关操作
函数的传递方式
- 形参与实参
- 传递的是可变对象与不可变对象
- 传递时是改变了可变对象的地址还是只改变了可变对象中的某个值
- 调用函数,函数的实参是可变对象的两种情况:
- 在函数中为形参赋值:此时改变的只是形参,而实参并未改变
- 在函数中改变修改形参的值,此时形参和实参的ID一样,此时的改变会传递到实参中
- 还有一点,形参并未在全局赋值,在全局调用时会报错:
def fn5(a):
a[0]=1
#a=[1,2,4]
print(a,id(a))
c = [2,2,3,4,5]
fn5(c)
print(c,id(c))
结果:
[1, 2, 3, 4, 5] 16612728776
[1, 2, 3, 4, 5] 16612728776
由此可见,改变可变对象的内容时,这个改变传递了
def fn5(a):
#a[0]=1
a=[1,2,4]
print(a,id(a))
c = [2,2,3,4,5]
fn5(c)
print(c,id(c))
结果:
[1, 2, 4] 648694916616
[2, 2, 3, 4, 5] 648694079432
当为形参赋值时,形参的ID在函数内有效,出函数之后就无法使用了
如果实参传递的是c.copy
那么改变的C是不变的
def fn5(a):
a[0]=1
#a=[1,2,4]
print(a,id(a))
c = [2,2,3,4,5]
fn5(c.copy())
print(c,id(c))
结果:
[1, 2, 3, 4, 5] 90372302344
[2, 2, 3, 4, 5] 90371465160
复习
- 可变对象 集合的运算
- 可变对象 改对象和改变量 什么时候改对象,什么时候改变量
- a[10]=1 改对象
- a=10 改变量 a=[1,2,3] 改变量
- 集合 交并补 差
函数
-
函数也是对象 这个对象里面可以保存一些可以执行的代码
-
可以多次调用
-
函数的语法: def 函数名(形参1,2,3)
-
代码块
-
函数加括号 表示调用函数,不加括号表示函数对象
-
函数的参数: 形参 实参
-
多个形参要用逗号隔开
-
参数传递 位置传递和关键字传递
-
默认值:定义形参时定义默认值,当用户没有传递默认值
-
实参类型: 实参可以传递任意类型的对象,
-
函数传递 可变对象和不可变的对象
-
不定长参数:
-
结论即可 处理位置参数 (//*)处理关键字参数
-
解包