函数:
函数的定义:
初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数。自变量x的取值范围叫做这个函数的定义域,编程语言中函数定义:函数是逻辑结构化和过程化的一种编程方法。
函数的三大优点:
1.代码重用
2.保持一致性
3.可扩展性
函数的分类:
(1)、内置函数
(2)、自定义函数
接下来说的都是自定义函数相关:
1、关于如何定义函数:
def:定义函数的关键字
test:函数名
():内可定义形参
"":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1:泛指代码块或程序处理逻辑
return:定义返回值
2、关于函数的参数可分为3种:
a、定义无参函数:这种函数的执行就是普通语句,不需要外部传来的参数,如果定义的是无参函数的话,调用的时候也是无参数
b、定义有参函数:需要外部传来的参数,如果定义的是有参函数的话,调用的时候也需要加参数
c、定义空函数
定义函数示例:
def foo(x,y):#括号内的x和y都属于参数(形参)
#定义一个取x+y的值的函数
print("from foo")
res=x+y
return res #return是返回值
z=foo(1,2)#括号内的x和y都属于参数(实参)
print(z)
运行结果是:
from foo
3
3、关于return返回值(无参函数不需要返回值,有参函数需要返回值)
函数和过程:
过程定义:过程就是简单特殊没有返回值的函数,没有返回值就是过程
a、不写return的话,返回值就是none
b、写return一个值的话,就返回一个值
c、写return多个值的话(这些值可以是任意数据类型),就返回多个值,以元组的方式呈现
示例1:
def foo(x,y):
return 1,2,3,[4,5],{"a":2}
res=foo(1,2)
print(res)
运行结果是:(以元组的方式呈现)
(1, 2, 3, [4, 5], {'a': 2})
示例2:
def foo(x,y):
return 1,2,3
a,b,c=foo(4,5)
print(a)
print(b)
print(c)
运行结果是:
1
2
3
4、关于函数的参数:
a、定义:定义时,括号里写的就是形式参数 >>>>>> 即形参,形参就是变量名
b、调用:函数调用时,括号里写的就是实际参数 >>>>> 即实参,实参就是变量值,实参可以是变量的形式
def foo(x,y):#x和y表示的是形参
print(x)
print(y)
foo(1,2)#1和2表示的是实参
区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
注意:写函数的时候,传值最好不要传可变的数据类型,容易影响全局
示例1:
def foo(x,y):
print(x)
print(y)
a=11
b=22
foo(a,b)
运行结果是:
11
22
示例2:
def foo(x,y):
print(x)
print(y)
x=[1,2,3]
y=22
foo(x,y)
运行结果是:
[1, 2, 3]
22
5、关于形参和实参:
(1)、关于实参的传值需要注意三点:
a、按照位置传值
b、按照关键字传值
c、位置传值和关键字传值两者结合使用(需要注意:1、位置传值必须要在关键字传值的前面;2、对于一个形参,只能赋值一次)
位置传值示例:
def foo(x,y):#x和y表示的是形参
print(x)
print(y)
foo(1,2)#1和2表示的是实参
执行结果:
1
2
关键字传值示例:
def foo(x,y):
print(x)
print(y)
foo(y=1,x=2)
执行结果是:
2
1
位置传值和关键字传值两者结合使用示例:
def foo(x,y):
print(x)
print(y)
foo(1,y=2)
执行结果是:
1
2
(2)、关于形参:
a、形参位置参数(必须传值的参数,少一个都不行)
b、形参的默认参数(调用时不需传值)
经常变换的可用位置参数,常用的可用默认参数
注意:多参数时,默认参数必须放到位置参数的后面
c、*args
d、**kwargs
形参的位置参数示例:
def foo(x,y,z,):
print(x)
print(y)
print(z)
foo(1,2,3)#必须给上面的形参x y z每一个传值
执行结果:
1
2
3
形参的默认参数示例:
def foo(x,y,z=3,):
print(x)
print(y)
print(z)
foo(1,2)#不需要给默认参数z传值
执行结果是:
1
2
3