一、函数定义与调用
"""
定义一个函数
"""
def add():
print("this is a test function!")
add()#调用函数add
二、函数的返回值(返回值不会直接输出,只有在需要的时候可以进行输出和相关运算)
"""
定义一个函数add
返回两个数的相加结果
"""
def add():
n=2
m=5
return n+m
count=add()#调用函数add
print(count)#打印返回值7
三、函数的参数
"""
定义一个函数add
返回两个数的相加结果
此函数的形参为m,n
"""
def add(m,n):
return n+m
count=add(2,3)#调用函数add,2、3是函数的实参
print(count)#打印返回值5
1、位置参数
传参的时候按照位置顺序进行参数传递和接受,严格禁止参数换位。
"""
定义一个人员信息函数
"""
def message(name,age,gender):
print("I'm %s,%d years old,a %s"%(name,age,gender))
name="rain"
age=10
gender="boy"
count=message(name,age,gender)#调用函数
"""
执行结果:
I'm rain,10 years old,a boy
"""
2、默认参数
位置参数默认都要进行全部给出的,不能多也不能少,否则报错。有时为了方便我们给出一个默认参数,可以选择不输入,输入就会覆盖掉默认值。注:默认参数一定要放在其他参数后面。
"""
定义一个函数人员信息
"""
def message(name,age,gender="male"):
msg=list([name,age,gender])
print("I'm %s,%d years old,a %s"%(name,age,gender))
name="rain"
age=10
count=message(name,age)#调用函数
"""
执行结果:
I'm rain,10 years old,a male
"""
3、关键字参数
关键字参数可以是无序的,只是需要记住形式参数的名称即可。但是必须放在位置参数后面
"""
定义一个函数人员信息
*args是无限量的位置参数
"""
def message(name,age,gender,color):
print("I'm %s,%d years old,a %s,my favourite color is %s"%(name,age,gender,color))
count=message("rain",18,color="yellow",gender="male")#调用函数
"""
执行结果:
I'm rain,18 years old,a male,my favourite color is yellow
"""
4、不定长参数
*单个星号的形参是不定长位置参数,
"""
定义一个函数人员信息
*args是无限量的位置参数
"""
def message(name,age,*args):
print("I'm %s,%d years old,a %s,my favourite color is %s"%(name,age,*args))
print(args)
count=message("rain",18,"male","yellow")#调用函数
"""
执行结果:
I'm rain,18 years old,a male,my favourite color is yellow
('male', 'yellow')
"""
**双星号是不定长关键字参数
"""
定义一个函数人员信息
"""
def message(name,age,**kwargs):
print(kwargs)
count=message("rain",18,gender="male",love="yellow")#调用函数
"""
执行结果:
{'gender': 'male', 'love': 'yellow'}
"""
四、函数的嵌套
函数内部既可以声明函数,也可以调用函数
#函数的嵌套
def foo():
def inn():
print("我是inn")
inn()
foo()#我是inn
五、函数的作用域
变量调用顺序:local->inclosing->global->built in(局部作用域->嵌套作用域->全局作用域->内建作用域)
局部作用域:就是函数的内部
嵌套作用域:函数嵌套的内部函数的外层函数区
全局作用域:声明在函数外部的变量
内建作用域:系统内部定义的函数(文件都可以调用)
六、匿名函数
lambda表达式,又称匿名函数。用完资源即释放,简单一行命令
name=lambda[list]:表达式
data1=(lambda a,b:a+b)(2,3)
print(data1)#5
#等价于
def add(x,y):
return x+y
七、高阶函数
一个高阶函数至少有以下特点之一:
1、将一个或多个函数作为形参
2、返回一个函数作为其结果
#一切皆数据,函数即变量
def foo():
print("i am func foo")
def bar(foo):
print("i am func bar")
foo()
bar(foo)
"""
执行结果:
i am func bar
i am func foo
"""
def bar1():
print("i am func bar1")
def foo1():
print("i am func foo1")
return foo1
func=bar1()
func()
"""
执行结果:
i am func bar1
i am func foo1
"""
八、常见内置函数
内置函数 | 说明 | 内置函数 | 说明 |
bool | 强制转换成bool值 | bin | 二进制 |
oct | 八进制 | hex | 十六进制 |
sum | 求和 | max | 最大值 |
min | 最小值 | abs | 绝对值 |
pow | divmod | ||
round | chr | 强制转换字符 | |
ord | 强制转换成字节 | list | 列表 |
dict | 字典 | set | 集合 |
len | 长度 | any | |
all | zip | ||
sorted |
九、常见高阶函数
1、高阶函数-filter
# filter函数:对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)。
l = [1, 2, 3, 4]
print(list(filter(lambda x: x % 2 == 0, l)))
"""
执行结果:
[2, 4]
"""
2、高阶函数-map
# map函数:对sequence中的item依次执行function(item),将function(item)执行结果(返回值)组成一个List返回
l = [1, 2, 3, 4]
print(list(map(lambda x: x * x, l)))
"""
执行结果:
[1, 4, 9, 16]
"""
3、高阶函数-reduce
#取前两个数据进行操作,然后得到值和第三个进行操作,依次迭代,最后返回一个最终值
from functools import reduce
l = [1, 2, 3, 4]
print(reduce(lambda x, y: x * y, l))#24