python函数的可变和不可变参数

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:
a = 1 #把1赋值给a
a = 2 #把2赋值a
这一过程中其实是重新创建新的值为2的对象a,原先指向1的变量a 被废弃了

可变类型:
l = [1,2,3]
l[0] = 99
l这一过程中只是修改而已,l 指向这个列表的变量没有变化

        def changeList(self,mylist):
        mylist.extend([1,2,3])
        print('函数内的list: ',mylist)

    def changeInt(self,a):
        a = 10
        print('函数内的int: ',10)

	if __name__ == '__main__':
    s = Student()
    l = [11,22,33]
    s.changeList(l)
    print('函数外的list:',l)

    a = 100
    s.changeInt(a)
    print('函数外的int: ',a)

 结果:
 函数内的list:  [11, 22, 33, 1, 2, 3]
 函数外的list: [11, 22, 33, 1, 2, 3]
 函数内的int:  10
 函数外的int:  100

  

小结:
从代码可以看出,不可变的参数传入后并函数外并没有改变值,具有不可变性;而列表,传入参数后列表内容发生改变,函数外的列表也一同发生改变,具有可变性。

===========================================================================
以下是调用函数时可使用的正式参数类型:
必需参数
关键字参数
默认参数
不定长参数

必须参数:
调用该函数数必须传参数

    def fun(needValue):
        print(needValue)

	fun(123)

关键字参数:
在调用函数的时候,可以指定关键字,此时可以不需要管函数的参数顺序。

    def fun(needValue):
        print(needValue)
    
    fun(needValue = 123)

默认参数:
如果定义函数的时候,参数是设置为默认的形式,在调用函数的时候,参数可以不需要填写。

    def fun(needValue=123):
        print(needValue)

	fun()

不定长参数:
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
*参数 表示以元组(tuple)的形式导入
第一个参数为可选参数
def functionname([formal_args,] *var_args_tuple ):
“函数_文档字符串”
function_suite
return [expression]

    def fun(str,*args): #传两个参数,第一个是一个值的,第二个是一个元组
        print(str,args)

	fun('kyd','a','b','c')
 结果:
	kyd ('a', 'b', 'c')
 def fun(str,*args): #传两个参数,第一个是一个值的,第二个是一个元组
    print(str,args)
 
 fun('str') #只传第一个参数,第二个参数不传
 结果:
 kyd ()   得到结果是一个空元组
    def fun(*args): #只定义多参数的元祖
        print(args)

	fun(1,2,3)
 结果:
 (1,2,3)	

**args 不定长参数可以以字典的形式,基本语法:
def functionname([formal_args,] **var_args_dict ):
“函数_文档字符串”
function_suite
return [expression]

    def fun(str,**args):
        print(str)
        print((args))

	fun('kyd',a=1,b=2,c=3) #注意调用函数的时候,字典的键值对以=分割
	结果:
	kyd
	{'a': 1, 'b': 2, 'c': 3}

  

原文:https://blog.csdn.net/qq_28779071/article/details/89819807 

 

猜你喜欢

转载自www.cnblogs.com/qbdj/p/10855865.html