python之函数的传参形参的第三种动态参数*args和**kwargs
1. 位置/关键字传参的缺点
当给函数传入的参数数目不定时,之前的传参方式解决不了问题。
def eat(food1,food2,food3):
print(f'我请你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾')
万能参数,动态参数。 *args
def eat(food1,food2,food3):
print(f'我请你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')
2. *args 作用: ***
在实参角度:定义一个函数时,* 所有的位置参数聚合到一个元组中
*args传入位置参数
retrun后面跟args返回的是一个元组
def eat(*args): # 在实参角度:定义一个函数时,* 所有的位置参数聚合到一个元组中。
print(args)
print(f'我请你吃:{args}')
# eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')
练习题
函数接收不定个数的数字实参,将最终的和返回出去
def sum1(*args):
# print(args) (100, 2, 67, 3)
result = 0
for i in args:
result += i
return result
print(sum1(100,2,67,3))
**3. kwargs作用 (重要性***)
- 函数的定义时:**将实参角度所有的关键字参数聚合成了一个字典,给了kwargs.
- **wkargs传入关键字参数
- retrun 后面跟**kwargs返回的是一个字典
def func(**kwargs): # 函数的定义时:**将实参角度所有的关键字参数聚合成了一个字典,给了kwargs.
print(kwargs)
func(name='alex',age=84,hobby='唱跳rap篮球')
特点:关键字形式的,一传传一堆,不管你传入多少实参
练习题
# *args,**kwargs 万能参数
def func(*args,**kwargs):
print(args,kwargs)
# func(1,2,4,'fjdksal',age=84,hobby='唱跳rap篮球')
一句话总结:
*args在实参角度: 函数定义时, 将传入的值聚合到一个元组当中,返回的是元组
**kwargs在实参角度,函数定义时, 将传入的值聚合成一个字典,返回的是字典
用法:
l1 = [1,2,3]
dic1 = {'name':'太白','age':18}
def func(a,*args,**kwargs):
print(args) # (1, 2, 3,'太白', 'wusir', '景女神')
print(kwargs)
func(1,l1,dic1,hobbie = '唱歌')
# 输出结果
([1, 2, 3], {'name': '太白', 'age': 18})
{'hobbie': '唱歌'}
# 个人见解,复习看这个就好
a传入的是位置参数1,*args传入的是l1和dic1(如果dic1后面还有位置实参还可以传给*args, **kwarg传入的hobbie = '唱歌'关键字参数)
# 记住一点就好:**args传入位置参数,不管写多少,都聚合到一个元组中,输出或返回. **kwargs传入的是关键字参数,不管有多少,都聚合成一个字典输出或返回
python之函数的传参形参的第三种动态参数*args和**kwargs的更多相关文章
- 跟着太白老师学python 10day 函数的动态参数 *args, **kwargs, 形参的位置顺序
1. *args 接收实参的位置参数, **kwargs接收实参的关键字参数 def func(*args, **kwargs): print(args, kwargs) func(1, 2, 3, ...
- Python全栈工程师(函数的传参)
ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订 ...
- Python之函数(一)定义函数以及传参
定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...
- # Python第十节 传参
Python第十节 传参 一. 变量和变量名 首先说明变量名和变量的一点差异 例如: var = [1, 2, 3] `var = "Google" 调用变量var的时候, 既可以 ...
- python 线程创建和传参(28)
在以前的文章中虽然我们没有介绍过线程这个概念,但是实际上前面所有代码都是线程,只不过是单线程,代码由上而下依次执行或者进入main函数执行,这样的单线程也称为主线程. 有了单线程的话,什么又是多线程? ...
- c# 值类型与引用类型的传参(形参与实参)
形参是指被调用方法中的参数 实参是指传递给方法的参数 (1)值类型传参是按值传递 值类型传参,形参接受到的是实参的一个副本,即形参发生变化,实参不会发生任何变化 (2)引用类型参数按值传递 当参数传递 ...
- C#为什么不能像C/C++一样的支持函数只读传参
C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的 ...
- python字符串格式化--dict传参
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python字符串格式化--dict传参 print "I'm %(name)s. I'm %(a ...
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
C# PDF Page操作——设置页面切换按钮 概述 在以下示例中,将介绍在PDF文档页面设置页面切换按钮的方法.示例中将页面切换按钮的添加分为了两种情况,一种是设置按钮跳转到首页.下页.上页或者 ...
随机推荐
- <!--[if !IE]> 的用法
除IE外都可识别
- AGC001 E - BBQ Hard【dp+组合数学】
首先直接按要求列出式子是\( \sum_{i=1}^{n}\sum_{j=i+1}^{n}C_{a_i+a_j+b_i+b_j}^{a_i+a_j} \) 这样显然过不了,因为ab的数据范围比较小,所 ...
- ZOJ3469 Food Delivery
Food Delivery ZOJ - 3469 题意:外卖送饭给N个顾客,要求他们不满度和最小,没人不满度=等待时间*耐心值 #include<cstring> #include< ...
- 云服务器、虚拟主机和VPS的区别
虚拟主机就是利用网络空间技术,把一台服务器分成许多的"虚拟"的主机,每一台网络空间都具有独立的域名和IP地址,具有完整的Internet服务器功能.网络空间之间完全独立,在外界看来 ...
- crm项目整理概要
一.开发背景 由于公司人员的增多,原来通过excel表格存取方式过于繁琐,而且对于公司人员的调配和绩效考核等不能做到精确处理,所以开发crm系统,开始开发只是针对销售人员和客户,后面陆续加上一些操作, ...
- Git 深度学习填坑之旅一(git安装和配置、基本命令)
前戏 最近不管是工作还是ctf比赛,接触与使用git变得越来越多,git半吊子水平的我已经不能支撑日常工作了.碰巧自己公司项目刚上线,现在能挤出一点时间来挖一下这个坑... 为什么使用Git 1.后悔 ...
- 如何使用WPS从正文开始页码为1,而不是从目录开始?
在插入目录前,在最前页插入一个空白页,在这个空白页里面生成目录,双击正文的页脚,点一下出现的与上一节相同的按钮,关闭页眉页脚的同前节,发现与上一节相同这几个字消失后,把目录中的页码删除,不会在影响正文 ...
- 15.更新和删除数据--SQL
一.更新数据 更新(修改)表中的数据,可以使用UPDA TE语句.有两种使用UPDA TE的方式: 更新表中的特定行: 更新表中的所有行. 警告:不要省略WHERE子句 在使用UPDA TE时一定要细 ...
- 牛客网练习赛34-D-little w and Exchange(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- codeforcesRound378C-dfs+树状数组
分成K个块,每个块内部dfs解决,然后用树状数组统计第i个元素前面有多少怪物已经消失,来计算当前的下标 #include<bits/stdc++.h> #define inf 0x3f3f ...