函数
Posted 酒红色
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数相关的知识,希望对你有一定的参考价值。
函数的参数
形参与实参
def test(a,b): print(a,b) test(1,2)
a,b为形参 1,2为实参 形参只有在被调用时才分配内存,在调用结束时即刻释放所分配的内存,因此形参只有在函数内部有效
参数的几种类型
①位置参数,必须一一对应,缺一不行多一也不行
test(1,2,3)
②关键字参数,无须一一对应,缺一不行多一也不行
test(y=1,x=3,z=4)
③默认参数,可传可不传
def test(a,b,c=1): print(a,b,c) test(1,2)
结果:1 2 1
④参数组
def test(x,*args,**kwargs): print(x) print(args) print(kwargs) test(1,2,3,4,5,a = 1,b = 2) test(1,*[2,3,4],**{‘a‘:1})
结果:1
(2, 3, 4, 5)
{‘a‘: 1, ‘b‘: 2}
1
(2, 3, 4)
{‘a‘: 1}
大原则:位置参数必须在关键字参数的左边,*args就是把多余的位置参数放在一个元组里,**kwargs就是把关键字参数放在一个字典里
全局变量与局部变量(全局变量变量名大写;局部变量变量名小写)
无global关键字的情况:优先读取局部变量,能读取全局变量,但无法对全局变量重新赋值
name = ‘xulan‘ //全局变量 def test(): print(name) test()
结果:xulan
name = ‘xulan‘ def test(): name = ‘aaa‘ //局部变量 print(name) test()
结果:aaa
name = ‘xulan‘ def test(): name = ‘aaa‘ print(name) test() print(name)
结果:aaa
xulan
但是对于可变类型,可以对内部元素进行操作
name = [‘a‘,‘b‘] def test(): name.append(‘c‘) print(name) test() print(name)
结果:[‘a‘, ‘b‘, ‘c‘]
[‘a‘, ‘b‘, ‘c‘]
有global关键字的情况:变量本质上就是全局的那个变量,可读取可赋值
name = [‘a‘,‘b‘] def test(): global name name = 123 print(name) test() print(name)
结果:123
123
函数的嵌套(#为执行顺序)
NAME = ‘ABC‘ #1 def a(): name = ‘a‘ #3 print(name) #4 def b(): name = ‘b‘ #6 print(name) #7 b() #5 print(name) #8 a() #2
结果: a b a
name = ‘ABC‘ def a(): name = ‘a‘ def b(): global name name = ‘b‘ b() print(name) ---- a,这里不是b,b()函数改变的是全局变量,这里还是a()函数的局部变量name = ‘a‘
print(name) ---- ABC
a()
print(name) ---- b
结果:ABC
a
b
nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
name = ‘ABC‘ def a(): name = ‘a‘ def b(): nonlocal name name = ‘b‘ b() print(name) ----b,a()函数中的局部变量被b()函数修改 print(name) ---- ABC a() print(name) ---- ABC,全局变量并未修改
结果:ABC
b
ABC
以上是关于函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式