这里有新鲜出炉的精品教程,程序狗速度看过来!
下面小编就为大家带来一篇浅谈 function(函数) 中的动态参数。小编觉得听不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
我们可向函数传递动态参数,*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(函数) 中的动态参数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0529/334845.html