Python笔记4:函数

34.函数的创建和调用
  • 函数的创建

    def 函数名 ([输入参数]):
        函数体
        [reruen xxx]
    
    def calc(a, b):
        c = a + b
        return c
    
  • 函数的调用

    函数名([实际参数])

    result = calc(10, 20)
    print(result)
    
  • 函数调用的参数传递

    • 位置实参

      • 根据形参对应的位置进行实参传递
        在这里插入图片描述
    • 关键字实参

      • 根据形参名称进行实参传递
        在这里插入图片描述
35.函数调用的参数传递内存

在函数调用过程中,进行参数的传递,如果是不可变对象,在函数体的修改不会影响实参的值,arg1的修改为100,不会影响n1的值。如果是可变的对象,在函数体的修改会影响到实参的值,arg2.append(10),会影响到n2的值。

def fun(arg1, arg2):
    print('arg1=',arg1)
    print('arg2=',arg2)
    arg1 = 100
    arg2.append(10)
    print('arg1=',arg1)
    print('arg2=',arg2)
n1 = 11
n2 = [22, 33, 44]
print(n1)
print(n2)
fun(n1, n2)
print(n1)
print(n2)

在这里插入图片描述

36.函数返回值
  • 函数返回多个值时,结果为元组

    def fun(num):
        odd=[] # 存奇数
        even=[] # 存偶数
        for i in num:
            if i%2:
                odd.append(i)
            else:
                even.append(i)
        return odd,even
    print(fun([10,20,30,33,40,45,50,55]))
    
  • 函数返回值

    • 如果函数没有返回值(函数执行完毕后,不需要给调用处提供数据)return可以省略不写

    • 函数的返回值,如果是1个,直接返回类型

    • 函数的返回值,如果是多个,返回的结果是元组

      def fun1():
          print('hello, world')
      
      fun1()
      
      def fun2():
          print('hello, world')
      
      res = fun2()
      print(res)
      
      def fun3():
          return 'hello','world'
      print(fun3())
      
37.函数的参数定义
  • 函数定义默认值参数

    • 函数定义时,给形参设置默认值,只有与默认值不符时才需要传递实参。
      在这里插入图片描述
  • 个数可变的位置参数(个数可变的位置参数只能是1个)

    • 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数。

    • 使用*定义个数可变的位置形参。

    • 结果为一个元组。
      在这里插入图片描述

  • 个数可变的关键字形参(个数可变的关键字参数只能是1个)

    • 定义函数时,无法事先确定传递的关键字实参个数时,使用可变的关键字形参。

    • 使用**定义个数可变的关键字形参

    • 结果为一个字典
      在这里插入图片描述

  • 在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求,个数可变的位置形参放在个数可变的关键字形参之前

38.函数的参数总结
def fun(a, b, c):
    print('a=',a)
    print('b=',b)
    print('c=',c)

#函数调用
fun(10, 20, 30) # 函数调用时的参数传递,称为位置传参
lst = [11, 22, 33]
fun(*lst) # 在函数调用时,将列表中的每个元素都转换为位置实参传入
fun(a=100, c=300, b=200) # 函数的调用,关键字传参
dic={'a':111, 'b':222, 'c':333}
fun(**dic) #在函数调用时,将参数的键值对都转换为关键字传参

# 需求 c, d只能采用关键字传递
def fun4(a, b, *,c, d): # 在*之后的参数,在函数调用时,只能采用关键字参数
    print('a=',a)
    print('b=',b)
    print('c=',c)
    print('d=',d)
fun4(a=10, b=20, c=30, d=40)
fun4(10, 20, c=30, d=40)

在这里插入图片描述

39.变量的作用域
  • 变量的作用域
  • 程序代码能访问该变量的区域
  • 根据变量的有效范围可分为
    • 局部变量
      • 在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会称为全局变量。
    • 全局变量
      • 在函数体外定义的变量,可作用于函数内外。
40.递归函数
  • 什么时递归函数

    • 如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数。
  • 递归的组成部分

    • 调用递归与递归终止条件
  • 递归的调用过程

    • 每递归调用一次函数,都会在栈内存分配一个栈帧。
    • 每执行完一次函数,都会释放相应的空间。
  • 递归的优缺点

    • 缺点:占用内存多,效率低。
    • 优点:思路和代码简单。
    def fac(n):
        if n == 1:
            return 1
        else:
            res = n*fac(n-1)
            return res
    print(fac(6))
    

在这里插入图片描述

# 斐波那契数列
def fib(n):
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
print(fib(6))
# 输出这个数列的前6位上的数字
for i in range(1,7):
    print(fib(i))
41.函数知识点总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值