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)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...
随机推荐
- 解决 Mac webstrom Mac bigsur 中 Can‘t use Subversion command line client:svn
解决 Mac webstrom Can't use Subversion command line client: svn The path to the Subversion executable ...
- 如何用pdfFactory新建打印机并设置属性
今天我们来讲一讲,在pdfFactory中如何去修改PDF文件打印页面的页边距.页面大小.页面清晰度等属性参数. pdfFactory是一款Windows平台上的虚拟打印机,在没有打印机可以安装的情况 ...
- input[type=file] 样式美化,input上传按钮美化
<style>.file { position: relative; display: inline-block; background: #D0EEFF; border: 1px sol ...
- (原创)用.NET Core实现一个在线客服系统(上篇)
前言 没有视频的介绍显得尤为空白仓促.所以,如果你不赶时间,看看视频先 → → 戳我看视频 ← ← 在线演示访客端:http://role.fuyue.xyz/visitor/index客服端:ht ...
- 【POJ 1845】Sumdiv——数论 质因数 + 分治 + 快速幂
(题面来自luogu) 题目描述 输入两个正整数a和b,求a^b的所有因子之和.结果太大,只要输出它对9901的余数. 输入格式 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式 ...
- J - Sushi 题解(期望dp)
题目链接 题目大意 给你n个盘子,每个盘子可能有1,2,3个披萨 你选到每个盘子的概率是一样的. 你如果选到空的盘子什么都不做 如果你选到有披萨的盘子则吃掉一个披萨 求吃完所有披萨的期望 题目思路 设 ...
- C语言讲义——变量(variable)
变量(variable) 变量用于存放数据 变量是供程序操作的存储区的名字 变量有类型,该类型决定了变量占用内存的大小 字节→ C语言有以下6种简单变量类型: 类型细分: 变量在内存中需要占据空间,内 ...
- 你知道第一个C语言C++编译器是如何诞生的吗?
当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用 C 语言编写的,有一些语言比如 Clojure,Jython 等是基于 JVM 或者说是用 Java 实现的,IronPython 等是基于 ...
- partial conv
Image Inpainting for Irregular Holes Using Partial Convolutions pytorch代码 论文贡献: 提出了部分卷积(partial conv ...
- 极简python教程:快速入门好方法
大家好,我是测试奇谭的作者风风. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的快速教程,他们的痛点同大多数自学编程语言的人一样,遇到了这些问题: 网络上的信息太多,良莠不 ...