python基础十,,一、动态参数:*ar


一、动态参数:*args **kwargs

  形态角度:

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

# def func(*args):#     print(args)# func(1,2,3,4,5,7,8,9,1,2,3,4,5,6,7,8)#*args 动态参数,万能参数#args接受的就是实参对应的 所有位置参数,并将其放在元组中。#形参对应顺序:#位置参数,*args,默认参数# def func(a,b,c,d,*args,e=‘男‘):#     print(a)#     print(b)#     print(c)#     print(d)#     print(args)#     print(e)# func(1,2,3,4,5,6,7,e=‘女‘)#**kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。# def func(a,b,c,**kwargs):#     print(kwargs)# func(1,2,r=4,b1=5,c1=6,c=7,)# def func(a,b,c,d,*args,e=‘男‘,**kwargs):#     print(a)#     print(b)#     print(c)#     print(d)#     print(args)#     print(e)#     print(kwargs)# func(1,2,3,4,5,6,7,v=3,m=7,h=9,e=‘女‘)# 最终顺序:位置参数,*args,默认参数,**kwargs# def func1(*args,**kwargs):#     pass# func1()# * 魔法运用# def func(*args):#     print(args) #(1,2,30,1,2,33.。。。。。)# l1 = [1,2,30]# l2 = [1,2,33,21,45,66]# tu = (1,2,3)# func(1,2,30,1,2,33,21,45,66)# func(*‘qweqrfdsaf‘)# func(*{‘name‘:‘alex‘,"age":12})# func(*l1,*l2)# def func(*args):#     print(args)# func(1,2,3,10,20,80)# def func(**kwargs):#     print(kwargs)## dic1 = {‘name1‘:‘alex‘,‘age1‘:46}# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}# func(**dic1,**dic2)# 在函数的调用执行时,#   *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。#  **字典,代表打散,将所有键值对放到一个kwargs字典里。# 在函数定义时, *args,**kwargs代表的是聚合。# def func(*args,**kwargs):#     print(args)#     print(kwargs)## dic1 = {‘name1‘:‘alex‘,‘age1‘:46}# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}# func(*[1,2,3,4],*‘asdfsad‘,**dic1,**dic2)# def func(*args,**kwargs):    #args = (1,2,3,4)    #kwargs = {‘age‘: 56, ‘name‘: ‘老男孩‘}    # print(*args)    # print(**kwargs) #(age = 56 ,name = 老男孩)# dic1 = {‘name1‘:‘alex‘,‘age1‘:46}# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}# # func(*[1,2,3,4],*‘asdfsad‘,**dic1,**dic2)# func(**dic2)

二、名称空间(命名空间),临时名称空间,内置名称空间。

  执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值得关系。

  随之函数的执行完毕,临时空间自动关闭。

  全局名称空间,名称空间,命名空间,全局命名空间。

  局部命名空间,临时名称空间,临时命名空间,局部名称空间。

  内置名称空间,所有的内置函数等存储的空间。

  加载顺序:

    内置名称空间 ---》全局名称空间--》(函数执行时)局部名称空间。

  取值顺序:

    函数执行时:局部名称空间--》全局名称空间--》内置名称空间。

# a = 4# b = 3# c = [1,2,3,4]# c1 = {‘name‘:‘alex‘}## def func1():#     name = ‘老男孩‘#     print(name)# func1()#当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,# 随着函数的执行完毕,临时空间自动关闭。#input(),print(),len 内置函数# name = ‘老男孩‘# def func1():#     name = ‘taibai‘#     print(name)# func1()# def my_len(argv):#     return 666# print(len([12,3,]))a = 2print(a)def func1():    age = 11    print(age)func1()

三、全局作用域,局部作用域。

  全局作用域:全局名称空间,内置名称空间。

  局部作用域:局部名称空间

四、加载顺序与取值顺序,函数的嵌套

# 函数什么时候执行? 函数调用的时候执行。# 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。# print(111)# def func1():#     print(333)## def func2():#     print(444)## def func3():#     print(555)#     func2()## func1()# print(222)# 111 333 222# print(111)# def func1():#     print(333)#     func2()#     print(666)## def func2():#     print(444)## def func3():#     print(555)## func1()# print(222)# 111 333 444 666 222# print(111)# def func1():#     print(333)#     func2()#     print(666)## def func2():#     print(444)#     func3()## def func3():#     print(555)## func1()# print(222)# 111 333 444 555 666 222# a = 2# b = 3# def func1():#     c = 5#     d = 6#     print(globals())  # 全局变量放在一个字典中#     return locals()  # {‘c‘: 5, ‘d‘: 6}# print(func1())# print(globals())  # 全局名称空间:所有变量# print(locals())  # 局部名称空间:所有变量

五、locals(),golbals(),nolocal,golbal

#global# 1,在局部空间内,声明一个全局变量# def func1():#     global name#     name = ‘老男孩‘#     print(name)# func1()# print(name)# 2,在局部空间内改变一个全局变量# a = 4# def func1():#     global a#     a = 5#     # print(name)# func1()# print(a)#nonlocal# 1,不能修改全局变量。# a = 4# def func1():#     nonlocal a#     a = 5#     # print(name)# func1()# print(a)#在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,# 并且引用的哪层,从那层及以下此变量全部发生改变。# a = 4# def func1():#     b = 6#     def func2():#         b = 666#         print(b) #666#     func2()#     print(b) # 6## func1()# b = 4# def func1():#     global b#     b = 6#     def func2():#         nonlocal b#         b = 666#         print(b) ##     func2()#     print(b) ## print(b)# func1()

六、练习题

# 2、写函数,接收n个数字,求这些参数数字的和。(动态传参)‘‘‘def func(*args):    sum = 0    for i in args:        sum += i    return sumprint(func(2,2,3))‘‘‘# 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?# a=10# b=20# def test5(a,b):#         print(a,b)# c = test5(b,a)# print(c)‘‘‘a = 20b = 10c = None‘‘‘# 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?    # a=10    # b=20    # def test5(a,b):    #     a=3    #     b=5    #     print(a,b)    # c = test5(b,a)    # print(c)‘‘‘a = 3b = 5c = None‘‘‘# 1,有函数定义如下:# def calc(a,b,c,d=1,e=2):#     return (a+b)*(c-d)+e# 请分别写出下列标号代码的输出结果,如果出错请写出Error。# print(calc(1,2,3,4,5))# print(calc(1,2))# print(calc(e=4,c=5,a=2,b=3))# print(calc(1,2,3))# print(calc(1,2,3,e=4))# print(calc(1,2,3,d=5,4))‘‘‘2   Error   248   10  Error‘‘‘# 2,下面代码打印的结果分别是_________,________,________.def extendList(val,list=[]):    print(val)    list.append(val)    return listlist1 = extendList(10)list2 = extendList(123,[])list3 = extendList(‘a‘)print(‘list1=%s‘%list1)print(‘list2=%s‘%list2)print(‘list3=%s‘%list3)‘‘‘[10,‘a‘][123][10,‘a‘]‘‘‘

python基础十

评论关闭