定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
1.代码重用
2.保持一致性
3.可扩展性
def 函数名(形参): 函数体 def Sum(): print("ok") Sum()#调用 输出 ok
函数的命名规则与变量的命名规则一致。
(1)、字母、数字以及下划线组成,不能以数字开头
(2)、区分大小写
(3)、不允许使用系统关键字
形参:在函数创建时,函数名括号内的参数
实参:函数在调用时括号内的参数,真实存在,有实际值。
区别:形参不真实存在,虚拟变量,只有在调用时才会加载到内存。实参是一个变量或常量,占用内存单元。实参与形参之间数据单项传递。
def sum(x,y):#形参x,y print(x+y)#输出11 sum(5,6)#调用 常量实参5,6
函数的形参分为必备参数、关键字参数、默认参数、不定长参数四种
def prin_info(name,age): print("name is: %s"%name) print("age is: %d"%age) prin_info("lzy",22)#必备参数,与形参一一对应 #prin_info(22,"lzy")#错误 TypeError: %d format: a number is required, not str%age)
必备参数的实参必须与形参数量一致,顺序一致的传递
def prin_info(name,age): print("name is: %s"%name) print("age is: %d"%age) #prin_info(22,"lzy")#错误 TypeError: %d format: a number is required, not str prin_info(age=22,name="lzy")#通过关键字参数可以解决函数调用时参数的顺序与声明时不一致的问题 输出: name is: lzy age is: 22
关键参数与函数关系紧密,可以通过关键字在调用时指定参数的传递对象。可以很好地解决函数调用时参数的顺序与声明时不一致的问题
def prin_info(name,age,sex=‘man‘): print("name is: %s"%name) print("age is: %d"%age) print("sex is: %s"%sex) prin_info(age=22,name="lzy")#默认参数不需要修改时可以不传递 prin_info(age=22,name="qwe",sex="women")#当有需要更改时也可以进行传递修改 #prin_info(age=22,name="qwe","women")#报错 SyntaxError: positional argument follows keyword argument 原因是位置参数必须在关键字参数前面 输出 name is: lzy age is: 22 sex is: man name is: qwe age is: 22 sex is: women
默认参数在不需要更改时可以选择不进行传递。
不定长参数分为两种首先看第一种;
def sum(*wargs):#通过带*的变量名来接受所有为命名的实参 print(type(wargs))#打印类型:元组 num=0 for i in wargs: num=num+i print(num) sum(1,2,3,4,5)#输出15 sum(1,5,9,3,5,7)#输出30
带一个*的形参将会接收所有为命名的实参,并以元组形式保存。第二种:
def prin_info(**kwargs):#通过带*的变量名来接受所有为命名的实参 print(type(kwargs))#答应类型:字典 for i in kwargs: print("%s is: %s"%(i,kwargs[i])) prin_info(name="lzy",age=22,sex="man",hobby="python") 输出: <class ‘dict‘> name is: lzy age is: 22 sex is: man hobby is: python
带**的形参接收所有命名的实参,并以字典的形式保存。当然两者可以混合使用:
def prin_info(name,*args,**kwargs):#def print_info(name,**kwargs,*args):报错 print(‘Name is:%s‘%name) print(‘args is :‘,args) print(‘kwargs is:‘,kwargs) prin_info(‘lzy‘,18,hobby=‘python‘) #prin_info(hobby=‘python‘,‘lzy‘,22) #报错positional argument follows keyword argument #prin_info(‘lzy‘,hobby=‘python‘,22) #报错positional argument follows keyword argument #输出: Name is:lzy args is : (18,) kwargs is: {‘hobby‘: ‘python‘}
所以,无论是在函数创建时,还是在调用时都有一定的顺序。创建时的顺序:无*->*->**。在调用时,关键参数必须必须参数的后面。不定长参数在调用时可以直接指定为元组,或者是列表。但是形参与实参的类型必须一致。
def prin_info(*args):#def print_info(name,**kwargs,*args):报错 print(args) #prin_info(**{‘name‘:"lzy"})#报错:prin_info()获得一个意外的关键字参数‘name‘ prin_info(*(1,2,4,3))#输出 (1, 2, 4, 3)
函数在运行结束后都会有返回值。当运行结束以后想获得函数的运行结果可以通过return返回函数的值。
def sum(x,y): sum=x+y return sum#用return返回sum的值 a=sum(5,6) print(a)#输出结果为11
注意:return 意味着函数运行结束,在执行return之后的代码都将不会被执行。如果在函数中没有return,系统也会默认返回None。当用return返回多个值时,解释器将会把数据打包成一个元组返回。
原文:https://www.cnblogs.com/Pythonliu/p/10461410.html