Python——函数

本文详细介绍了Python中的函数概念、参数类型、使用步骤、返回值作用,以及函数的嵌套调用、修改全局变量、位置参数、关键字参数、默认参数、可变参数、lambda表达式、高阶函数如map、reduce和filter等特性。
摘要由CSDN通过智能技术生成

目录

函数

目的:

函数的参数:  

函数使用步骤:  

1.定义函数:

2.调用函数:

函数返回值的作用:

示例代码

函数说明文档

定义函数说明文档:

示例代码

函数嵌套调用

函数体内部修改全局变量 

位置参数

1.位置参数:

2.关键字参数:

3.缺省参数:

4.不定长参数:

1.包裹位置传递:

2.包裹关键字传递:

拆包和交换变量值

拆包:元组

拆包:字典  

交换变量值

方法一

方法二

引用

递归

lambda表达式

语法:      

注意:

lambda表达式:

默认参数情况:  

可变参数情况 

可变参数情况 

带判断的lambda表达式     

列表数据按字典key的值排序

按name值升序排列: 

                 按name值降序排列: 

按age值升序排列:  

示例代码

高阶函数

Python内置高阶函数:

map(func,lst):   

reduce(func(x,y),lst):  

filter(func,lst):   

示例



函数

函数: 就是将一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求。

目的:

函数在开发过程中,可以更高效的实现代码重用
封装代码,以进行高效的代码重用


函数的参数:  

1.形参:函数定义时书写的参数(非真实数据)
2.实参:函数调用时书写的参数(真实数据)     

函数使用步骤:  

1.定义函数:

 def  函数名(参数):
       代码1
       代码2
       ......


2.调用函数:

函数名(参数)   

注意:

1.不同的需求,参数可有可无                           

2.在python中,函数必须先定义后使用


 

函数返回值的作用:

1.函数执行完毕后return的内容  函数中如果需要使用函数返回值给用户需要使用函数返回值return
2.退出当前函数,当执行了return语句,return下方的所有代码(函数体内部)将不会执行

示例代码

#定义函数
def info_print():
    print('hello word!!!!')

def info_Print(scanner1,scanner2):
    print(scanner1,scanner2)

#调用函数
info_print()

info_Print('有参数函数','且参数不止一个')


# 两数字相加功能
def add(num1,num2):
    print(f'num1+num2 = {num1+num2}')

add(10,20)


# 函数返回值作用实验
def num(num1,num2):
    return num1*num2

result = num(10,10)
print(result)




函数说明文档

help(len)     # help函数作用就是查看函数的说明文档(函数解释说明的信息)


定义函数说明文档:

格式:   

def 函数名(参数):
       """ 说明文档的位置 """
       代码1
       代码2
        ......

查看函数的说明文档: 

 help(函数名)     #会打印出说明文档信息

示例代码


def p(r):
    """
    说明文档:描述函数功能的说明文档测试。
    :param r: 参数1说明
    :return: 返回值说明
    """
    return r

p1 = p('函数说明文档调用测试')
print(p1)

help(p)




函数嵌套调用

函数中嵌套调用了函数

示例代码

