Python基础——05_函数

目录:

第11节 函数基础

目录

  • (1)函数的作用——封装代码,高效的代码重用
  • (2)函数的使用步骤——先定义后调用
  • 🔺(3)函数的参数作用
  • 🔺(4)函数的返回值作用——return 退出当前函数+返回结果给用户
  • (5)函数的说明文档——help( )
  • 🔺(6)函数嵌套
第12节 函数提高(参数、多返回值、拆包…)

目录

  • 🔺(1)变量作用域:局部变量、全局变量、修改全局变量(关键字 global)
  • (2)多函数程序执行流程
  • 🔺(3)函数的返回值(多个)–以元组形式
  • 🔺(4)函数参数–位置参数、关键字参数、缺省(默认)参数、不定长参数(*args、**kwargs)
  • (5)拆包
  • (6)交换变量值
  • (7)引用
第13节 函数加强(递归、lambda表达式)

目录

  • 🔺(1)函数应用:学员管理系统
  • 🔺(2)递归
  • (3)lambda表达式

在这里插入图片描述

学习内容:

#### 第11节 函数

目录

  • (1)函数的作用——封装代码,高效的代码重用
  • (2)函数的使用步骤——先定义后调用
  • 🔺(3)函数的参数作用
  • 🔺(4)函数的返回值作用——return 退出当前函数+返回结果给用户
  • (5)函数的说明文档——help( )
  • 🔺(6)函数嵌套

(1)函数的作用——封装代码,高效的代码重用

(2)函数的使用步骤——先定义后调用

# 定义函数
def 函数名(参数): #参数可有可无;冒号不能丢
    代码1
    代码2
    ......
# 调用函数
函数名(参数)

​ 函数体验:复现ATM取钱功能

(3)函数的参数作用

# 需求:一个函数完成两个数的加法运算
def add_num(a, b):
    c = a + b
    print(f'和为{c}')
add_num(1, 2)

(4)函数的返回值作用——return 退出当前函数+返回结果给用户

def info_buy():
    return '牛奶'
    print("ok") # 遇到return退出当前函数,后面的代码不执行
goods = info_buy()
print(goods)

(5)函数的说明文档——help( )

# help(len) # help函数作用:查看函数的说明文档(函数解释说明的信息)
# 定义函数的说明文档
def 函数名(参数):
    '''说明文档的位置'''
    代码
    ......
# 查看函数的说明文档
help(函数名)

# 示例:
# 定义函数的说明文档-注释回车有奇效
def add_num(a, b):
     '''
    求a和b的和
    :param a:
    :param b:
    :return:
    '''
    c = a + b
    print(f'和为{c}')

# 查看函数的说明文档
# help(add_num(a, b)) # 报错,调用的是函数名,不能是函数
help(add_num)

(6)函数嵌套

# 1、打印一条横线
def print_line():
    print('-'*20)
# 2、打印多条横线
def print_lines(num):
    i = 0
    while i < num:
        print_line()
        i += 1
# 3、打印
print_lines(5)




# 三个数求和
def sum_num(a, b, c):
    return a + b + c
result = sum_num(1, 2, 3)
print(result)

# 三个数求平均值
def average_num(a, b, c):
    result = sum_num(a, b, c)
    return result / 3
d = average_num(1, 2, 3)
print(d)
第12节 函数提高(参数、多返回值、拆包…)

目录

  • 🔺(1)变量作用域:局部变量、全局变量、修改全局变量(关键字 global)
  • (2)多函数程序执行流程
  • 🔺(3)函数的返回值(多个)–以元组形式
  • 🔺(4)函数参数–位置参数、关键字参数、缺省(默认)参数、不定长参数(*args、**kwargs)
  • (5)拆包
  • (6)交换变量值
  • (7)引用

(1)变量作用域:变量生效的范围,分为:局部变量、全局变量

  • 修改全局变量:关键字 global
a = 100
print(a)    # 100
def testA():
    a = 50 # 此处不是对全局变量进行修改,相当于生成了一个新的局部变量
    print(a)
def testB():
    global a # global关键字:声明a为全局变量
    a = 200
    print(a)
    
testA()      # 50
testB()      # 200
print(a)      # 200

(2)多函数程序执行流程

  • 共用全局变量
  • 函数1的返回值(所在变量)作为参数传递到函数2

(3)函数的返回值(多个)

  • return后面可以连接列表、元组、字典,以返回多个值
def return_num():
    return 1
    return 2        # 不打印,因为第一个return已退出函数
def return_num2():
    return 1, 2
print(return_num())
print(return_num2())        # 以元组形式打印,(1, 2)

