python变量作用域,函数与传参
一、元组传值:
一般情况下函数传递参数是1对1,这里x,y是2个参数,按道理要传2个参数,如果直接传递元祖,其实是传递一个参数
>>> def show( x, y ):... print x, y
...
>>> a = ( 10, 20 )
>>> show( a, 100 )
(10, 20) 100
而如果要把一个元祖( 有2项 )传给x和y,传递的时候要用*a,如果一个函数要3个参数,就不能传递2项的元祖
>>> def show( x, y ):... print "%s : %s" % ( x, y )
...
>>> a=(10,20)
>>> show(*a)
10 : 20
>>> b=(10,20,30)
>>> show(*b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: show() takes exactly 2 arguments (3 given)
print "%s : %s" % ( x, y )
这个百分号%s 类似c语言的printf,占位符 表示要用一个字符串来解释,后面的% ( x, y ) 就是传值. x传给第一个%s, y传给第二个%s
如果后面不传值,就是打印字符串本身
>>> print "%s : %s" % ( 'hello', 'ghostwu' )hello : ghostwu
>>> print "%s : %s"
%s : %s
二、变量作用域跟javascript一样
函数外面定义的是全局变量,可以在函数里面或者外面访问
函数里面定义的是局部变量,函数调用完毕之后会被释放
>>> myname = 'ghostwu'>>> def show():
... print myname
... x = 10
...
>>> show()
ghostwu
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> myname
'ghostwu'
>>>
global关键字可以把局部变量变成全局变量,这点跟php不一样(php是把全局变量引用到函数内部使用)
>>> def show():... global a
... a = 10
...
>>> show()
>>> a
10
同名的全局变量和局部变量,函数内访问的是局部变量,外面是全局变量
>>> a = 100>>> def show():
... a = 10
... print a
...
>>> a
100
>>> show()
10
>>> a
100
如果,同名的局部变量被global,并且函数被执行,那么函数执行之后 在输出这个变量,就是局部变量中的值
>>> a = 1>>> def show():
... global a
... a = 2
...
>>> a
1
>>> show()
>>> a
2
三、函数的默认参数
>>> def show( name = 'ghostwu', age = 20 ):... print "name: %s" % name
... print "age: %s" % age
...
>>> show()
name: ghostwu
age: 20
>>> show( 'zhangsan', 30 )
name: zhangsan
age: 30
四,如果传递一个元组,他们是按对应的位置传递,不会智能判断变量的顺序
>>> t=(100,'zhangsan')>>> show( *t )
name: 100
age: zhangsan
>>>
你会发现, 100传递给了name, zhangsan传递给了age
如果用字典传递,就会按键值对对应,传参数时用两个**
>>> show()name: ghostwu
age: 20
>>> d={"age":30,"name":"zhangsan"}
>>> show( *d )
name: age
age: name
>>> show( **d )
name: zhangsan
age: 30
>>>
五,接收多余的参数
>>> def show( x, *args ):... print x
... print args
...
>>> show(1)
1
()
>>> show( 1, 2, 3, 4, 10 )
1
(2, 3, 4, 10)
>>>
形参*args可以接收不定参数,es6有类似的特性
六、接收字典类型的不定参数
>>> def show( x, *targs, **dargs ):... print x
... print targs
... print dargs
...
>>> show( 10 )
10
()
{}
>>> show( 10, 20, 30, 40 )
10
(20, 30, 40)
{}
>>> show( 10, 20, 30, a = 100, b=200 )
10
(20, 30)
{'a': 100, 'b': 200}
以上是 python变量作用域,函数与传参 的全部内容, 来源链接: utcz.com/z/387138.html