函数基础
Posted 一只小蚊子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数基础相关的知识,希望对你有一定的参考价值。
什么是函数?
函数是指将一段代码通过函数名封装起来,具备某一功能的工具
函数是逻辑结构化和过程化的一种编程方法
使用函数的好处:
- 代码的组织结构清晰,可读性强
- 减少代码的重复性
- 方便管理,维护简单
函数的分类:
- 内置函数:python解释器定义好的,自带的函数 例如:len() ; max() ; min()
- 自定义函数:内置函数所提供的功能是有限的,我们需要根据自己的要求,定义一些具有特定功能的函数
函数的使用原则:先定义,再调用
函数的定义:只检测语法,不执行代码(语法错误会在函数定义时检测出来;而代码的逻辑错误只有在执行时才会被检测出来)
1.有参函数:需要接收函数调用时传来的参数,才能执行相应的逻辑
def 函数名(形式参数1,形式参数2...):
‘‘‘注释‘‘‘
函数体
return 返回值
函数名(实际参数1,实际参数2...)
2.无参函数:函数调用时,不需要传参,执行相应的逻辑
def 函数名():
‘‘‘注释‘‘‘
函数体
return 返回值
函数名()
3.空函数:写项目时,设计代码的逻辑结构
def 函数名(形式参数1,形式参数2...):
‘‘‘注释‘‘‘
pass
函数的调用:通过函数名找到内存地址,再对函数进行调用
- 语句形式:函数名(实际参数1,实际参数2...)
- 表达式形式:3*len(‘hello’)
- 当做另一个函数的参数:range(len(‘hello’))
函数的返回值:return
调用函数时,遇到return,立即终止函数的执行,并return返回值
函数体内,可以有多个返回值,但只能执行一次(类似于if判断)
- 无return 返回None
- return一个值 返回原值
- return多个值 以元组形式返回多个值
什么时候应该有返回值:
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不应该有返回值:
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
通常无参函数不需要有返回值
函数的参数:(形式参数,实际参数)
形参:在定义函数时,括号内的参数为形参,相当于变量名
实参:在调用函数时,括号内的参数为实参,相当于变量值
在调用阶段,实参才会绑定给形参;调用结束,解除绑定
排序:位置参数,默认参数,*args,命名关键字参数,**kwargs
一。位置参数:按照从左到右的顺序依次定义的参数
位置形参:必须被传值的参数,多一个不行,少一个也不行
位置实参:与形参按照位置一一对应
def foo(x,y):
print(x,y)
foo(1,2)
二:关键字参数:在函数调用阶段,按照key=value的形式定义实参
可以不依赖位置而指名道姓地给形参传值
需要注意的问题(可以与位置实参混用,但是):
1. 位置实参必须在关键字实参的前面
2. 不能为一个形参重传值
def foo(x,y):
print(x,y)
print(foo(1,2,y=20))
三:默认参数:在定义函数阶段,已经为形参赋值了,
意味着在调用阶段可以不传值;也可以传值,但以所传的值为准
注意的问题:
1 默认参数的值,只在定义时赋值一次
2 位置形参应该在默认参数的前面
3 默认参数的值应该是不可变类型
def foo(x,y=11):
print(x,y)
foo(1,y=2)
四。可变长参数
实参可变长度指的是:实参值的个数是不固定
而实参的定义形式无非两种:1、位置实参,2、关键字实参
针对这两种形式的实参个数不固定,相应的,形参也要有两种解决方案
*
**
针对按照位置定义的溢出的那部门实参,形参:*args
*将溢出的位置实参,以元组的形式,赋值给args;如果没有溢出,args=None
def func(x,y,z,*args):
print(x,y,z)
print(args)
func(1,2,3,4,5,6)
func(1,2,3,*[4,5,6])/func(1,2,3,*(4,5,6))/func(*[1,2,3,4,5,6] ===》 func(1,2,3,4,5,6)
实参中出现*,将[]或()打散,变为func(1,2,3,4,5,6)形式
针对按照关键字定义的溢出的那部分实参,形参:**kwargs
**将溢出的关键字实参,以字典的形式,赋值给kwargs;如果没有溢出,kwargs=None
def foo(x,y,**kwargs): # kwargs={‘a‘:1,‘z‘:3,‘b‘:2}
print(x,y)
print(kwargs)
foo(y=2,x=1,z=3,a=1,b=2)
foo(1,2,z=3,a=1,b=2)
foo(y=1,x=2,**{‘a‘:1,‘b‘:2,‘c‘:3}) #foo(x=2,y=1,c=3,b=2,a=1)
foo(**{‘x‘:1,‘a‘:1,‘b‘:2,‘c‘:3}) #foo(x=1,c=3,b=2,a=1)
实参中出现**,将{}打散,变为foo(x=1,c=3,b=2,a=1)形式
五。命名关键字参数(了解):形参中,在*后定义的参数
特性:必须按照关键字实参的形式传值
def foo(x,y,*,a,b):
print(x,y,a,b)
foo(1,2,a=3,b=4)
def foo(x,y,*args,a,b):
print(args)
print(x,y,a,b)
foo(10,22,33,44,a=2,b=3)
def foo(x,y=20,*args,a=1,b):
print(args)
print(x,y,a,b)
foo(10,b=3)
foo(10,22,33,44,a=2,b=3)
以上是关于函数基础的主要内容,如果未能解决你的问题,请参考以下文章