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

更新时间:2019-05-09 17:09:37点击次数:315次
在 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}

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息