1.编写函数应该注意六点

(1)def 函数名()                //定义函数

(2)def 函数名(参数)          //可以往进传参          

(3)函数应该有返回值,用return来返回,如果不写return,默认返回none

(4)函数名()这是调用,不写括号是引用,调用相当于执行一遍函数

(5)要输出函数的返回值,需要使用print,而不是和交互解释器一样直接调用就会有输出

(6)前向引用,函数不允许在函数未声明之前对其进行引用或调用

2.传递参数应该注意四点

(1)参数有实参和形参两种,实参就是实际使用的具体值,形参就是变量

(2)函数接收几个参数,就往进传几个参数,否则会报错

(3)可以预先传递某一个参数,如果不往进传递新的参数,就使用这个参数,可以理解为默认参数。

(4)sys.argv[0]是脚本名,sys.argv[1]是第一个位置参数,以此类推

脚本:用函数来实现斐波那契数列,用户指定输出几位就输出几位

#!/usr/bin/env python
import sys               //导入sys模块
def fibs(num):             //定义一个函数
    fibs = [0, 1]         //定义一个初始的列表
    for i in range(num - 2):     
       //循环
        fibs.append(fibs[-1] + fibs[-2])   //将最后两项的值相加并追加进列表
    return fibs          //返回fibs

num = int(sys.argv[1])            //将位置参数的字符串型转变为整型
print fibs(num)             //调用函数

3.关键字参数

(1)关键字参数的概念仅仅针对函数的调用

(2)这种理念是让调用者通过函数调用中的参数名字来区分参数

(3)这样规范允许参数缺失或者不按顺序

>>> def get_info(name, age):
...     print "%s is %s years old" % (name, age)
... 
>>> get_info("bob", 20)        //一一对应可以正确传参
bob is 20 years old
>>> get_info(20, "bob")
20 is bob years old
>>> get_info(age=20, name="bob")   //写上关键字就可以不按顺序传参                  
bob is 20 years old
>>> get_info(age=20, "bob")      //有多个关键字,无序传参时,不可以只传一个关键字  
  File "<stdin>", line 1             否则会报错
SyntaxError: non-keyword arg after keyword arg
>>> get_info(20, name="bob")    
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: get_info() got multiple values for keyword argument 'name'
>>> get_info("bob", age=20)             //顺序传参时,可以不写全关键字
bob is 20 years old

4.参数组

(1)python允许程序员执行一个没有显式定义参数的函数

(2)相应的方法是通过一个把元组(非关键字参数)或字典(关键字参数)作为参数组传递给函数

(3)调用的时候加*表示把元组解开了,定义的时候加*号表示有多个值,如案例四

脚本:

案例一:
#!/usr/bin/env python

def func1(*args):            //写一个*,存放的是元组
    print args

func1(10)
func1(10,20)
func1(10,20,"abc")
[root@pythion python]# python fun1.py 
(10,)
(10, 20)
(10, 20, 'abc')
案例二:
#!/usr/bin/env python

def func2(**args):            //写两个*,存放的是字典
    print args

func2()
func2(name="bob")
func2(name="lucy",age=20)
[root@pythion python]# python fun1.py 
{}
{'name': 'bob'}
{'age': 20, 'name': 'lucy'}
案例三:
#!/usr/bin/env python
def func3(name,*args,**kw_args):   //第一个参数,只有一个值,第二个参数有很多值,但是是元
    print name                       组类型的,但三个参数有很多值,字典类型的
    print args
    print kw_args

func3("bob","lucy", 10, 20 ,20, qq="123456", em="linux@11.com")
[root@pythion python]# python fun1.py    
bob
('lucy',10, 20, 20)
{'qq': '123456', 'em': 'linux@11.com'}
案例四:
>>> import operator                 
>>> num = [0, 30]     
>>> operator.add(num) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: op_add expected 2 arguments, got 1
>>> operator.add(*num)             //加*号表示把列表解开传进去
30