函数(二)

1.函数的动态参数:

  1.*args   位置参数动态传参

    

1 def fun(a,b,c,d,e):
2     print(a,b,c,d,e)
3 fun(1,2,3,4,5)

结果:1 2 3 4 5

顺序:位置参数=>*args=>默认值参数

*在这里表示接收位置参数的动态传参,接收到的是元组

1 def fun(a,*b,c=5): #参数名是b,*表示动态传参
2     print(a)
3     print(b)
4     print(c)
5 fun(1,2,3,4)

结果为:1

     2 3 4

     5

将第一个值赋值给a,后面的值都给b

  2.**kwargs  关键字参数动态传参

    

1 def fun(a,**kwargs):
2     print(a)
3     print(args)
4 fun(1,b=2,c=3)

结果为:

    1

    {'b':1,'c':2}

**在这里表示的是接收关键字的动态传参,接收到的是字典

顺序:位置参数,*args,默认值参数,**kwargs


以上参数可以随意搭配使用

1  def fun(a, *args, c="哈哈",  **kwargs):
2      print(a, args, c, kwargs)
3  fun(1, 2, 3, 4,5, 6)

结果为:

    1,(2,3,4,5,6),哈哈,{}

单行注释#

多行注释'''  '''

1 def fun(a,b):
2     """
3     #这个函数是用来计算a和b的和
4     :param a:#第一个数据
5     :param b:#第二个数据
6     :return:#返回的是两个数的和
7     """
8     return a+b
9 fun(1,2)

接收所有参数

def fun(*args,**kwargs):

  print(args,kwargs)

fun(1,2,3,a=4,b=5)

*在形参位置:聚合(位置参数)

1 def fun(*lst):
2     print(lst)
3 
4 lst = [1,2,3,4,5]
5 fun(lst)

结果为:([1,2,3,4,5])

*在实参位置:打散

1 def fun(*lst):
2     print(lst)
3 
4 lst = [1,2,3,4,5]
5 fun(*lst)#把list,tuple,set,str进行迭代打散

结果为:(1,2,3,4,5)

**在形参位置(聚合成关键字参数)

 

1 def fun(**kwargs):
2     print(kwargs)
3 dic = {"name":"abc","age":18}
4 fun(**dic)#**在实参位置打散成关键字参数

结果为:

{"name":"abc","age":18}

2.命名空间

  1.内置名称空间

  2.全局名称空间

  3.局部名称空间

1 a = 10#全局名称空间    
2 def fun():#fn也在全局名称空间
3     b = 20#局部名称空间
4     print(a)
5 fun()

globals()可以查看全局作用域中的内容

locals()可以查看当前作用域中的内容

3.global和nonlocal

global:

1 a = 10#全局变量,本身不安全,不能随意修改
2 def fun():
3     global a#  1.可以把全局中的内容引入到函数内部,2.在全局创建一个变量
4     a = 20
5     a += 10
6     print(a)
7 fun()

nonlocal:

1 a = 10
2 def outer():
3     def inner():  #在inner中改变a的值
4         nonlocal a  #寻找外层函数中离他最近的那个变量
5             a = 20
6     inner()
7 outer()

函数可以互相嵌套

原文地址:https://www.cnblogs.com/s593941/p/9451769.html