目录:
- 函数的定义
- 函数的调用
- 函数文档
- 函数的参数
学习内容:
- 函数的定义
- 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种参数的组合方式有:【必须保证顺序】
- 位置参数、默认参数、可变参数、关键字参数
- 位置参数、默认参数、命名关键字参数、关键字参数