>deffn(a):> a[2]=30>print('a =',a,id(a))> b =[1,2,3]># 直接传递实参> fn(b)>print('b =',b,id(b))> a =[1,2,30]1915510083976> b =[1,2,30]1915510083976># 通过切片传递实参> fn(b[:])>print('b =',b,id(b))> a =[1,2,30]3180397810568> b =[1,2,3]3180397810056># 通过copy()方法传递实参>> fn(b.copy())>print('b =',b,id(b))> a =[1,2,30]2444721476488> b =[1,2,3]2444721475976
># 定义不定长关键字参数必须在参数的最后,否则报错>defa(**a,b):>print('a =',a)>print('b =',b)>'''
> def a(**a,b):
> SyntaxError: invalid syntax
> '''>defa(a,**b):>print('a =',a)~>print('b =',b)> a(1,b=2,c=3,d=4)> a =1> b ={'b':2,'c':3,'d':4}
函数的返回值
概念 —— 函数执行以后返回的结果
返回值语句 —— return(指定函数返回值)
可以直接使用函数的返回值,或通过一个变量来接收函数的返回值
return后面可以是任意对象
如果函数没有返回值,或没有return语句,返回值为None
return语句后面的代码都不会执行,return执行后函数结束
>deffn():>return123> r = fn()>print(r)>123># 不使用return语句不能进行函数值的操作,因为返回值为None>deffn():>print(10)> r = fn()>print(r-3)>'''
> File "<stdin>", line 1, in <module>
> TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
> '''># 使用return语句可以进行函数值的操作>deffn():>return10> r = fn()>print(r-3)>7
文档字符串(长字符串)
使用方法 —— 使用六个单引号(前3个,后3个,中间为字符串)
查看函数、方法的文档 —— 使用help(),参数传递时不用带括号
># 查看方法帮助文档>help(list.copy)>'''
> Help on method_descriptor:
> copy(self, /)
> Return a shallow copy of the list.
> '''># 查看函数帮助文档>help(print)># 略
> a =1>deffn():> b =2>print('函数内部:a =',a)>print('函数内部:b =',b)> fn()>print('函数外部 a =',a)> 函数内部:a =1> 函数内部:b =2> 函数外部:a =1># 函数外部调用函数内部变量会报错>deffn():> a =2>print('函数内部:a =',a)> fn()>print('函数外部 a =',a)># NameError: name 'a' is not defined
函数内部修改全局变量
方法 —— 在函数内部使用(global 变量)语句,此时函数内所有声明后的变量修改都影响全局变量
> a =1>deffn():>global a
> a =10>print('函数内部:a =',a)> fn()>print('函数外部:a =',a)> 函数内部:a =10> 函数外部:a =10