基础函数(2)

函数的动态参数

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

  在参数位置编写*表示接收任意内容      接收到的是元组tuple

def chi (*food):
    print("我要吃",food)
chi("大米饭","烤肉","鸡腿","牛排")

结果:
我要吃('大米饭','烤肉','鸡腿','牛排')         #多个参数传递进去,接收的是元组

  动态参数必须在位置参数后面,否则会报错

def chi (*food,a,b):
    print("我要吃",food,a,b)
chi("大米饭","红烧肉","黄瓜","茄子")

#这个时候程序会报错,前面传递进去的所有参数都会被*food接收,a和b永远接收不到参数


所以必须改写成下面的代码:

def chi (a,b,*food):
    print("我要吃",a,b,food)
chi("黄瓜","茄子","大米饭","红烧肉")     #前面两个用位置参数接收,后面的参数用动态参数接收

  2,**kwargs  关键字参数动态传参     接收到的是一个字典dict

  如果想接受所有的参数:

def func(*args,**kwargs):
    print(args,kwargs)

func("香烟","瓜子","矿泉水",a="香肠",b="啤酒")      #可以接收所有参数,

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

动态参数的另一种传参方式:

  

def funs(*args):
    print(args)
lst = [1,4,7]
fun(lst[0],lst[1],lst[2])
fun(*lst)           #可以使用*把一个列表按顺序打散
s = "臣妾做不到啊"
fun(*s)             #字符串也可以打散, (可迭代对象)


#在实参的位置上给一个序列,列表,可迭代对象前面加*,表示把这个按顺序打散
#在形参的位置上*,表示把接收到的参数组合成一个元组
#字典也可以打散,需要用两个**   (例如: **kwargs)

函数的注释:

def chi(food,drink):
    """
    这里是函数的注释,先写一下当前这个函数是干什么的
    :param food:  参数food 是什么意思
    :param drink: 参数drink是什么意思
    :return:  返回是什么东西
    """
    print(food,drink)
    return"very good"

二:命名空间

  1:内置名称空间

  2:全局名称空间

  3:局部名称空间

  作用域:作用域就是作用范围,按照生效范围来看分为全局作用域,和局部作用域

  全局作用域:包含全局命名空间和内置命名空间.在整个文件的任何位置都可以使用

  局部作用域:在函数内部可以使用

作用域命名空间:

  1:全局作用域: 全局命名空间+内置命名空间

  2:局部作用域: 局部命名空间

  globals:查看全局作用域内容

  locals:查看局部作用域中的变量和函数信息

a = 10
def func():
    a = 40
    b = 20
        def abc():
            print("哈哈")
    print(a,b)        #这里使用的是局部作用域    
    print(globals)   #打印全局作用域的内容
    print(locals)    #打印局部作用域的内容
func()

三;函数的嵌套

1:只要遇见了()就是函数的调用,没有()就不是函数的调用

2;函数的执行顺序

def outer():
     print("哈哈")
     def inner_1():
         print("呵呵")
         def inner_1_1():
             print("嘻嘻")
         inner_1_1()
         print("吼吼")
     def inner_2():
         print("嘿嘿")
     inner_2()
     inner_1()
 outer()

#输出结果:哈哈=>嘿嘿=>呵呵=>嘻嘻=>吼吼

四;关键字global和nonlocal

  global表示:不在使用局部作用域中的内容了,而改用全局作用域中的变量

  nonlocal表示:在局部作用中,调用父级命名空间中的变量(外层函数中离它最近的变量)

原文地址:https://www.cnblogs.com/wangjun187197/p/9450249.html