(4)函数参数:

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

  • 关键字参数——调用时通过“键=值”的形式

    def user_info(name, age, gender):
        print(f'我的名字是{name},我的年龄是{age},我的性别是{gender}')
        
        
    user_info('z', 2, '男')
    '''
    注意:传递和定义参数的<顺序>及<个数>必须一致;个数不一致会报错,顺序不一致会导致无意义
    '''
    user_info('z', gender='男', age=2)
    '''
    注意:如果存在位置参数,位置参数必须要在关键字参数前面
    '''
    
  • 【组包】缺省(默认)参数——用于定义函数,为参数提供默认值,调用函数时可不传递默认参数的值

    def user_info2(name, age, gender='男'):
        print(f'我的名字是{name},我的年龄是{age},我的性别是{gender}')
    
    
    user_info2('z', age=15)
    user_info2('z', age=15, gender='女')     # 修改默认值
    '''
    注意:所有位置参数必须出现在默认参数前(包括函数定义和调用)
    '''
    
  • 不定长(可变)参数——用于不确定调入时传入多少参数个数时,分为:包裹位置传递、包裹关键字传递

    • 包裹位置传递

      def user_info3(*args):
          print(args)     # args接受所有位置参数,返回一个元组
      user_info3('name')           # ('name',)
      user_info3('zzz', 18)       # ('zzz', 18)
      
    • 包裹关键字传递

      def user_info4(**kwargs):
          print(kwargs)           # 收集所有的关键字参数,返回一个字典
      user_info4(name='z', gender='男', age=2)     # {'name': 'z', 'gender': '男', 'age': 2}
      

(5)拆包

  • 元组(拆包)

    def return_num():
        return 100, 200
    result = return_num()
    print(result)         # 打印(100, 200)
    
    num1, num2 = return_num()
    print(num1)             # 100
    print(num2)             # 200
    
  • 字典(拆包)

    dict1 = {'name': 'Z', 'age': 18}
    a, b = dict1
    
    # 对字典进行拆包,取出来的是字典的key
    print(a)        # 打印name
    print(dict1[a])     # 打印Z(字典通过key调用value值)
    

(6)交换变量值

  • 方法一:借助另外的变量

  • 🔺方法二:

    a, b = b, a
    

(7)引用

  • 在python中,值都是靠引用来传递得,可以使用id( )判断两个变量是否为同一个值的引用

  • 可变数据类型

    # 不可变:int型
    A = 1
    B = A
    print(id(A))
    print(id(B))
    # A与B的id值相同
    A = 2
    print(A, B)     # 2 1
    
  • 不可变数据类型

    aa = [100, 200]
    bb = aa
    print(id(aa))
    print(id(bb))       # id值相同
    aa.append(300)
    print(aa, bb)       # [100, 200, 300] [100, 200, 300]
    print(id(aa),id(bb))        # # id值相同
    
  • 引用当作实参

    '''
    需求:引用是否可以当作实参
    思路:
    1、定义函数--有形参
        1.1、打印参数值
        1.2、打印形参id
        1.3、改变形参的数据,打印值与id,看id是否改变
    2、调用函数--把可变、不可变两种类型依次带入
    '''
    def text(a):
        print(a)
        print(id(a))
        a += a
        print(a)
        print(id(a))
    b = 1
    text(b)
    '''
    结果:
    1
    140729310372688
    2
    140729310372720
    '''
    c = [10, 20]
    text(c)
    '''
    140729310372720
    [10, 20]
    1665897095816
    [10, 20, 10, 20]
    1665897095816
    '''
    
  • 可变、不可变类型——看数据能否直接修改

第13节 函数加强(递归、lambda表达式)

目录

  • 🔺(1)函数应用:学员管理系统
  • 🔺(2)递归
  • (3)lambda表达式

(1)函数应用:学员管理系统
【代码统一放到下篇文章,请移步获取】
(2)递归–一种编程思想

  • 特点:1、函数内部自己调用自己;2、必须有出口

  • '''
    需求:3以内数字累加和
    分析:
    6=3+2以内数字累加和
    2以内数字累加和=2+1以内数字累加和
    1以内数字累加和=1      #出口
    '''
    def num(n):
        # 出口
        if n == 1:
            return 1
        else:
            return n + num(n-1)
    result = num(3)
    print(result)
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBP0pxtr-1661155312535)(python.assets/image-20220822114739233.png)]

(3)lambda表达式(也叫匿名函数)

  1. 作用:简化代码

    1. 【内存执行函数所占用的空间要大于执行lambda的内存空间】
  2. 语法:

    lambda 参数列表 : 表达式
    # lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
    # lambda表达式能接收任何数量的参数,但只能返回一个表达式的值
    
  3. 体验:

    #需求:计算a+b
    # 函数实现
    def add_num(a, b):
        return a + b
    print(add_num(1, 2))
    # lambda表达式实现
    c = lambda a, b: a + b
    print(c(1, 2))
    
  4. lambda的参数形式

    1. 无参数

      pn1 = lambda: 100
      print(pn1())    # 100
      
    2. 一个参数

      pn2 = lambda aa: aa
      print(pn2('Hello')) # Hello
      
    3. 默认参数

      pn3 = lambda a, b, c=100: a + b + c
      print(pn3(1, 2))    # 103
      
    4. 可变参数*args

      pn4 = lambda *args: args
      print(pn4(1, 2, 4)) # 接收不定长参数,打印:(1, 2, 4)
      
    5. 可变参数**kwargs

      pn5 = lambda **kwargs: kwargs
      print(pn5(name = 'zz', age = 11)) # 接收不定长参数,打印:{'name': 'zz', 'age': 11}
      
    6. 应用

      1. 带判断的lambda

        fn1 = lambda a, b: a if a > b else b
        print(fn1(100, 50))
        
      2. 列表数据按字典key的值排序

        students = [{'name': 'z', 'age': 11},
        {'name': 'x', 'age': 1},
        {'name': 'y', 'age': 111}
        ]
        # 按name值升序排序
        students.sort(key=lambda x: x['name'])
        print(students)
        # 按name值降序排序
        students.sort(key=lambda x: x['name'], reverse=True)
        print(students)
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值