dsynb

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         老张\'\'\'    

 

 

分类:

技术点:

相关文章: