跟老齐学Python之变量和参数(2)
特别要关注的是,前一个x输出的是函数内部的变量x;后一个x输出的是函数外面的变量x。两个变量彼此没有互相影响,虽然都是x。从这里看出,两个X各自在各自的领域内起到作用,那么这样的变量称之为局部变量。
有局部,就有对应的全部,在汉语中,全部变量,似乎有歧义,幸亏汉语丰富,于是又取了一个名词:全局变量
x = 2
def funcx():
global x
x = 9
print "this x is in the funcx:-->",x
funcx()
print "--------------------------"
print "this x is out of funcx:-->",x
以上两段代码的不同之处在于,后者在函数内多了一个global x,这句话的意思是在声明x是全局变量,也就是说这个x跟函数外面的那个x同一个,接下来通过x=9将x的引用对象变成了9。所以,就出现了下面的结果。
this x is in the funcx:--> 9
--------------------------
this x is out of funcx:--> 9
好似全局变量能力很强悍,能够统帅函数内外。但是,要注意,这个东西要慎重使用,因为往往容易带来变量的换乱。内外有别,在程序中一定要注意的。
不确定参数的数量
在设计函数的时候,有时候我们能够确认参数的个数,比如一个用来计算圆面积的函数,它所需要的参数就是半径(πr^2),这个函数的参数是确定的。
然而,这个世界不总是这么简单的,也不总是这么确定的,反而不确定性是这个世界常常存在的。如果看官了解量子力学这个好多人听都没有听过的东西,那就理解真正的不确定性了。当然,不用研究量子力学也一样能够体会到,世界充满里了不确定性。不是吗?塞翁失马焉知非福,这不就是不确定性吗?
既然有很多不确定性,那么函数的参数的个数,也当然有不确定性,函数怎么解决这个问题呢?python用这样的方式解决参数个数的不确定性:
def add(x,*arg):
print x #输出参数x的值
result = x
print arg #输出通过*arg方式得到的值
for i in arg:
result +=i
return result
print add(1,2,3,4,5,6,7,8,9) #赋给函数的参数个数不仅仅是2个
运行此代码后,得到如下结果:
1 #这是函数体内的第一个print,参数x得到的值是1
(2, 3, 4, 5, 6, 7, 8, 9) #这是函数内的第二个print,参数arg得到的是一个元组
45 #最后的计算结果
上面这个输出的结果表现相当不界面友好,如果不对照着原函数,根本不知道每行打印的是什么东西。自责呀。
从上面例子可以看出,如果输入的参数过多,其它参数全部通过*arg,以元组的形式传给了参数(变量)arg。请看官注意,我这里用了一个模糊的词语:参数(变量),这样的表述意思是,在传入数据的前,arg在函数头部是参数,当在函数语句中,又用到了它,就是变量。也就是在很多时候,函数中的参数和变量是不用那么太区分较真的,只要知道对象是通过什么渠道、那个东西传到了什么目标即可。
为了能够更明显地看出args(名称可以不一样,但是符号必须要有),可以用下面的一个简单函数来演示:
>>> def foo(*args):
... print args #打印通过这个参数得到的对象
...
>>> #下面演示分别传入不同的值,通过参数*args得到的结果
>>> foo(1,2,3)
(1, 2, 3)
>>> foo("qiwsir","qiwsir.github.io","python")
('qiwsir', 'qiwsir.github.io', 'python')
>>> foo("qiwsir",307,["qiwsir",2],{"name":"qiwsir","lang":"python"})
('qiwsir', 307, ['qiwsir', 2], {'lang': 'python', 'name': 'qiwsir'})
不管是什么,都一股脑地塞进了tuple中。
- 上一篇:跟老齐学Python之总结参数的传递
- 下一篇:跟老齐学Python之重回函数