Day5 - 03 函数的参数-位置参数和默认参数
位置参数
调用函数时,传入函数的参数,按照位置顺序依次赋值给函数的参数。
#计算乘方的函数
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
在使用power(1,2)时, 会根据位置顺序,将1赋值给x ,2 赋值给n。
如果希望不指定指数时,默认按照平方进行计算,可以指定函数的默认参数。
#计算乘方的函数,默认计算平方
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
直接使用power(10) ,则计算10的平方。 如需计算5的3次方,则使用power(5, 3)。
使用默认参数可以简化函数的调用,但是设置默认参数时有几点需要留意:
1.必选参数在前,默认参数在后,否则会报错。
2.当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面, 变化小的参数就可以作为默认参数。
3.默认参数必须指定为不变对象!
#在这里对默认参数的几点留意进行一下详解。
#首先定义一个函数,用来登记身份信息,使用4个参数:姓名,年龄,性别,国籍。
#在这里,年龄、性别、国籍都可以从某一个维度上根据需要设定为默认参数,例如:班级学生大多数年龄一样大、足球队员性别大多数都是一样的、国籍更是有相当的一致性。
def info(name,age,sex,intl):
print(name,'来自于',intl,'是一个',age,'岁的',sex,'孩')
return None
>>> info('小A',10,'男','中国')
小A 来自于 中国 是一个 10 岁的 男 孩
#假设现在有10个人,都是中国籍的男孩子,其中有两个孩子分别是14岁和12岁,其他人都是10岁,那么这种录入操作就很适合做默认参数了。
def info(name,age=10,sex='男',intl='中国'):
print(name,'来自于',intl,'是一个',age,'岁的',sex,'孩')
return None
>>> info('小B')
小B 来自于 中国 是一个 10 岁的 男 孩
>>> info('小C')
小C 来自于 中国 是一个 10 岁的 男 孩
>>> info('小D',12)
小D 来自于 中国 是一个 12 岁的 男 孩
>>> info(age=14,name='小E')
小E 来自于 中国 是一个 14 岁的 男 孩
#可以看出,在使用默认参数的时候其实很灵活,可以根据顺序传入参数,也可以指定参数名赋值的方式不按照顺序提供参数。
默认参数的坑:一定要设为不可变对象。
先来试试将默认参数设置为可变对象的情况:
>>> def nn(name,ext=[]):
... ext.append('over')
... print(name,ext)
...
>>> nn('a')
a ['over']
>>> nn('a')
a ['over', 'over']
可以看到,list作为默认参数时,发生了意料之外的结果。
函数在定义的时候,默认参数ext的值就被计算出来了,在这里是[],ext参数实际上是一个指向[]的变量,如果改变了ext参数( 就是 [] )的内容,则下次调用时默认参数的内容就变了,指向到了修改后的[]的位置,而不再是最先定义函数时的[]了。
为了避免上面的情况,可以使用这种方式来解决:
>>> def nn(name,ext=None):
... if ext is None:
... ext = []
... ext.append('over')
... print(name,ext)
...
>>> nn('aa')
aa ['over']
>>> nn('aa')
aa ['over']
>>> nn('aa','bb')
aa bb
使用不可变对象能够减少由于修改数据导致的错误,由于对象不变,多任务环境下同时读取对象也不需要加锁,可以同时进行读动作。在编写程序时,如果可以设计为不变对象,就尽可能设计成不变对象。
Day5 - 03 函数的参数-位置参数和默认参数的更多相关文章
- python函数中的位置参数、默认参数、关键字参数、可变参数区别
一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...
- python函数参数类型:位置参数、默认参数、动态参数、关键字参数
1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...
- python的位置参数、默认参数、关键字参数、可变参数区别
一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...
- Python虚拟机函数机制之位置参数的默认值(五)
位置参数的默认值 在Python中,允许函数的参数有默认值.假如函数f的参数value的默认值是1,在我们调用函数时,如果传递了value参数,那么f调用时value的值即为我们传递的值,如果调用时没 ...
- [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)
关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...
- python函数参数中带有默认参数list的坑
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 def f(x,l=[]): for i in range(x): l.append(i*i) print(l) print( ...
- js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)
js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...
- python3 函数的形参、实参、位置参数、默认参数、关键字参数以及函数的递归
python 版本 3.5 #Author by Andy#_*_ coding:utf-8 _*_def func(x,y=2): print('我是形参%s'%x) print('我是默认参y-- ...
- Python之在函数中使用列表作为默认参数
本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...
随机推荐
- Python_错误调试2018.3.17【待完善】
异常处理 几个提示信息: notice 注意 warning 警告 error 错误 debug 调试 错误处理 1.Try语句 try execpt 2.print() 3.assert断言,当满足 ...
- 你了解JWT吗?
1. 什么是JWT JWT简称 JSON Web Token,也就是通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输.在数据传输过程中还可以完成数据加 ...
- linux 身份鉴别口令复杂度整改
口令复杂度: 1.首先安装apt install libpam-cracklib -y2.vim /etc/pam.d/common-password3.在第2步末尾添加password requis ...
- 新鲜出炉!阿里Java后端面经,已拿offer!
前面给大家分享了一篇字节跳动拿下offer的面经,很多小伙伴都私信我说收获很大,感兴趣的朋友可以回头去看看.很多小伙伴还问我有没有其他大厂的面试题分享,这不他来啦,阿里2020春招面试题给大家整理在下 ...
- 硕思logo设计师注册码去哪里找
硕思logo设计师注册码去哪里找呢?当然是硕思logo设计师官网啦! 最近小编总是会被网友们咨询关于logo设计的问题,其中很多网友并不是专业的设计人员,特别是一些设计公司面对新手设计时,往往会不知所 ...
- Mac如何像Windows一样在文件系统中查看文件?
许多Windows系统用户刚转向Mac的时候,肯定非常不适应Mac系统独特的文件系统,就像安卓转iOS系统一样,那么Mac电脑如何像Windows系统一样,能够查看电脑上的各个盘,如C盘D盘等等,然后 ...
- 如何用pdfFactory新建打印机并设置属性
今天我们来讲一讲,在pdfFactory中如何去修改PDF文件打印页面的页边距.页面大小.页面清晰度等属性参数. pdfFactory是一款Windows平台上的虚拟打印机,在没有打印机可以安装的情况 ...
- RabbitMQ PHP扩展安装
RabbitMQ PHP扩展安装 # 安装rabbitmq-c依赖包 yum install libtool autoconf # 安装rabbitmq-c ( 最好下载 0.5的,0.6安装可能会报 ...
- P6631 [ZJOI2020] 序列
可以将问题用形象的方式来表述.给定一排点,第 \(i\) 个点有它需要的覆盖次数 \(a_i\).有两种线段,一种能覆盖连续的一些点,称其为连续线段:另一种能覆盖相邻间隔为 \(1\) 的一些点,称其 ...
- 【操作系统】银行家算法实现(C语言)
[操作系统]银行家算法实现(C语言) 注意:本人编码水平很菜.算是自己的一个总结.可能会有我还没有发现的bug.如果有人发现后可以指出,不胜感激. 1.银行家算法: 我们可以把操作系统看作是银行家,操 ...