1.函数创建
python2版本中可以用callable()来查看是否为函数,在3.0中要用hasattr (func,_call_)来查看是否为函数
使用def 来定义函数,eg:
>>> def hello(name):
... return 'Hello, ' + name + ' !'
...
>>> print hello('Bruce')
Hello, Bruce !
在函数内可以写文档,通过__doc__方式来访问,eg:
>>> def square(x):
... 'Calculates the square of the number x.'
... return x*x
...
>>> square(5)
25
>>> square.__doc__
'Calculates the square of the number x.'
2.函数参数
>>> def try_to_change(n):
... n = 'Mr.Bruce'
...
>>> name = 'Mr.Entity'
>>> try_to_change(name)
>>> name
'Mr.Entity'
上述代码相当于:
>>> name = 'Mr.Entity'
>>> n=name
>>> n='Mr.Bruce'
>>> name
'Mr.Entity'
字符串、数字和元组时无可变的,不能修改,其他的能修改。
这里的参数有点象C或者C++里面的传值和传址,但灵活很多。
关键字参数,eg:
>>> def hello(name,greeting):
... print '%s,%s!'% (greeting,name)
...
>>> hello('hello','world')
world,hello!
>>> hello('world','hello')
hello,world!
>>> hello(name='world',greeting='hello')
hello,world!
>>> hello(greeting='hello',name='world')
hello,world!
默认值,函数定义时可以给出默认参数,eg:
>>> def hello_default(greeting = 'hello',name = 'world'):
... print '%s,%s!'%(greeting,name)
...
>>> hello_default()
hello,world!
>>> hello_default('hey')
hey,world!
>>> hello_default(name='Bruce')
hello,Bruce!
>>> hello_default('hey','Bruce')
hey,Bruce!
收集参数,eg:
>>>def print_params(*par):
print par
>>>print_params('hello')
('hello',)
>>> print_params(1,2,3,3,5)
(1, 2, 3, 3, 5)
关键字参数的“收集”,eg:
>>> def print_par(x,y,z=10,*pospar,**keypar):
... print x,y,z
... print pospar
... print keypar
...
>>>
>>> print_par(1,2,3,4,5,6,7,foo=2,bar=9,key='a')
1 2 3
(4, 5, 6, 7)
{'foo': 2, 'bar': 9, 'key': 'a'}
>>> print_par(1,2)
1 2 10
()
{}
练习使用函数,eg:
.......
3.作用域
在函数内部可以调用全局变量,如果全局变量和局部变量名称相同则会被局部变量屏蔽
掉,但是可以通过globals()函数来实现全局变量的调用。eg:
>>> def combine(par):
... print par+globals()['par']
...
>>> par = 'ball'
>>> combine('basket')
basketball
全局变量的声明,eg:
>>> x=1
>>> def change_gloabl():
... global x
... x+=1
...
>>> change_gloabl()
>>> x
2
嵌套作用域,没有怎么理解,需要再看看
4.递归 自己调用自己
小结:
1.函数定义
2.参数
3.作用域
4.递归