1.函数基础
概念:
函数是具有某一功能的代码块,针对某一个功能的代码块多次出现,为了提高编程效率,将这个代码块组织为一个模块,这就是函数
语法:
def 函数名(参数):
...(代码块)
# 调用
函数名(参数)
例:
def a():
print("hello")
a()
# 结果为打印hello.需要再次调用时,直接a()即可调用
注: 编写函数时,代码块需要换行缩进
2.函数参数
参数是为了给函数提供数据,给函数实现某项特定的功能所提供的一个值
形参和实参:
- 一.必选参数
形参:只是意义上有的参数,实际并不占有内存地址
实参:实际存在的参数,占有内存地址
例:
def a(b,c):
num=b+c
print(num)
a(10,20)
# 结果为打印30.此处b和c就是形参,为调用时传递进来的实参占位,10和20就是实参.
Python中函数参数是引用传递(注意不是值传递).对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量.
必选参数:
def a(b,c):
num=b+c
print(num)
a()
# 如果程序这样执行会有报错,因为给定了必选参数,却没传递实参
- 二.缺省参数(默认参数)
缺省参数,在调用函数时如果没有传参数,
那么会使用定义函数时给的缺省值.
缺省参数必须在参数列表的最后面,否则会报错
例:
def a(b=10,c=20):
print("{}".format(b*c))
pass
a()
# 结果为打印200
缺省参数同样可以传递实参,只是在没有传递实参的情况下会使用缺省参数
例:
def a(b=10,c=20):
print("{}".format(b*c))
pass
a(20)
# 结果为打印400
- 三.不定长参数
一个函数有时候会处理比当初声明的参数要多,这就是不定长参数,定义函数时不用声明参数名.加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
不定长参数:
例:
def a(*args):
c=0
for b in args:
c+=b
print(c)
a(1,2,3,4,5)
# 结果为15,利用for循环取出所有值后相加,得出累加值.
- 4.关键字可变参数:
有两种方法可以传递
例1: (直接传递)
def a(**kwargs):
print(kwargs)
pass
a(Name="xiaoli",Age=15)
# 结果为打印{'Name': 'xiaoli', 'Age': 15}
例2: (通过赋值的字典传递)
def a(**kwargs):
print(kwargs)
pass
b={"Name":"xiaoli","Age":15}
a(**b)
# 结果为打印{'Name': 'xiaoli', 'Age': 15}.两者结果一致.
两者组合使用
例:
def a(*args,**kwargs):
print(args)
print(kwargs)
pass
a(1,2,3,Name="xiaoli",age=15)
# 结果为分行打印(1, 2, 3)和{'Name': 'xiaoli', 'age': 15}
3.函数返回值
概念:
函数执行完后会返回一个对象,在函数内部若有return就有实际返回的值,无则返回None.
可以返回任意类型,返回值类型取决于return后面的类型.在一个函数体中可以有多个return,但是最后只能返回一个return.如果在一个函数体内执行了return,意味着函数已经执行完成退出了,return之后的代码不会继续执行.
使用方法:
def 函数名(参数):
...(代码块)
return ...
例:
def a(b,c):
d=b+c
print(d)
return 10
print(a(5,15))
# 结果为分行打印20和10.20是d的值,10是函数返回的值.
4.函数嵌套调用
函数可以嵌套调用,即在一个函数内部调用另外一个函数.
内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind)
使用方法:
def 函数名(参数):
...(代码块)
函数名(参数)
例:
def a():
print(1)
def b():
print(2)
a()
b()
# 结果为分行打印2和1