python 动态传参,名称空间和作用域,函数的嵌套,global和nonlocal

一、动态传参

  1.位置参数动态传参

  def func(*args):    *表示动态传参

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

def fun(*args):
    print(args)
    
fun('aaa',3,5,6,'ccc')
#  结果('aaa', 3, 5, 6, 'ccc')

  

 

  2.关键字的动态传参

  def func(**kwargs):    

    函数体(代码块)

  func(n=7,m="aa"):

  **表示接收关键字参数的动态传参,接收到的是字典。

def fun(**kwargs):
    print(kwargs)

fun(name="Tom",age="男",hobby="女")
# 结果 {'name': 'Tom', 'age': '男', 'hobby': '女'}

    顺序:位置参数 => *arg(arguments)(位参动态传参)  => 默认值 => **kwargs(关键字参数)

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

  3.函数的注释

  def  fun():

    """

    注释,说明这个函数用来干什么

    ”“”

  print(fun.__doc__)    #document文档

def fun(a,b):
    """
    注释,说明这个函数用来干什么
    :param a:
    :param b:
    :return:
    """
    return
fun(5,6)
print(fun.__doc__)  #打印出函数的注释

  

  4.接收所有参数

  def fun(*args,**kwargs):    #无敌传参

    pass

  *,** 实参位置是打散

  *,** 形参位置是聚合

def fun(*args,**kwargs):
    print(args,kwargs)
li = ['r','n','g','w','i','n']
dic = {'name': 'uzi','age':'男','hobby':'adc'}
fun(*li,**dic)
# 结果 ('r', 'n', 'g', 'w', 'i', 'n') {'name': 'uzi', 'age': '男', 'hobby': 'adc'}

  

二、命名空间与作用域

  1.全局作用域:

    全局命名空间,内置命名空间

  2.局部作用域:

    局部命名空间

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

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

a = 5  # 全局变量
def fun():
    a = 10      #局部变量
    print(locals())

print(globals())
fun()

  

  函数的嵌套

    函数可以相互嵌套

a = 1
def fun():
    a = 5        
    def inner():
        a = 10   
        print(a)
    inner()
    print(a)
print(a)
fun()

  

  global

    1.可以把全局中的内容引入到函数的内部

    2.在全局创建一个变量

    (在函数内部想改变外部的值时会引用,全局变量本身就不安全,不能随意修改)

a = 1
def fun():
    global a
    a += 5
    print(a)  #  6
print(a)   #  1
fun()
print(a)   #  6

  

  nonlocal 

    寻找外层函数中离他最近的那个变量

a = 1
def fun():
    a = 5
    def inner():
        nonlocal a
        a += 5
        print(a)    # 10
    print(a)        # 5
    inner()
    print(a)        # 10

print(a)            # 1
fun()
print(a)            # 1

  

 

 

  

posted @ 2018-08-09 19:58  AndyStrack  阅读(167)  评论(0编辑  收藏  举报