什么是函数?
函数其实就是把许多代码放在一起,包装好之后的一种形式,使得他可以被多次复用。
函数的简单定义:
如下面代码块所示,首先是一个关键字def,然后一个空格,后面跟函数名,一个小括号,冒号,后面就是代码块了,当然记得加一个tab缩进;调用就直接使用函数名就OK了;
def simple():
print("我是函数的简单定义")
simple()
传一个参数:
def simple(str):
print(str)
simple('一个参数的函数')
传多个参数:参数之间以逗号隔开,在调用的时候有两种方式,一种是一一对应,一种是关键字参数对应
1.
def sum(x,y):
print(x+y)
sum(1,2)
2.
def sum(x,y):
print(x+y)
sum(y=5,x=7)
传不定长参数:如下面代码块所示,首先形参前面加一个*,表示传过来的参数应该是元组类型,那么t就是一个元组,在使用函数的时候,直接传多个参数就行;如果是参数前面加两个**,表示传过来的参数类型应该是字典,那么在使用函数的时候传参就应该是字典格式的,
1
def indefinite(*t):
print(t,type(t))
for i in t: i+=i print(i)
indefinite(1,2,3)
2
def indefinnite(**d):
print(d,type(d))
items=d.items()
result=0
for k,v in items:
print(v)
result+=v
print(result)
indefinnite(a=4,b=5)
参数的装包和拆包:
装包:就是把多个值装成元组或者字典,比如传多个参数的时候,就需要把多个元素进行装包,拆包,就是把元组或者字典转成多个值;如下面代码所示,把1.2.3三个值转为了元组,就是装包过程,把agrs元组转成了三个值就是拆包的过程;
def sum(a,b,c):
print(a+b+c)
def tupl(*args):
print(args)
print(*args)
sum(*args)
tupl(1,2,3)
缺省参数:如下代码所示,name就是缺省参数,缺省参数就是调用函数的时候可以写也不可以不写的参数,默认有一个默认值,如下代码默认值就是monther;
def love(name='monther'):
print("i love",name)
love()
值传递和引用传递:值传递的意思是说我只是把内容给了你,就好像我一个箩筐有五个苹果,我只是给了你五个苹果,我的箩筐没给你,箩筐还是我的箩筐;引用传递呢就是我不仅把五个苹果给你了,我还把箩筐都给你了;箩筐都给你的意思就是如果你重新装了6个苹果,那么我从箩筐取出来就会是6个苹果,说白了就是你可以改变我给的那个变量,但是在python里面又分了不可变类型和可变类型,这样的话,你就只能改变可变类型的变量,不可变类型是不能改变的,不可变类型改变之后,已经不是同一个变量了;那么针对python语言,使用的都是引用传递,下面上代码:
1.这段代码验证了当x的值发生改变之后,他的id其实已经改变了,换句话说他已经不是以前的x了
def transfer(x):
print(id(x))
x+=1
print(id(x))
y=5
print(id(y))
transfer(y)
print(id(y))
结果:
1734399856 1734399856 1734399872 1734399856
2.这段代码验证了可变类型是可变改变他本身的值:
def transfer(x):
x.append(5)
y=[1,2]
transfer(y)
print(y)
结果:
[1, 2, 5]
补充:Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。
函数的返回值:
在代码块的最后加一个return语句就可以把值返回出去,需要注意的是,return后续的代码不会执行
def sum(x,y):
s=x+y
d=x-y
return s,d
result=sum(9,5)
print(result)
函数使用描述:其实就是注释,对于函数的注释有他的规范,就是在代码块的第一行,用三个双引号进行注释,注释需要说清的几个点,函数功能,参数类型,参数意义,返回值类型以及意义;获取函数的注释用help函数获取;
def sum(x,y=1):
""" 求两个数的和
:param x: 数值1,数值类型,必填
:param y: 数值2,数值类型,选填,默认值为1
:return: 两个和,数值类型 """
result=x+y
return result
help(sum)