python----函数的动态传参
函数的动态传参
*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----函数的动态传参的更多相关文章
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- python记录_day10 动态传参 命名空间 作用域
一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...
- Python函数定义及传参方式
主要内容: 1.函数初识 2.函数传参方式 (1)位置参数 (2)默认参数 (3)关键参数 (4)非固定传参 一.函数初识 1. ...
- python函数关键字实参传参
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...
- python函数位置实参传参
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...
- python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)
一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...
- python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal
⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...
- 函数动态传参,命名空间,gloabal,nonlocal关键字
一.函数参数->动态传参(形参的第三种) 动态参数分为两种: 1)动态接收位置参数 普通的位置传参: def func(quality_food,junk_food): print('我要吃', ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
随机推荐
- kafka+storm结合存在的一些问题与解决方法
在配置kafka和storm的时候, 经常的会出现一些问题, 主要在以下几个: 1. 打jar包上去storm集群的时候会出现jar包冲突,类似于log4j或者sf4j的报错信息. 2. kafka ...
- babel-polyfill使用与性能优化
文章首发于笔者的个人博客 文章概览 本文主要内容包括:什么是babel-polyfill,如何使用,如何通过按需加载进行性能优化. 本文所有例子可以在 笔者的github 找到. 什么是babel-p ...
- LeetCode 657. Robot Return to Origin
There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its mov ...
- Git简易的命令入门
Git 全局设置: git config --global user.name "kszsa" git config --global user.email "duyon ...
- portscaner 多线程、多协程并发端口扫描
import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all() so ...
- Python入门-Hello Word
1.python语言介绍 Python创始人:Guido Van Rossum 2.python是一种解释型.动态类型计算机程序设计语言. 解释型:程序无需编译成二进制代码,而是在执行时对语句一条一条 ...
- MySQL的视图总结
使用下面格式创建视图: create or replace view viewName as select ..... from ...... where .... 删除视图: drop view v ...
- Alibaba Cloud Toolkit for Eclipse & ECS、EDAS 或容器服务 Kubernetes
UserGuide_V2.1.0http://toolkit.aliyun.com/eclipse/?spm=5176.2020520130.105.3.3c3b697bOHma9f&msct ...
- Linux 查找文件命令 find whereis locate
Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...