zoukankan      html  css  js  c++  java
  • 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 

     

  • 相关阅读:
    使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示
    ABP .Net Core 日志组件集成使用NLog
    ABP .Net Core Entity Framework迁移使用MySql数据库
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    阿里云 Angular 2 UI框架 NG-ZORRO介绍
    Visual Studio 2019 Window Form 本地打包发布猫腻
    VS Code + NWJS(Node-Webkit)0.14.7 + SQLite3 + Angular6 构建跨平台桌面应用
    ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed
    ABP .Net Core To Json序列化配置
    .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
  • 原文地址:https://www.cnblogs.com/qbdj/p/10855865.html
Copyright © 2011-2022 走看看