函数的动态传参

*args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args

  有些时候,对于函数,传入的实参数量可能是不固定的,也就是动态的,这个时候我们就需要用到函数的动态传参。下面举个个列子,我需要一个函数,无论我给他任意个数字参数,他都能返回我所有数字的和。

def count(*args):
sum0 = 0
for i in args:
sum0 += i
return sum0
print(count(1,2,3,4,5))
#运行结果:15

这样无论我在函数count中输入多少个数字,都能返回和。*args就是动态传参,实质上是函数会将接受到的值打包成元祖的形式赋值给args,不信你可以在函数值用type去判断。总结:*在函数的定义时,在 *位置参数,聚合

**kwargs 将所有的关键字实参作为字典的键值对聚合到一个字典,并赋值给kwargs

  有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键 — 值对 —— 调用语句提供了多少就接
受多少。

def func1(**kwargs):
print(kwargs) func1(name = 'king',age = 24)
运行结果:{'name': 'king', 'age': 24}

可以看出**是将接收到的关键字参数作为键值对赋值给,kwargs。

  编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可少的信息,以及两个名称 — 值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:

car = make_car('subaru', 'outback', color='blue', tow_package=True)

分析要求,题目要求函数总是接受制造商和型号,也就是这2个参数是必须填的,我们可以设置成位置参数,而其他还接受任意数量的关键字实参。所以需要用到**方法:

def make_car(name,producter,**kwargs):
dic = {}
dic['车型'] = name
dic['生产商']=producter
for i in kwargs:
dic[i] = kwargs[i]
return dic
car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(car)
#运行结果:
{'车型': 'subaru', '生产商': 'outback', 'color': 'blue', 'tow_package': True}
#如果只输入car = make_car('subaru', 'outback')
则会打印 {'车型': 'subaru', '生产商': 'outback'}

函数形参的顺序

位置参数,*args, 默认参数 **kwargs我们在定义形参时,必须遵循这样的原则位置参数,默认参数

def func(a,b,sex='男'):
# print(a)
print(sex)
func(100,200,)
位置参数,*args, 默认参数
def func(a,b,*args,sex='男',):
# print(a)
print(a,b)
print(sex)
print(args)
func(100,200,1,2,34,5,6)
位置参数,*args, 默认参数 **kwargs
def func(a,b,*args,sex='男',**kwargs,):
print(a,b)
print(sex)
print(args)
print(kwargs)
func(100,200,1,2,34,5,6,sex='nv',name='alex',age=1000)

python----函数的动态传参的更多相关文章

  1. python函数的动态传参.作用域与命名空间

    一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...

  2. python之路--动态传参,作用域,函数嵌套

    一 . 动态传参(重点)  * ,  ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...

  3. python记录_day10 动态传参 命名空间 作用域

    一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...

  4. Python函数定义及传参方式

    主要内容:     1.函数初识     2.函数传参方式        (1)位置参数        (2)默认参数        (3)关键参数        (4)非固定传参 一.函数初识 1. ...

  5. python函数关键字实参传参

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...

  6. python函数位置实参传参

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...

  7. python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

    一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...

  8. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

  9. 函数动态传参,命名空间,gloabal,nonlocal关键字

    一.函数参数->动态传参(形参的第三种) 动态参数分为两种: 1)动态接收位置参数 普通的位置传参: def func(quality_food,junk_food): print('我要吃', ...

  10. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

随机推荐

  1. VS2015/Visual Studio快捷键无效问题

    0 VS2015快捷键无效问题的解决办法 快捷键的使用可以大大提高编码效率,VS为我们内置了不少的常用快捷键组合,实际使用过程中往往会随着计算机上安装其他软件引起快捷键冲突,导致VS快捷键失效,解决办 ...

  2. Spark运行模式:cluster与client

    When run SparkSubmit --class [mainClass], SparkSubmit will call a childMainClass which is 1. client ...

  3. UIToolBar - 官方文档

    继承关系:UIToolBar -> UIView -> UIResponder -> NSObject. toolBar是一个工具栏,用于显示一个或多个按钮.其按钮叫做toolBar ...

  4. CSS 伪类 (Pseudo-classes)实例

    CSS 伪类 (Pseudo-classes)实例CSS 伪类用于向某些选择器添加特殊的效果在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访 ...

  5. Python全栈开发之路 【第十八篇】:Ajax技术

    Ajax技术 Ajax = 异步 JavaScript 和 XML. Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 1.jQuery的load()方法 jQuery loa ...

  6. Beta阶段团队成员贡献分分配规则

    Beta阶段团队成员贡献分分配规则 Alpha阶段贡献分分配有些负责,在这里进行一些修改: 对任务完成得分部分进行了简化 对发现bug的惩罚措施进行了修改 移除了优化得分,不鼓励修改他人代码 移除了帮 ...

  7. Python_内置函数2_44

    字符串类型代码执行: exec('print(123)') eval('print(123)') print(eval('1*2+3+4')) # 有返回值 print(exec('1+2+3+4') ...

  8. Vue基础(ES6)

      起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐上来就 ...

  9. 原生JS操作object HTMLTableSectionElement 对象,获取行数

    html页面 <tbody id="infoTab"> <tr class="fomat"> <td class="bl ...

  10. PHP PSR代码规范

    转载: https://www.awaimai.com/916.html PSR是PHP通用性框架小组 (PHP Framework Interop Group) 制定的PHP代码编写格式规范,是PH ...