• python中的参数、全局变量及局部变量


    1.位置参数、关键字参数、默认参数的使用

    • 位置参数、关键字参数
    1 def test(x,y,z):
    2     print(x)
    3     print(y)
    4     print(z)
    test(1,2,3)
    #位置参数,必须一一对应,缺一不行多一也不行
    test(y=2,x=5,z=4)
    #关键字参数,无须一一对应,缺一不行多一也不行
    

    *位置参数必须在关键字参数左边

    # test(1,y=2,3)#报错
    # test(1,3,y=2)#报错
    # test(1,3,z=2,y=4)#报错
    # test(z=2,1,3)#报错
    # test(1,3,z=2)#True,一个参数不可多次赋值
    
    • 默认参数
    1 def test(x,type='sb'):
    2     print(x)
    3     print(type)
    4 test('laowang')
    5 #结果:laowang
    6 #    sb

    2.参数组

    • *列表、元组
     1 def test(x,*args):
     2     print(x)
     3     print(args)
     4 test(1)
     5 #结果:1
     6 #    ()
     7 test(1,2,3,4,5 8 #结果:1
     9 #    (2, 3, 4, 5)
    10 test(1,{'name':'alex'})
    11 #结果:1
    12 #    ({'name': 'alex'},)
    13 test(1,['x','y','z'])
    14 #结果:1
    15 #    (['x', 'y', 'z'],)
    16 '''*可把参数组遍历出来'''
    17 test(1,*['x','y','z'])
    18 #结果:1
    19 #    ('x', 'y', 'z')
    20 test(1,*('x','y','z'))
    21 #结果:1
    22 #    ('x', 'y', 'z')
    •  **字典
    1 def test(x,**kwargs):
    2     print(x)
    3     print(kwargs)
    4 test(1,y=2,z=3)
    5 #结果:1
    6 #    {'y': 2, 'z': 3}
    7 test(1,**{'a':4,'w':6})
    8 #结果:1
    9 #    {'a': 4, 'w': 6}
    def test(x,*args,**kwargs):
        print(x)
        print(args,args[-1])
        print(kwargs,kwargs.get('y'))
    test(1,1,2,1,1,11,1,x=1,y=2,z=3)
    #报错
    

     还是前面说的,参数不可多次被赋值,最前面的位置参数1已经将形参中的x赋值了,后面又有一个位置参数x=1,想要再次将形参x赋值,所以会报错。

    改正如下:

    将位置参数删掉或者换一个不和形参冲突的

    test(1,1,2,1,1,11,1,y=2,z=3)
    #结果:1
    #    (1, 2, 1, 1, 11, 1) 1
    #    {'y': 2, 'z': 3} 2
    

    3.全局变量和局部变量

    通常全局变量变量名大写,局部变量变量名小写

    *******************************************************************global*******************************************************************

    • 全局变量(不在函数内,顶格无缩进)

    ********************如果函数的内容无global关键字:全局变量只限访问,不能修改

    1 name='dsy'
    2 def change_name():
    3     name='太帅了'
    4 change_name()
    5 print(name)
    6 #结果:dsy

    ********************如果函数的内容有global关键字:全局变量可以被修改

    1 name='dsy'
    2 def change_name():
    3     global name
    4     name='太帅了'
    5 change_name()
    6 print(name)
    7 #结果:太帅了
    • 局部变量(不顶格,有缩进)
    1 name='dsy'
    2 def change_name():
    3     name='太帅了'
    4     print(name)
    5 change_name()
    6 #结果:太帅了
    1 name='dsy'
    2 def change_name():
    3     print(name)
    4 change_name()
    5 #结果:dsy

    在一个函数内执行某段程序,优先读取局部变量,如果没有局部变量,再读取全局变量,局部变量无法对全局变量进行覆盖、更改、替换。

    *******************************************************************nonlocal*******************************************************************

     1 name = "老段"
     2 def laowang():
     3     name = "老陈"
     4     def laoli():
     5         nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
     6         name = "老李"
     7     laoli()
     8     print(name)
     9 print(name)
    10 laowang()
    11 print(name)
    12 #结果:老段
    13 #    老李
    14 #    老段

    总结:在一个函数内打印一个变量,是由这一层向外一层一层的找变量名。

    补充:在函数内对全局变量的引用是可以修改的

     1 name = 'laowang'
     2 male = {'age':14}
     3 def test():
     4     def test1():
     5         name = 'laoli'
     6         male['age'] = 99
     7     return test1
     8 res = test()()
     9 print(name)  #结果:laowang
    10 print(male)  #结果:{'age': 99}

    打印顺序例子:

     1                                     #执行顺序
     2 name='老王'                  #1
     3 def laozhang():             #2
     4     name = "老张"           #3.1
     5     print(name)              #3.2  第一次打印老张 
     6     def laoli():             #3.3
     7         name = "老李"       #3.4.1
     8         print(name)         #3.4.2  第二次打印老李
     9         def laozhao():      #3.4.3
    10             name = '老赵'   #3.4.5.1
    11             print(name)     #3.4.5.2 第四次打印老赵
    12         print(name)         #3.4.4  第三次打印老李
    13         laozhao()            #3.4.5
    14     laoli()                 #3.4
    15     print(name)             #3.5  第五次打印老张
    16 laozhang()                  #3
    17 '''结果:老张
    18         老李
    19         老李
    20         老赵
    21         老张'''    

     

  • 相关阅读:
    String 中的秘密
    delphi中一切皆指针
    Servlet容器模型(四)ServletConfig、ServletContext
    用DELPHI的RTTI实现对象的XML持久化
    通过崩溃地址找错误行数之Delphi版
    delphi json(CDS包含了Delta数据包)
    Delphi中JSon SuperObject 使用:数据集与JSON对象互转
    用Delphi实现Windows的鼠标钩子函数
    HDU--1213--How Many Tables--并查集
    用DELPHI的RTTI实现数据集的简单对象化
  • 原文地址:https://www.cnblogs.com/dsynb/p/9101821.html
Copyright © 2020-2023  润新知