05-11-函数的进阶

总结

1 函数的参数

  • 根据实参的提供方式不同,将实参分为位置参数和关键字参数
      1. 位置参数:调用函数的时候让实参和形参在位置上一一对应
      1. 关键字参数:调用函数的时候,以’形参名=值’的形式来确定形参对应的实参
      1. 位置参数和关键字参数混用:位置参数必须在关键字参数前面,同时必须保证每个形参都有且只有一个实参
  1. 参数的默认值

定义函数的时候可以直接在形参后面用 = 给形参赋默认值,
有默认值的参数在调用的时候可以不用传参
如果有的参数有默认值,有的参数没有,有默认值的参数必须放在没有默认值参数的后面

  1. 参数类型说明

    无默认值参数的类型说明 - :类型名
    有默认值的参数,默认值的类型就是参数对应的类型

  2. 不定长参数

    的不定长参数:在某个形参前面加,那么这个形参就是一个不定长参数,它可以接受任意多个实参

    号的参数本质就是一个元组,对应的实参就是元组中的元素
    注意 :带
    号的不定长参数对应的实参必须用位置参数传参

  3. 定长参数在*的不定长参数前,定长和不定长都使用位置参数传参

    定长在*号后面的定长参数必须是用关键字传参
    ) 带 ** 的不定长参数:在某个形参前加**,那么这个形参就是一个不 定长参数,他可以接受任意多个实参
    带 ** 的参数本质就是一个字典,对应的关键字参数就是字典中的键值对
    注意,的不定长参数对应的实参必须使用关键字参数传参,

    ) 定长参数在**的不定长前,定长既可以用位置参数也可以用关键字参数 ) 定长参数不能放在对应的不定长参数后面

    ) 带*的不定长参数,和带的不定长参数可以一起用,带*的必须放在带**的前面

  • 函数的返回值

    • 1 返回值
      返回值的作用就是讲函数内部的数据传递到函数外部
    • 2 怎么确定函数返回值, - 怎么讲函数内部的数据传递到外部
      在函数内部用return关键字来返回返回值(一个函数只有一个返回值)
      什么时候需要返回值,如果函数的功能产生了新的数据,将新的数据返回
    • 3 怎么获取函数返回值
      获取函数调用表达式的值,就是获取函数返回值
      函数调用表达式 - 调用函数的语句
      函数调用表达式的值就是函数返回值,函数返回值能做的事情,函数调用表达式都可以做
    • 4 函数调用过程
      第一步:回到函数定义的位置
      第二步:传参,(用实参给形参赋值,这个时候要爆炸每个参数都有值)
      第三步:执行函数体
      第四步:执行完函数体的时候确定函数返回值
      (看执行函数体的时候有没有遇到return,如果遇到return,return后面的值是什么,函数的返回值就是什么)
      (并且在遇到return的时候函数直接结束,如果没有遇到return,函数的返回值是None)
      第五步:回到函数调用的位置,(这个时候函数调用表达式的值才是函数的返回值.)
  • 变量的作用域 - 已经定义过的变量能使用的范围

    • 根据变量的作用域不同,将变量分为全局变量和局部变量两种
  • 2.全局变量

    没有定义哎函数里面或者类里面的变量就是全局变量
    全局变量的作用域:从定义开始到程序结束的任何位置都可以使用

  • 3 局部变量
    定义在函数里面的变量就是局部变量(形参也是局部变量)
    局部变量的作用域:从定义开始到函数结束

  • 4 函数的调用过程就是压栈的过程

    • 调用函数的时候,系统会自动在栈区间为这个函数传建一个临时栈区间,用来保存在函数中产生的数据(局部变量),
      当函数调用结束,这个临时栈区间会自动释放,(释放之前会将返回值传递到临时栈区间的外部)
  • 5 global

    •   '''
        在函数中修改一个全局变量的值或者在函数中定义一个全局变量
        在函数使用变量前用global进行申明
        语法:
        global 变量名
        变量 = 新值
        使用变量
        '''
      

作业

  1. 编写一个函数,计算一个整数的各位数的平方和
例如: sum1(12) -> 51的平方加上2的平方)    sum1(123) -> 14
def squares(num_1):
    c = 0
    for x in str(num_1):
        c += int(x) ** 2
    return c
  1. 写一个函数,求一个数字列表中绝对值最大的元素

    # 例如:nums = [-23, 100, 89, -56, -234, 123], 最大值是:-234
    
    def abs_num_2(nums):
        abs_num = 0
        list1 = []
        C = ''
        for x in nums:
            list1.append(abs(x))
            if abs(x) > abs_num:
                abs_num = abs(x)
            C = nums[list1.index(abs_num)]
        return C
    
  2. 编写函数实现字符串join方法的功能,将指定序列中的元素通过指定字符串合并成一个新的字符串

    def join_3(str1,str2):
        str1 = str(str1)
        a = ''
        for x in str2:
            a += x + str1
        return a[:-1]
    
  3. 写一个函数实现列表extend的功能,将指定序列中的元素全部添加到指定列表中

    def extend_4(all_4):
        new_all = []
        for x in all_4:
            new_all.append(x)
        return new_all
    
  4. 写一个函数实现简易计算器的功能:输入第一个数字,输入运算符,输入第二个数字,计算结果。

    执行过程1:
    计算器:
    >10
    >+
    >20
    =30
    
    执行过程1:
    计算器:
    >10
    >x
    >20
    =200
    
    ....
    
    def calculator_5(x:float,y:str,z:float):
       if y not in ['+','-','*','/']:
           return
       # a = 0
       if y == '+':
        a = x + z
        return a
       if y == '-':
        a = x - z
        return a
       if y == '*':
        a = x * z
        return a
       if y == '/':
        a = x / z
        return a
    
  5. 已经列表points中保存的是每个点的坐标(坐标是用元组表示的,第一个值是x坐标,第二个值是y坐标)

    points = [
      (10, 20), (0, 100), (20, 30), (-10, 20), (30, -100)
    ]
    

    1)获取列表中y坐标最大的点

    def y_max(points):
        list1 = []
        max_y = []
        for x in points:
            list1.append(abs(x[1]))
        max_num = max(list1)
        for i in points:
            if max_num == abs(i[1]):
                max_y.append(i)
        return max_y
    

    2)获取列表中x坐标最小的点

    def x_min(points):
        list1 = []
        min_x = []
        for x in points:
            list1.append(abs(x[0]))
        min_num = min(list1)
        for i in points:
            if min_num == abs(i[0]):
                min_x.append(i)
        return min_x
    

    3)获取列表中距离原点最远的点

    4)将点按照点到x轴的距离大小从大到小排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值