WEB开发网
开发学院软件开发Python [Python 学习笔记] 8: Function 阅读

[Python 学习笔记] 8: Function

 2009-10-13 00:00:00 来源:WEB开发网   
核心提示:Python 支持类似 Object Pascal 那样的全局函数,也就说我们可以用结构化方式写一些小程序,[Python 学习笔记] 8: Function,>>>deftest(s):prints>>>test("Hello,World!")Hello,Wor

Python 支持类似 Object Pascal 那样的全局函数,也就说我们可以用结构化方式写一些小程序。

>>> def test(s):
  print s
>>> test("Hello, World!")
Hello, World!

Python 函数的参数也采取引用拷贝的方式,也就是说对参数变量赋值,并不会影响外部对象。

>>> def fun(i):
  print id(i)
  i = 10
  
>>> a = 100
>>> id(a)
11229364
>>> fun(a)
11229364
>>> a
100

当然,函数参数和原变量同时指向同一对象,我们是可以改变该对象成员的。

>>> class Data:
  def __init__(self):
    self.i = 0
    
>>> def fun(d):
  d.i = 100
  
>>> d = Data()
>>> d.i
0
>>> fun(d)
>>> d.i
100

我们可以使用 global 关键词来实现类似 C# ref/out 的功能。

>>> def test():
  global i
  i = 100
  
>>> i = 10
>>> test()
>>> i
100

Python 不支持方法重载,但支持缺省参数和一些特殊的调用方式。

>>> def test(a, b = 1, c = 2):
  print "a=%s, b=%s, c=%s" % (a, b, c)
  
>>> test(0, 1, 2)
a=0, b=1, c=2
>>> test(0, 1)
a=0, b=1, c=2
>>> test(0)
a=0, b=1, c=2
>>> test(c=3, a=2)
a=2, b=1, c=3

Python 还支持类似 C# params 那样的可变参数数组。

>>> def fun1(*i):
  print type(i)
  for n in i: print n
  
>>> fun1(1, 2, 3, 4)
<type 'tuple'>
1
2
3
4
>>> def fun2(**d):
  print type(d)
  for (k, v) in d.items():
    print k, "=", v
    
>>> fun2(a=1, b=2, c=3)
<type 'dict'>
a = 1
c = 3
b = 2

Python 提供了一个内置函数 apply() 来简化函数调用。

>>> a = (1, 2, 3)
>>> def fun(a, b, c):
  print a
  print b
  print c
>>> fun(a[0], a[1], a[2])
1
2
3
>>> apply(fun, a)
1
2
3

Lambda 是个非常实用的语法,可以写出更简练的代码。

>>> def do(fun, nums):
  for i in range(len(nums)):
    nums[i] = fun(nums[i])
  print nums
>>> def fun(i):
  return i + 1
>>> do(fun, [1, 2, 3])
[2, 3, 4]
>>> do(lambda i: i + 1, [1, 2, 3])
[2, 3, 4]
>>> 

还有一点比较有意思,由于 Python 函数无需定义返回值,因此我们可以很容易地返回多个结果。这种方式也可以从一定程度上替代 ref/out 的功能。

>>> def fun():
  return 1, 2, 3
>>> a = fun()
>>> type(a)
<type 'tuple'>
>>> a[2]
3

Tags:Python 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接