python学习笔记8-函数

函数

定义函数

  • 使用关键字def
  • 确定函数名称、参数名称、参数个数、编写函数体(实现函数功能的代码)
def func():
	print('python')

函数的参数

  • 形参:函数定义时小括号里的参数,是用来接受参数用的,在函数内部作为变量使用。
  • 实参:函数调用的时候,小括号里的参数,是用来把数据传递到函数内部的。
  • 函数可以没有形参和实参
def sum_2(a, b):  # 形参
    print(a + b)


sum_2(3, 4)  # 实参

函数的返回值

  • 返回值是函数完成工作后,最后给调用者的一个结果
  • 在函数中使用return关键字可以返回结果
  • 调用函数一方,可以使用变量接收函数的返回结果
def sum_2(a, b):  # 形参
    return a + b


result = sum_2(3, 4)  # 实参
print(result)

函数的参数类型

  • 位置参数

    • 要求实参书序必须和形参顺序完全一致,由形参顺序决定实参顺序。

    • def sum_2(a, b):  # 形参
          return a + b
      
      
      result = sum_2(3, 4)  # 实参
      print(result)
      
  • 缺省参数

    • 定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就是缺省参数。

    • def power(x, n=2):
          return x ** n
      
      
      a = power(4)
      b = power(4, 3)
      print(a)#16
      print(b)#64
      
    • a = int('16', 8)
      b = int('16')
      print(a)  # 14 8是指八进制
      print(b)  # 16,不传默认为十进制
      
    • s = infos('mia', 24, '男')
      print(s)  # 我是mia,我24岁,男生
      lily = infos('lily')
      print(lily)  # 我是lily,我24岁,女生
      jack = infos('jack', gender='男')
      print(jack)  # 我是jack,我24岁,男生
      
  • 可变参数

    • 传入的参数个数是可变的,0-任意个都可以。

    • def total(*args):# 可变参数,接收列表
          print(args)  # 元祖 (1, 2, 3, 4, 5, 64, 4)
          res = 0
          for i in args:
              res += i
          return res
      
      
      result = total(1, 2, 3, 4, 5, 64, 4)
      print(result)  # 83
      print(total(4, 5, 6))  # 15
      a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
      print(total(*a))  # 45
      
    • def f(**kwargs):  # 可变参数,接收字典
          for k, v in kwargs.items():
              print(k, v)
      
      
      d = {'name': 'xiaoming', 'age': 18}
      '''
      name xiaoming
      age 18
      '''
      f(**d)
      

变量作用域

  • 局部变量:是在函数内部定义的变量,只能在函数内部使用
  • 全局变量:是在函数外部定义的变量,所有函数内部都可以使用这个变量。
# 全局变量
num1 = 10


def f():
    # 局部变量
    num2 = 20
    print(num2)  # 20
    print(num1)  # 10


f()
print(num1)  # 10
def f():
    # 局部变量
    num2 = 20
    num1 = 20
    print(num2)  # 20
    print(num1)  # 20


f()
print(num1)  # 10
# 全局变量
num1 = 10


def f():
    # 声明在f中使用的num1是全局变量num1
    global num1
    # 局部变量
    num2 = 20
    num1 = 20
    print(num2)  # 20
    print(num1)  # 20


f()
print(num1)  # 20
# 全局变量
num1 = 10  # 不可变数据类型
list1 = [1, 2, 3, 4, 5]  # 可变数据类型


def f():
    # 声明在f中使用的num1是全局变量num1
    global num1
    # 局部变量
    num2 = 20
    num1 = 20
    list1[2] = 8
    print(num2)  # 20
    print(num1)  # 20
    print(list1)  # [1, 2, 8, 4, 5]


f()
print(num1)  # 20
print(list1)  # [1, 2, 8, 4, 5]

匿名函数

  • lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
  • 优点“让代码更加精简,不需要考虑命名的问题
# 常规写法
def f(a, b):
    return a + b


a = f(1, 2)
print(a)

# 匿名函数
fun = lambda c, b: c + b
res = fun(1, 2)
print(res)
a = [1, 2, 3, 4, 5]


def f(x):
    return x ** 2


result = map(f, a)
print(list(result))  # [1, 4, 9, 16, 25]
# 简写
result = map(lambda x: x ** 2, a)
print(list(result))  # [1, 4, 9, 16, 25]

# reduce 累积操作:累加;累乘。。。
from functools import reduce# 导入

reduce1 = reduce(lambda x, y: x + y, a)
print(reduce1)  # 15

# filter 过滤
filter1 = filter(lambda x: x % 2, a)  # 过滤偶数
print(list(filter1))  # [1, 3, 5]

内置函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

递归函数

  • 函数调用自身称为递归调用
  • 一个会调用自身的函数称为递归函数

递归的过程:

  1. 写出临界条件
  2. 找这一次和上一次的关系
  3. 假设当前函数已经能用,调用自身计算上一次结果,在求出本次结果。当参数满足一个条件是,函数不再执行。
# 10阶楼梯,每次上一级或2级,问有多少种走法
'''
3
111
12
21

f(n+1) = f(n) + f(n-1)
f(n) = f(n-1) + f(n-2)
f(0) = 0
f(1) = 1
f(2) = 2
'''


def f(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    elif n == 2:
        return 2
    return f(n - 1) + f(n - 2)


print(f(3))
print(f(4))'''
3
111
12
21

f(n+1) = f(n) + f(n-1)
f(n) = f(n-1) + f(n-2)
f(0) = 0
f(1) = 1
f(2) = 2
'''


def f(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    elif n == 2:
        return 2
    return f(n - 1) + f(n - 2)


print(f(3))
print(f(4))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值