python函数2

1、在pyhton中返回多个值
return a,b 形式返回值为元组,并且会把值依次复制给a,b
也就是这里的a 就相当于result[0],b相当于result[1]

这里写图片描述

同时我们也可以通过元组,列表,字典保存多个返回值。

2、缺省函数
我们给形参c赋值为3.5,这时c可以传参数也可以不传参数,传,则c的值为传递的值,不传则c的值为我们最初赋予的值
这里写图片描述

这里写图片描述

传递的实参与形参的位置时一一对应的,所以如下做法d并没有别赋值,所以报错
这里写图片描述

如果我们想给d传递参数,而不给c传递参数,应把c放到最后
这里写图片描述

也可以在代码段中指定给哪个参数传递值
这里写图片描述

4、不定长参数
(1)元组,这里不一定是*agrs,也可以是*a,*b,*haha等
这里写图片描述

它会先给必须赋值的单个形参赋值,然后把剩下的值全部存到元组里面
这里写图片描述

(2)字典,使用**来定义,例如**c,**d,**name等

可以看到在给a,b传递完参数后把所有的参数都给了元组agrs了
这里写图片描述

那么什么情况下会给字典传递参数呢,当我们以a=b的形式传递参数时
这里写图片描述

网形参里面传递列表和字典
这里写图片描述

当列表或元组作为实参传递时,如果前面有一个*,表示对其进行解包,意思是将
[11,22,33] ——> 11,22,33
当字典作为一个是实参进行传递时,如果前面有两个*,表示对其进行解包,
意思是将{“aa”:100,”bb”:200} ——> aa=100,bb=200
这里写图片描述

3、可变数据类型和不可变数据类型
可变数据类型:列表、字典
不可变类型:数值、字符串、元组

例一:
对变量a赋值为数字100,令b = a,则b的值也是100,通过查看内存地址可知b和a指向同一内存地址。
这里写图片描述

现在对a的数值进行修改,修改以后a的值发生了变化,a指向的内存地址也发生了变化,b的值没有变,b指向的内存地址也没有变
这里写图片描述

而且给a ,b,c分别赋值为相同的数字,则a,b,c的地址空间相同
这里写图片描述
例二:
A是一个列表,令B = A,则A、B指向同一位置,然后对A进行修改,发现A的值发生了变化,B的值也随之发生了变化,但A和B的内存地址没有变
这里写图片描述
这里写图片描述

给A,B,C赋予相同的列表,则A,B,C的内存地址不同
这里写图片描述

原因:因为数字是一个不可变类型,所以修改a的值,它无法在原值上修改,只能去其他地方重新找个内存地址重新赋值了
而列表是一个可变的数据类型,所以可以在原值上进行修改,所以就直接在原值上改了。

例三:
字典的K值可以是字符串,数值,元组,这三个都是不可变的
这里写图片描述

如果让字典的K值是列表呢? 可以看到这时会报错
这里写图片描述

原因:K是必须是可哈希的

4、函数传递引用
Python中函数参数是引用传递(注意不是值传递)。对于不可变数据类型,因变量不能修改,所以运算不会影响到传递的变量自身,而对于可变数据类型来说,函数体中的运算有可能会改变传入的参数变量。
(1)传递不可变数据类型
可以看到a的值的改变并没有对传递的变量A产生影响
这里写图片描述

(2)传递可变数据类型
例如我们传递一个列表,对形参做 a += a 的操作
这里写图片描述
可以看到A的值已经发生变化,并且时在原内存地址所对应的值上直接进行修改的

同样是刚才的函数,我们对形参进行 a = a + a操作
这里写图片描述
可以看到A的值和内存地址都没有变化,而修改后的a指向的是另外一个内存地址。
所以得出以下结论:
对于可变数据类型:
a += a是在原地址上进行操作
a = a +a 是先把原值复制一份到其他空间再进行操作。

5、函数递归
一个函数调用了它自己本身,这样的函数叫递归
1到100的累乘
这里写图片描述
6、匿名函数

lambda 参数:表达式

例如三个数求和
这里写图片描述

lambda能接受任何数量的参数,但只能有一个返回值
匿名函数不能直接调用print,因为lambda需要一个表达式

可以看到会直接将表达式中的结果返回,这里“haha“前不需要加print
这里写图片描述

匿名函数可以当作参数进行传递
对a,b进行求和
这里写图片描述

匿名函数在sort中的应用
这里写图片描述
对age进行排序
这里写图片描述

对age进行逆序
这里写图片描述

函数的注意事项:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值