
正文
python中的参数、全局变量及局部变量
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.位置参数、关键字参数、默认参数的使用
- 位置参数、关键字参数
def test(x,y,z):
print(x)
print(y)
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,一个参数不可多次赋值
- 默认参数
def test(x,type='sb'):
print(x)
print(type)
test('laowang')
#结果:laowang
# sb
2.参数组
- *列表、元组
def test(x,*args):
print(x)
print(args)
test(1)
#结果:1
# ()
test(1,2,3,4,5)
#结果:1
# (2, 3, 4, 5)
test(1,{'name':'alex'})
#结果:1
# ({'name': 'alex'},)
test(1,['x','y','z'])
#结果:1
# (['x', 'y', 'z'],)
'''*可把参数组遍历出来'''
test(1,*['x','y','z'])
#结果:1
# ('x', 'y', 'z')
test(1,*('x','y','z'))
#结果:1
# ('x', 'y', 'z')
- **字典
def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3)
#结果:1
# {'y': 2, 'z': 3}
test(1,**{'a':4,'w':6})
#结果:1
# {'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关键字:全局变量只限访问,不能修改
name='dsy'
def change_name():
name='太帅了'
change_name()
print(name)
#结果:dsy
********************如果函数的内容有global关键字:全局变量可以被修改
name='dsy'
def change_name():
global name
name='太帅了'
change_name()
print(name)
#结果:太帅了
- 局部变量 (不顶格,有缩进)
name='dsy'
def change_name():
name='太帅了'
print(name)
change_name()
#结果:太帅了
name='dsy'
def change_name():
print(name)
change_name()
#结果:dsy
在一个函数内执行某段程序,优先读取局部变量,如果没有局部变量,再读取全局变量,局部变量无法对全局变量进行覆盖、更改、替换。
*******************************************************************nonlocal *******************************************************************
name = "老段"
def laowang():
name = "老陈"
def laoli():
nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
name = "老李"
laoli()
print(name)
print(name)
laowang()
print(name)
#结果:老段
# 老李
# 老段
总结:在一个函数内打印一个变量,是由这一层向外一层一层的找变量名。
补充:在函数内对全局变量的引用是可以修改的
name = 'laowang'
male = {'age':14}
def test():
def test1():
name = 'laoli'
male['age'] = 99
return test1
res = test()()
print(name) #结果:laowang
print(male) #结果:{'age': 99}
打印顺序例子:
#执行顺序
name='老王' #
def laozhang(): #
name = "老张" #3.1
print(name) #3.2 第一次打印老张
def laoli(): #3.3
name = "老李" #3.4.1
print(name) #3.4.2 第二次打印老李
def laozhao(): #3.4.3
name = '老赵' #3.4.5.1
print(name) #3.4.5.2 第四次打印老赵
print(name) #3.4.4 第三次打印老李
laozhao() #3.4.5
laoli() #3.4
print(name) #3.5 第五次打印老张
laozhang() #
'''结果:老张
老李
老李
老赵
老张'''






