浅谈function(函数)中的动态参数
作者:jingxian 发布时间:2023-08-11 10:23:59
我们可向函数传递动态参数,*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,并把结果返回给调用函数的变量。


猜你喜欢
- 利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来
- 一、构造dataframeimport pandas as pdimport numpy as npdf=pd.DataFrame(np.a
- SQL Server中的伪列下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值;对于非
- 把下面SQL里的SELECT单独执行,没有问题,但是用来CREATE VIEW 就报错了.CREATE OR REPLA
- 概述全链接层 (Fully Connected Layer) 会把一个特质空间线性变换到另一个特质空间, 在整个网络中起到分类器的作用.ke
- 百度指数抓取,再用图像识别得到指数前言:土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字:哥那么叼的人怎么会被他吓到,于是乎花了零零碎
- 由于工作需要,所以前一阵子将IE升级到了8.0,结果今天发现出现一个问题,eWebEditor的在线编辑器不好用了,仔细想想,肯定是IE8搞
- 需求在4*4的图片中,比较外围黑色像素点和内圈黑色像素点个数的大小将图片分类如上图图片外围黑色像素点5个大于内圈黑色像素点1个分为0类反之1
- Conv2d的简单使用torch 包 nn 中 Conv2d 的用法与 tensorflow 中类似,但不完全一样。在 torch 中,Co
- index()方法确定字符串str,如果起始索引beg和结束索引end在末尾给出了找到字符串或字符串的一个子串。这个方法与fin
- 前言今天带大家爬取王者荣耀全套皮肤,废话不多说,直接开始~开发工具Python版本: 3.6.4相关模块:requests模块;urllib
- 本文实例讲述了Python数据结构之双向链表的定义与使用方法。分享给大家供大家参考,具体如下:和单链表类似,只不过是增加了一个指向前面一个元
- 一、Python变量在大多数语言中,为一个值起一个名字时,把这种行为称为“给变量赋值”或“把值存储在变量中”。不过,Python与许多其它计
- 本文实例主要实现给出任意字符串,获取字符串中某字符的位置以及出现的总次数。实现该功能代码的时候可以使用函数enumerate来将字符串分离成
- 函数的return 语句只能返回一个值,可以是任何类型。因此,我们可以“返回一个 tuple类型,来间接达到返回多个值 ”。例:
- 与运算 &举例: 3&5 &n
- 这是《python基础教程》中的第二个项目,关于python操作PDF。涉及到的知识点1、urllib的使用2、reportlab库的使用这
- 本文实例讲述了Python注释、分支结构、循环结构、伪“选择结构”用法。分享给大家供大家参考,具体如下:注释:python使用#作为行注释符
- 看了两天 go 语言,是时候练练手了。go 的 routine(例程) 和 chan(通道) 简直是神器,实现多线程(在 go 里准确的来说
- import sysimport urllibfrom urllib import requestimport osfrom bs4 imp