zoukankan      html  css  js  c++  java
  • 函数的默认参数是可变不可变引起的奇怪返回值

    def selfAdd(a):
        a += a
    a_int = 1
    print('a_int1:',a_int)
    selfAdd(a_int)
    print('a_int2:',a_int)
    输出结果:
    a_int1: 1
    a_int2: 1
    
    a_list =[1,2]
    print('a_list1:',a_list)
    selfAdd(a_list)
    print('a_list2;',a_list)
    输出结果:
    a_list1: [1, 2]
    a_list2; [1, 2, 1, 2]
    
    '''Python中函数的参数是引用传递(注意不是值传递). 对于不可变类型(数值int,字符串string,元祖tuple),
    因变量不能更改,所以运算不会影响到
    变量自身;  而对于可变类型(列表,字典)来说,函数体运算可能会更改传入的参数变量'''
    
    def extendList(val, list_test=[]):
        list_test.append(val)
        print('list_test: >>',list_test)
        return list_test
    list_test1 = extendList(10)  # 
    print ("list_test1_first= %s" % list_test1)
    list_test2 = extendList(123,[]) #
    list_test3 = extendList('a') #
    print ("list_test1 = %s" % list_test1)
    print ("list_test2 = %s" % list_test2)
    print ("list_test3 = %s" % list_test3)
    输出:
    list_test: >> [10]
    list_test1_first= [10]
    list_test: >> [123]
    list_test: >> [10, 'a']
    list_test1 = [10, 'a']
    list_test2 = [123]
    list_test3 = [10, 'a']
    

    位置参数和*

    在*参数后面还有参数市,一定要是位置参数指明age=?,并且要放在最后, 如果参数中出现 *users,传递的参数就可以不再是固定个数,传过来的所有参数打包元祖

    def send_alert(msg,*users,age): # (['alex','xxx','iiii'],) --> ('alex','xxx','iiii')
        for u in users:
            print('报警发送给',u)
    send_alert('别他么狼了',*['alex','xxx','iiii'],age=33)
    输出: 报警发送给 alex
    报警发送给 xxx
    报警发送给 iiii
    
    
    send_alert('别他么狼了',['alex','xxx','iiii'],age=34)
    输出:报警发送给 ['alex', 'xxx', 'iiii']
    
    
    send_alert("alex","rain",'eric',age=22)
    输出:报警发送给 rain
    报警发送给 eric
    
    def send_alert(msg,*args):
    
        print('sending msg ....',msg,args)
    
        if args:
            print(args[0])
    
    send_alert('cpu alert...')
    send_alert('cpu alert...','email')
    send_alert('cpu alert...','weixin',1)
    输出:
    sending msg .... cpu alert... ()
    sending msg .... cpu alert... ('email',)
    email
    sending msg .... cpu alert... ('weixin', 1)
    weixin
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    ansible使用sudo
    shell中命令作为变量使用
    for循环使用
    移动多个文件
    获取ip
    if、elif 条件判断
    python安装二进制k8s 1.11.0 一个master、一个node 查看node节点是主机名---apiserver无法启动,后来改了脚本应该可以
    (转)《黑客帝国完全解析》
    关于敏捷开发方法(Agile Software Development)的阅读笔记
    关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
  • 原文地址:https://www.cnblogs.com/heris/p/14044328.html
Copyright © 2011-2022 走看看