一、元组传值:
一般情况下函数传递参数是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