目录:

  • 函数的定义
  • 函数的调用
  • 函数文档
  • 函数的参数

学习内容:

  • 函数的定义
  • python中万物皆对象,python把函数也当作对象,可以从另一个函数中返回出来构建更高阶的函数,比如:参数是函数,返回值是函数
  • 函数以 def 开头,后接 函数名称(参数):
def FunctionName(parameter1,parameter2,...):
    function_suite
    return [expression]
  • 函数的调用 
def printme(str):
    print(str)
printme("我要调用用户自定义函数!")
#我要调用用户自定义函数!
  • 函数文档
def MyFirstFunction(name):
    "函数定义过程中name是形参"
    print("传递进来的{0}是实参,因为他具有具体的参数值".format(name))
MyFirstFunction("丁丁的程序人生")
#传递进来的丁丁的程序人生是实参,因为他具有具体的参数值
print(MyFirstFunction.__doc__)
#函数定义过程中name是形参
help(MyFirstFunction)
#Help on function MyFirstFunction in module __main__:

#MyFirstFunction(name)
    #函数定义过程中name是形参
  • 函数的参数
  • python的参数具有非常灵活多样的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。从简到繁的参数形态为:位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合
  • 位置参数
def FunctionName(arg1):
    "函数——文档字符串"
    function suite
    return [expression]

arg1 - 位置参数,这些参数在调用函数时位置要固定

  • 默认参数
def FunctionName(arg1,arg2=v):
    "函数——文档字符串"
    function suite
    return [expression]

arg2 - 默认参数=默认值,调用函数时,如果默认参数的值没有传入,则被认为是默认值。默认参数一定要放在位置参数后面,不然程序会报错。

def printinfo(name,age=8):
    print("Name:{0},Age:{1}".format(name,age))
printinfo('小明')
#Name:小明,Age:8
printinfo('小明',10)
#Name:小明,Age:10

python允许调用函数时参数位置与声明时不一致,因为python解释器能够用参数名匹配参数值

  • 可变参数
  • 顾名思义,可变参数就是传入的参数个数是可变的,可以是0,1,2到任意个,是不定长的参数
def FunctionName(arg1,arg2=v,*args):
    "函数-文档字符串"
    function suite
    return [expression]
  • *args - 可变参数,可以是从零个到任意个,自动组装成元组。
  • 加了星号(*)的变量名会存放所有未命名的变量参数。
def printinfo(arg1,*args):
    print(arg1)
    for a in args:
        print(a)
printinfo(10,20,30,40)
#10
#20
#30
#40
  • 关键字参数
def FunctionName(arg1,arg2=v,*args,**kw):
    "函数-文档字符串"
    function suite
    return [expression]

**kw - 关键字参数,可以是从零个到任意个,自动组装成字典。

def printinfo(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)


printinfo(70, 60, 50)
# 70
# (60, 50)
# {}
printinfo(70, 60, 50, a=1, b=2)
# 70
# (60, 50)
# {'a': 1, 'b': 2}

★【可变参数】和【关键字参数】的区别:可变参数可以从零个到无数个,它们在函数调用时自动组装成为一个元组;关键字参数可以从零个到无数个,它们在函数内部自动组装为一个字典。

  • 命名关键字参数
def FunctionName(arg1,arg2=v,args,*,nkw,**kwargs):
    "函数-文档字符串"
    function suite
    return [expression]

*,nkw - 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw前面加一个*分隔符;如果用户想要限制关键字参数的名字,就可以使用【命名关键字参数】;需要注意的是,使用命名关键字参数时,一定不要缺少参数名。

def printinfo(arg,*,nkw,**kwargs):
    print(arg)
    print(nkw)
    print(kwargs)

printinfo(10,nkw=20,a=3)
#10
#20
#{'a':3}

如果在调用函数的时候缺少命名关键字参数的参数名,python解释器会默认传入的是位置参数。

printinfo(10,20,a=3)
#TypeError: printinfo() takes 1 positional argument but 2 were given

!命名关键字参数一定不要少了【*】分隔符,另外,命名关键字参数也可以赋予默认值。

  • 参数组合
  • 以上5种参数的组合方式有:【必须保证顺序】
  • 位置参数、默认参数、可变参数、关键字参数
  • 位置参数、默认参数、命名关键字参数、关键字参数