函数的进阶(动态传参、名称空间、函数的嵌套)

一、形参的第三种形式:动态参数

动态参数分两种:

1、动态接收位置参数,位置参数就是按照位置进行传参,当参数的数量不定的时候就编写*表示接收任意内容

如def eat(*food)  >>这里的food可接收多个参数

位置参数要在动态参数之前不然位置参数根本接收不到值

默认值参数写在动态参数之前除非动态参数也取不到值否则默认参数也取不到值

所以顺序应该以位置参数、动态参数、默认值参数进行

2、动态接收关键字参数

在python中可以动态的位置参数,但是*这种情况只能接收位置参数无法接收关键字参数。

在python中使用**来接收动态关键字参数

最终顺序(*):位置参数>*args>默认值参数>**kwargs

若想接收所有的参数:

def func(*args,**kwargs):

  print(arg,kwargs)

func("大中华","利群",wr="文瑞")

def fun(*args):

  print(args)

lst = [1,3,4,5]

fun(*lst)    #可以使用*把一个列表内容顺序打散

s = "朕长命百岁"

func(*s)     #字符串也可以打散,(可迭代对象)

如果是一个字典,也可以打散不过需要两个**

*、**在形参作用是聚合,在实参是打散的作用

二、命名空间

 nonlocal调用外层中离他最近的一个非全局变量

9,写函数,接收一个参数(此参数类型必须是可迭代对象),
将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
def fun(lst):
lst1 = []
for i in lst:
lst1.append(str(i))
return '_'.join(lst1)
print(fun([1,'老男孩','武sir']))
posted @ 2018-06-12 20:52  拓荒牛wr  阅读(292)  评论(0编辑  收藏  举报