'''
def a():
    print('我是a函数')

def b():
    print('我是b函数')
    a()  # 嵌套

b()  # 嵌套调用






函数体内部修改全局变量 

先 global 声明a是全局变量,然后再变量重新赋值


如果函数中需要书写多个返回值时,值之间用逗号隔开     

例如:

def retu():
      return 1,2,3,4,5,6,7,8,9,10

注意:

1.此时的返回值默认为元组类型


2.return后面可以连接列表,元组或字典,以返回多个值


3.仅需要某一个返回值时,只需按照索引下标调用   

   例如:  re = 函数返回值   此时 第一个返回值: re[0]                                    

示例代码


a = 100
def g():
    global a
    a = 300

print(a)
g()
print(a)


def retu():
    return 1,2,3,4,5,6,7,8,9,10
re = retu()
print(re)
print(re[0])
print(re[1])
print(re[2])
print(re[9])




位置参数

1.位置参数:

调用函数时根据函数定义的参数位置来传递参数

注意:传递的参数和定义参数的顺序及个数必须一致
       

2.关键字参数:

函数调用时通过’键=值‘的形式加以指定,可以让函数更加清晰容易使用,同时也清除了参数的顺序需求

注意:函数调用时如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

例如:  def re(name,age,gender):
调用:  re(name='小张',age='12',gender='男')


3.缺省参数:

也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值

注意:所有位置参数必须出现在默认参数前面,包括函数定义和调用

例如: def re(name,age,gender='男')


调用: re('Tom',23)   此时可默认缺省参数,不写
           re('Tom',23,'女')   当为缺省参数传值时,代表修改默认参数值,否则使用这个默认值 


4.不定长参数:

也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
此时可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便

1.包裹位置传递:

def re(*args):       # args只是变量,不固定
      print(args)
re('Tom')
re('Tom',12)     

注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple)
args是元组类型,这就是包裹位置传递        


2.包裹关键字传递:

def re(**kwargs):
      print(kwargs)


re(name='长安',age='23',id='004')     # {'name':'长安','age':23,'id':004}      

注意:返回值是字典类型
  

综上:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程

示例代码

def arg(*args):
    print(args)

arg('长安')
arg('长安',12)
arg('长安',12,87,178)

def kwarg(**args):
    print(args)

kwarg(name='阿茶',age=23,id='004')






拆包和交换变量值


拆包:元组

def re():
      return 100,200
num1,num2 = re()
print(num1)  # 100
print(num2)  # 200


拆包:字典  

对字典进行拆包,取出来的是字典的key值

dict1 = {'name':'Tom','age':32}
a,b = dict1
print(a)  # name
print(b)  # age
print(dict1[a])   # Tom
print(dict1[b])   # 32





交换变量值

方法一

借助第三变量存储数据:  定义中间变量存储其中一个,后一个进行交换

c = 0
c = a   a = b
b = c

方法二

a,b = 1,2

a,b = b,a
或者: a = 1
b = 2
a,b = b,a


 

引用

在python中,值是靠引用来传递的
可以用id()来判断两个变量是否为同一个值的引用,id值可以理解为那块内存的地址标识

--------int型数据为不可变类型
--------list列表型数据为可变类型

示例代码

a = 100
print(a)
print(id(a))  # 140714380292016
a += a          # a = a + a
print(a)
print(id(a))  # 140714380295216



 

递归

递归: 一种编程思想

特点:

1.函数内部自己调用自己
2.必须有出口

示例代码


# 递归实现3以内数字的累加和
def sum(num):
    if num == 1:
        return 1     # 递归的出口
    return num+sum(num-1)

i = sum(4)
print(i)
j = sum(10)
print(j)



 

lambda表达式

应用场景: 如果一个函数有一个返回值,并且只有一句代码,可以使用lambda表达式进行简化

语法:      

lambda  参数列表  :  表达式


注意:

1.lambda表达式的参数可有可无,函数的参数在lambda表达式内完全适用

2.lambda表达式能接收任何数量的参数但只能返回一个表达式的值

例如:

def re():   # 无参
      retrun 200   
          
def re(num1,num2):   # 有参
      retrun 200    


lambda表达式:

re = lambda:200   # 无参
re = lambda num1,num2 : 200  # 有参


默认参数情况:  

re = lambda a,b,c=10:a+b+c


可变参数情况 

*args:  传入lambda表达式后返回值为元组

可变参数情况 

**kwargs:  传入lambda表达式后返回值为字典



带判断的lambda表达式     

re = lambda a,b: a if a > b else b    # 输入两参数判断大小,a>b时返回a,否则返回b


列表数据按字典key的值排序

students = [
                  {'name':'Tom','age':21},  
                  {'name':'Rose','age':22},  
                  {'name':'Jec','age':25},  
                  {'name':'Steve','age':23},
]


按name值升序排列: 

students.sort(key=lambda x:x['name'])
print(students)   

                 
按name值降序排列: 

students.sort(key=lambda x:x['name'],reverse=True)
print(students)


按age值升序排列:  

student.sort(key=lambda x:x['age'])
print(students)                       

示例代码

def re():
    return 1
print(re)
print(re())

r1 = lambda:200
print(r1)            # 直接打印lambda表达式,输出的是lambda表达式的内存地址
print(r1())
r2 = lambda num1,num2:num1+num2
print(r2(10,20))

r3 = lambda *args:len(args)
print(f'r3可变参数的个数:{r3(1,2,3,4,5,6,7,8,9,10)}')

r4 = lambda *args:args
r5 = lambda **kwargs:kwargs
print(r4(10,20,30,40))
print(r5(name='python',chinese='中国',age='23',id='004'))


r6 = lambda a,b: a if a > b else b
print(r6(200,50))


students = [
    {'name': 'Tom', 'age': 21},
    {'name': 'Rose', 'age': 22},
    {'name': 'Jec', 'age': 25},
    {'name': 'Steve', 'age': 23},
]
print(f'正常初始:{students}')

students.sort(key=lambda x:x['name'])
print(f'name升序:{students}')

students.sort(key=lambda x:x['name'],reverse=True)
print(f'name降序:{students}')

students.sort(key=lambda x: x['age'])
print(f'age升序:{students}')







高阶函数

把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现,函数式编程就是指这种高度抽象的编程范式

函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快



Python中

abs()函数可以完成对数字绝对值计算

abs(-10)   # 10

round()函数可以完成对数字的四舍五入计算

round(1.2)   # 1       
round(1.9)   # 2     

 
高阶函数例如: 

def sum_num(a,b,F):
      return F(a)+F(b)
result = sum_num(-1,3,abs)
print(result)                 # 4

步骤解析:

因为传入的第三个参数是函数abs,
即: return abs(-1)+abs(3)


Python内置高阶函数:

lst表示列表序列

map(func,lst):   

将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回

简单理解:就是lst的每个变量都要经过func的处理
 

reduce(func(x,y),lst):  

 其中func必须拥有两个参数,每次func计算的结果继续和序列的下一个元素做累积计算

注意:

1.reduce()传入的参数func必须接受2个参数  

2.使用reduce()方法必须导入functools模块  

filter(func,lst):   

函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,如果要转换为列表,可以使用list()转换


示例


def sum_num(a, b, F):
    return F(a) + F(b)

result = sum_num(-1, 3, abs)
print(f'result={result}')



list1 = [1,2,3,4,5]
def func(i):
    return i**2
result = map(func,list1)
print(result)              # <map object at 0x000002E2FCD03F60>
print(list(result))        # [1, 4, 9, 16, 25]




import functools   # 导入functools模块   使用reduce()方法必须导入functools模块
list1 = [1,2,3,4,5]
# 计算list1中各个数据的累加和
def func(a,b):
    return a+b
result = functools.reduce(func,list1)
print(result)    # 15    即:1+2+3+4+5=15




list1 = [1,2,3,4,5,6,7,8,9,10]
def func(x):
    return x%2 == 0    # 返回偶数
result = filter(func,list1)    # func此时为返回偶数过滤奇数规则
print(result)   # <filter object at 0x000002DC65EA3AC8>
print(list(result))   # [2, 4, 6, 8, 10]

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值