函数-参数+作用域

参数:

  定义函数时(参数常见的使用):1.  def  i(num)  2.  def  i(num1,num2 = 自己定义)  3.def  i(*arg,*kwarg)    *args:接收位置参数  **kwargs:接收关键字参数

  调用函数时  参数的传入):位置参数>关键字参数        函数的参数传递的是:内存地址(引用)

    

不定长参数:
    *args:调用函数时使用位置传参,得到元组
    **kwaaargs:调用函数时使用关键字传参,得到字典
*args:
        def funk(*arg):
            print(arg)
        funk(1,2,3)
        funk(*(1,2,3))  #*可以理解为对列表进行拆散
        >>>(1, 2, 3)
           (1, 2, 3)
**kwargs:
          def funk(**kwargs):
            print(kwargs)
          funk(a = 1,b =2)
          funk(**{'a':1,'b':2})
          >>>{'a': 1, 'b': 2}
             {'a': 1, 'b': 2}
def i (*args,**kwargs):
    print(args,kwargs)
i (1,[1,2],*[1,2,3],a = 1,**{"b":2})
>>>(1,[1,2],(1,2,3)){"a":1,"b":2}
            
            
            
            
            

      坑:默认参数为可变类型类型时:   函数的默认值是在函数定义时就创建的一个对象,而不是每次调用函数时重新创建的,      如果默认参数是可变类型,若每次调用时没用传入该参数,那么就会使用同一个在函数定义时创建的那个对象

#如:
def func(data,value=[]):
    value.append(data)
    return value
a = func(1)
b = func(2,[66,77,88])
c = func(2)
print(a,b,c)
>>>
[1, 2] [66, 77, 88, 2] [1, 2]

def func(data,value=[]):
    value.append(data)
    print(value)
func(1)
func(3,[22,33,44])
func(2)
>>>
[1]
[22, 33, 44, 3]
[1, 2]

 

 

 

作用域:

    全局作用域和局部作用域(一个函数为一个作用域)  --> 全局变量,局部变量         规范:全局变量用大写

    定义的函数中变量的查找:自己->父级->父级->....父级->全局    :即函数调用时可读取全局变量,修改全局变量(可变类型,如对列表添加元素)但此处的修改不能是对全局变量重新进行赋值

    改变全局变量关键字:global

    改变父级变量关键字:nonlocal

      

name = "gh"
def i():
    name = "g"
    def e():
        global name #声明这层使用的全局变量name
        name = "guohan"  #全局变量重新赋值
        print(name) #guohan
    e()
    print(name) #g,其在第一层函数下
i()
print(name) #输出全局变量name(i()被调用则全局name被重新赋值

返回值:默认返回None,特殊情况:return 1,2,3,4>>>(1,2,3,4)  返回元组      return (1)>>>1    return (1,)>>>(1,) 元组

posted @ 2025-09-30 18:38  guohan  阅读(6)  评论(0)    收藏  举报