函数基础
创建函数
def 语句
- 函数用def语句创建,语法如下:
def function_name(arguments):
"function_documentation_string"
function_body_suite
- 标题行由def关键字,函数的名字,以及参数的集合(如果有的话)组成
- def子句的剩余部分包括了一个虽然可选但是强烈推荐的文档字串,和必需的函数体
前向引用
- 函数不允许在函数未声明之前对其进行引用或者调用
def foo():
print('in foo')
bar()
foo() #报错,因为bar没有定义
----------------------------------------------------
def foo():
print('in foo')
bar()
def bar():
print('in bar’)
foo() #正常执行,虽然bar的定义在foo定义后面
调用函数
函数操作符
- 使用一对圆括号()调用函数,如果没有圆括号,只是对函数的引用
- 任何输入的参数都必须放置在括号中
>>> def foo():
... print('Hello world!')
...
>>> foo()
Hello world!
>>> foo
<function foo at 0x7f18ce311b18>
关键字参数
直接给定一个参数名称为位置参数,给定了key=val形式的参数称作关键字参数
- 关键字参数的概念仅仅针对函数的调用
- 这种理念是让调用者通过函数调用中的参数名字来区分参数
- 这样规范允许参数缺失或者不按顺序
>>> def get_info(name, age):
... print('%s is %s years old.' % (name, age))
>>> get_info('bob', 20) # OK
>>> get_info(20, 'bob') # 语法正确,语义不对
>>> get_info(age=20, 'bob') # Error,关键字参数必须在后
>>> get_info(20, name='bob') # Error,name得到了多个值
>>> get_info('bob', age=20) # OK
>>> get_info(age=20, name='bob') # OK
>>> get_info('bob') # Error,参数不够
>>> get_info('bob', 20, 100) # Error,参数太多了
参数组
参数个数不确定的函数
- python允许程序员执行一个没有显式定义参数的函数
- 相应的方法是通过一个把元组(非关键字参数)或字典(关键字参数)作为参数组传递给函数
# 参数名前加*号,表示用元组接收参数
>>> def func1(*args):
... print(args)
...
>>> func1()
()
>>> func1('hao')
('hao',)
>>> func1('hao', 123)
('hao', 123)
# 参数名前加**号,表示用字典接收参数
>>> def func2</