浅谈function(函数)中的动态参数


Posted in Python onApril 30, 2017

我们可向函数传递动态参数,*args,**kwargs,首先我们来看*args,示例如下:

1.show(*args)

def show(*args):
print(args,type(args))
#以元组的形式向列表传递参数
show(11,22,33,44,55,66)

首先我们定义了一个函数,函数show(*args)里面的*args可以接收动态参数,这里我们接收一个元组形式的参数,我们可以向show()里面传递很多参数,函数默认把这些参数作为一个元组进行接收。

2.show(**args)

def show(**kwargs):
print(kwargs,type(kwargs))
#以字典的形式向函数传递参数
show(k1=80,k2="alex")

由上面代码可以看出,**kwargs是以字典的形式接收参数的,我们知道,字典是由键-值对组成的,key-value,因而我们必须向里面传入键-值对的参数形式才能够接收,因此我们在里面传入了参数k1=80,k2="alex".这样生成了一个字典,从代码可以看出来。

3.show(k,*args)

def show(k,*args):
print(k,type(k))
print(args,type(args))
show([11,22],33,44,55,88)

运行结果如下:

[11, 22] <class 'list'>

(33, 44, 55, 88) <class 'tuple'>

由上面代码可以看出,我们向函数定义了两个参数,一个是k,一个是*args,我们知道,形参k只能接收一个对象参数,*args可以接收多个参数并且放在一个元组中,下面我们向函数传递了多个参数,看是如何接收的。从运行结果(1)可以看出,形参k接收了参数[11,22];而后面输入的值传递给了*args,并在存放在一个列表中。

4.show(*args,**kwargs)

只要函数有这两个参数那么,可以传递任何形式的实参进来,人当杀人,佛当杀佛,因为可以接收任意形式的参数,但是我们知道,字典必须是由键值对组成,传递的参数要满足key=value的格式,否则会报错。这点一定要记得,Python中默认给字典传递参数的方法就是键-值对。

def show(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))

show(123,"alex",666,alex="sb",nanyang="degnzhou")

运行结果如下:

(123, 'alex', 666) <class 'tuple'>

{'nanyang': 'degnzhou', 'alex': 'sb'} <class 'dict'>

我们可以看到,前面的元素被放到了一个元组tuple中,后面的元素被放到了一个字典dict中,但是我们一定要记得,*args,一定要在**kwargs前面,不然会报错,顺序一定是单个参数,动态元组,动态字典方式。

下面我们来看一个实例:

def show(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))

l = [11,22,33,44]
d = {"n1":88,"alex":"sb"}
#我们想把列表l传递给形参*args,把字典传递给形参**kwargs,看下面方式是否可以
show(l,d) (1)

#如果向实现上面功能,要进行表示,指定把哪个参数传递给形参*args,另一个参数传递给形参××kwargs

show(*l,**d) (2)

上面代码中,我们在(1)处直接调用参数,但是得到的结果不是我们想要的,我们想要把参数以列表或者字典的形式传给对应的形参,那么必须标明是传递给哪个参数的,相当于默认参数一样。否则只会传递给第一个参数*args,把列表和字典都放在同一个元组中。上面代码的运行结果如下:

运行结果:

([11, 22, 33, 44], {'alex': 'sb', 'n1': 88}) <class 'tuple'>
{} <class 'dict'>
(11, 22, 33, 44) <class 'tuple'>
{'alex': 'sb', 'n1': 88} <class 'dict'>

5.字符串中参数的情况

(1)字符串格式化,向字符串中传递列表参数

s1 = "{0} is {1}."
result = s1.format("alex","sb")(1)
l = ["alex","sb"] (2)
res = s1.format(*l)
print(result)
print(res)

上面,我们有两种向字符串传递参数的方法,方法(1)中我们直接按顺序传递参数给s1,在方法(2)中我们指定一个列表,但是使用*args的形式给字符串s1传递参数。列表是有序的。

(2)向字符串中传递字典形式的参数

s1 = "{name} is {acter}."
result = s1.format(name="alex",acter="sb")
d = {"name":"alex","acter":"sb"}
#向列表中传递字典形式的参数
res = s1.format(**d)
print(result)
print(res)

在上面代码中,我们向字符串中传递了一个字典形式的参数,我们知道字典的格式,在传递给字符串的时候要指定我们传递的参数是一个字典,

因而要使用**d格式,告诉Python。

6.lambda表达式

lambda简单表达式就是函数的简单表示形式:

>>> func = lambda a:a+1
>>> ret = func(99)

>>> print(ret)

100

在上面形式中,func是定义一个函数,lambda表示的是我们定义了一个lambad表达式,其中a代表的形参,冒号(:)后面的a+1代表表达式,对

函数进行什么样的处理,然后把结果返回给ret这个变量,调用它的变量。省略了return。

上面形式参数可以有多个,冒号前面是参数,可以多个;冒号后面是函数体。

lambda表达式创建了形参a;函数内容a+1,并把结果返回给调用函数的变量。

以上这篇浅谈function(函数)中的动态参数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python的Django框架中的模版继承
Jul 16 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
答题辅助python代码实现
Jan 16 Python
Python进程间通信Queue实例解析
Jan 25 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
Python 函数list&amp;read&amp;seek详解
Aug 28 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
python实现FTP循环上传文件
Mar 20 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python实现会员信息管理系统(List)
Mar 18 Python
python脚本爬取字体文件的实现方法
Apr 29 #Python
Python在图片中添加文字的两种方法
Apr 29 #Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP调用三种数据库的方法(1)
2006/10/09 PHP
测试php函数的方法
2013/11/13 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
laravel自定义分页效果
2017/07/23 PHP
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python实现决策树分类(2)
2018/08/30 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
python异步Web框架sanic的实现
2020/04/27 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
消防安全责任书范本
2014/04/15 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
公司车辆管理制度
2015/08/04 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
Go遍历struct,map,slice的实现
2021/06/13 Golang
tomcat下部署jenkins的方法
2022/05/06 Servers