python学习日记--函数
程序员文章站
2022-03-20 18:29:08
...
函数
命名方式:
def
一、参数类型与使用:
1.位置参数
def function(a,b,c) : //命名方式,其中a、b、c为位置参数
return
function(1,2,3) //使用
2.默认值参数(默认值参数许位于位置参数后面)
def function(a,b,c=10,d=5) : //命名方式,其中a、b为位置参数,c、d为默认值参数
return
function(1,2,3,4) //使用1
function(1,2,3) //使用2,此时c的值为3,d的值为默认值5
3.命名参数(按照形参的名称传递参数)
def function(a,b,c) : //命名
return
function(b=1,a=2,c=3) //可以不按照命名时候的形参顺序使用
4.可变参数(指的是“可变数量的参数”)存在两种情况:
…1)*param(一个星号),将多个参数收集到“元组”对象传入函数
def function(a,b,*c):
return
function (1,2,3,4)` //此时的c=(3,4)
…2)**param(两个星号),将多个参数收集到“字典”对象传入函数
def function(a,b,**c):
return
function (1,2,'name'=3,'age'=4)` //此时的c={'name':3,'age'=4}
5.强制命名参数(在“可变参数”后面增加的参数,必须强制使用“命名参数”,避免该部分参数被纳入“可变参数”的值)
二、参数传递都是“引用传递”,不是值传递:
1.对“可变对象”进行“写操作”,直接作用于原对象本身;
2.对“不可变对象”进行“写操作”,会产生一个新的“对象控件”,并用新的值填充该空间。效果与其他语言的“值传递”一致,但是不是“值传递”
可变对象:字典、列表、集合、自定义对象
不可变对象:数字、字符串、元祖、function
3.不可变对象中包含可变对象:
当不可变对象中包含可变对象的时候,该部分的可变对象的值是可变的。因为可变对象本身没有变动,只是里面的值引用指向变动了。
a=(1,2,[3,4])
a[2][0]=1 //正常
a[2]=[1,4] //错误
4.浅拷贝(copy)与深拷贝(deepcopy):
浅拷贝:不拷贝对象的内容,只是拷贝对象的引用;
深拷贝:拷贝对象的内容并且存储在其他内存空间,对该拷贝对象的修改不影响源对象
三、lambda表达式
基本语法:lambda arg1,arg2,arg3…:<表达式>
#arg的部分为函数的参数,<表达式>相当于函数体,返回<表达式>中计算的结果
f=lambda a,b,c:a+b+c
print(f(2,3,4))
四、匿名函数