python变量作用域,函数与传参

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

回到顶部