文章目录
5.1 函数入门
5.1.1 理解函数
函数在各种语言中都是必须的内容,这里也不做过多的解释,不会百度
5.1.2 定义函数和调用函数
这里具体介绍一下在Python中函数具体是如何进行定义的。
Python定义函数必须使用def语句,对函数语法格式如下
def my_max(x,y):
z = x if y>x else y
return z
def sy_hi(name):
print("正在执行say_hi()函数")
return name + ",您好"
a= 8
b = 9
c=max(a,b)
print(c)
print(sy_hi('pwc'))
5.1.3 为函数提供文档
可以对每个函数编写帮助文档,用于描述该函数的主要功能,只需要将一段字符串放在函数声明后,函数体前即可,此时程序既可以通过help()函数查看说明文档,也可以通过__doc__属性访问函数的帮助文档
def my_max(x,y):
'''
这是一个比较两个数最大值的函数
my_max(x,y)
比较x,y两个值大的返回
'''
z = x if y>x else y
return z
5.1.4 多个返回值
如果程序需要返回多个值,可以将这些值封装为列表返回,也可以直接返回多个值,如果直接返回多个值,系统会直接将这些返回的值封装成元组。
def sum_and_avg(list):
sum = 0
count =0
for i in list:
#如果i是个数值
if isinstance(i,int) or isinstance(i,float):
sum+=i
count+=1
return sum ,sum/count
my_list = [1,55,2.1,5.5,8,10,'wew']
tp = sum_and_avg(my_list)
print(tp)
sum , avg = sum_and_avg(my_list)
print(sum,avg)
5.1.5 递归函数
递归函数简单来说就是在一个函数体的内部不断的调用它本身,一般在数据结构和算法处理中会多次用到,这里不做过多的解释、
5.2 函数的参数
5.2.1 关键字(keyword)参数
Python函数的参数名不是无意义的,Python允许在调用函数时,通过名字来传入参数值,主要分为以下几类。
- 按照形参位置传入的参数被称为位置参数,如果使用这种模式就必须严格按照定义时候的位置顺序进行参数的输入
- 根据参数名来进行传递,此时无需按照规定的顺序进行,这种方式被称为关键字(keyword),并且在使用关键字参数之后,关键字参数后面的参数也必须使用关键字
def grith(width,heigt):
print("width",width)
print("height",heigt)
return 2*(width+heigt)
print(grith(4,7))
print(grith(width=3,heigt=8))
print(grith(heigt=3,width=1))
print(grith(8,heigt=1))
5.2.2 参数默认值
某些情况下,程序需要在定义函数的时候为一个或者多个形参指定默认值,这样在调用的时候就可以直接省略为该参数传递值,而直接使用默认值就可以了
为形参指定默认值的语法格式如下
形参名 = 默认值
def say_hi(name = 'pwc',message = 'niubni'):
print(name)
print(message)
say_hi()
say_hi('dwj')
say_hi(message='pl')
say_hi(message='666',name = 'pwc +dwj')
5.2.3 参数收集(个数可变的参数)
许多的编程语言允许定义个数可变的参数,这样在调用函数的时候可以传入任意多个参数,Python也不例外,Python允许在形参面前添加一个*号,这样就意味着该参数可以接受多个值,多个值会以元组的形式传入
def test(a,*book):
for i in book:
print(i)
print(book)
print(a)
test('dad',45,'weq','wqe')
此外Python还可以手机关键字参数,此时Python会将关键字参数收集成字典,为了能够让Python收集关键字参数,需要在参数前面加两个星号,
def test(x,y,z=3,*book,**dict):
print(x,y,z)
print(book)
print(dict)
test(1,2,3,'niu','qwqw','qweq',语文= 98,数学=78)
5.2.4 逆向参数收集
所谓的逆向参数手机。就是指在程序已有列表元组和字典等对象的前提下,把他们的元素拆开后,传给函数,作为参数使用
逆向参数手机需要在传入列表、元组之前添加一个星号,在字典参数之前添加两个星号,
def test(name,message):
print(name)
print(message)
my_list = [1,54]
test(*my_list)
my_dict= {'name':'pwc','message':'kuai'}
test(**my_dict)
5.2.5 函数的参数传递机制
在Python中的函数参数传递都是采用的值传递方式,所谓的值传递方式就是将实际的参数值创建一个副本传入函数体当中进行运算,而真实的参数值并没有进行改变。
相当于克隆了另一个个体,用这个个体来进行所有的实验,而本体不受任何影响。
5.2.6 变量作用域
5.3 局部函数
定义在函数内部的函数
5.4 函数的高级内容
5.4.1 使用函数变量
Python的函数也是一种值,所有函数都是function对象,这意味着可以吧函数本身赋值给变量,就像整形,浮点型一样,这样就可以通过使用变量来访问函数
def test(a,b):
print(a)
print(b)
pwc = test
pwc(2,3)
5.4.2 使用函数作为函数形参
有时候定义一个函数的时候,该函数的大部分计算逻辑都能够确定,但是某些处理逻辑暂时无法确定,这意味着某些程序代码需要动态进行修改,如果需要调用函数的时候能够动态传入代码,就可以将函数作为形参,就可以实现上述功能
def map(data,fn):
result = []
#遍历data列表中的每一个元素,并用fn函数对每个元素进行计算,然后将计算的结果作为新元组的元素
for i in data:
result.append(fn(i))
return result
def square(n):
return n*n
def cube(n):
return n*n*n
my_list =[4,8,9]
result = map(my_list,square)
print(result)
result1 = map(my_list,cube)
print(result1)
5.4.3 使用函数作为返回值
原理和上一节其实是一样的
5.5局部函数和lambda表达式
使用lambda表达式能够大大简化一下函数的写法
5.5.1使用lambda表达式来代替局部函数
Python中要求,lambda表示只能是单行表达式
其语法格式如下
lambda [parameter_list]:表达式
有几个要点:、
- 必须带有lambda开头
- 关键字之后,冒号左边是参数列表,可以没有参数,也可以有多个参数,如果有多个参数可以用逗号隔开,冒号右边是该lambda表达式的返回值
实际上lambda表达式本质是匿名的,单行函数体的函数,所以
lambda x,y:x+y
可以改写为
def add(x,y) :return x+y