Python之函数

函数

1. 函数

目的:函数在开发过程中,可以更高效的实现代码重用

1.1 函数定义

语法:

def 函数名(参数):
		"""函数说明文档"""  #查看说明文档, help(函数名)
		代码......
  • 函数的参数:函数调用的时候可以传入真实数据,增大函数的使用的灵活性

    • 形参:函数定义时书写的参数(非真实数据)
    • 实参:函数调用时书写的参数(真实数据)
    • 传递和定义参数的顺序及个数必须一致。
    • 函数调用,通过“键=值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
    • 缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
    • 不定长参数也叫可变参数。用于**不确定调用的时候会传递多少个参数(不传参也可以)的场景。**此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
      • 包裹位置传递

        def name(*args):
            print(args)
        name('Dave')
        name('Dave', 19)
        """
        ('Dave',)
        ('Dave', 19)
        """
        
        • 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。
      • 包裹关键字传递

        def keys(**kwargs):
            print(kwargs)
        keys(name = 'Dave', nation = 'China', age = 18)
        # {'name': 'Dave', 'nation': 'China', 'age': 18}
        
  • 函数的返回值

    • 作用:函数调用后,返回需要的计算结果
    • 写法
    return 表达式
    
    • return a, b写法,返回多个数据的时候,默认是元组类型。
    • return后面可以连接列表、元组或字典,以返回多个值。
  • 函数的说明文档

    • 作用:保存函数解释说明的信息
    • 写法
    def 函数名():
        """ 函数说明文档 """
    
  • 函数嵌套调用:一个函数内部嵌套调用另外一个函数

2. 变量的作用域

变量作用域指的是变量生效的范围,主要分为两类:

  • 局部变量:是定义在函数体内部的变量,即只在函数体内部生效。在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
  • 全局变量:指的是在函数体内、外都能生效的变量。
    • 如何在函数体内部修改全局变量?
      • global 关键字声明该是全局变量

      • 实例:

        a = 100
        def add1(a, b):
        		global a   # global 关键字声明a是全局变量
        		a = 200
        		return a + b
        

3. 拆包

  • 拆包:元组
def return_num():
    return 100, 200

num1, num2 = return_num()
print(num1)  # 100
print(num2)  # 200
  • 拆包:字典
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1

# 对字典进行拆包,取出来的是字典的key
print(a)  # name
print(b)  # age

print(dict1[a])  # TOM
print(dict1[b])  # 18

4. 引用

  • 概论:在python中,值是靠引用来传递来的。

  • **可以用id()来判断两个变量是否为同一个值的引用。**可以将id值理解为那块内存的地址标识。

    # 1. int类型
    a = 1
    b = a
    
    print(b)  # 1
    
    print(id(a))  # 140708464157520
    print(id(b))  # 140708464157520
    

5. 可变与不可变类型

是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变.

  • 可变类型
    • 列表
    • 字典
    • 集合
  • 不可变类型
    • 整型
    • 浮点型
    • 字符串
    • 元组

6. lambda 表达式

  • lambda

    • 语法
    lambda 参数列表: 表达式
    
    • 特点:

      • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
      • lambda表达式能接收任何数量的参数但只能返回一个表达式的值。
      • 直接打印lambda表达式,输出的是此lambda的内存地址
    • lambda的参数形式

      • 无参数

        lambda: 表达式
        
        fn1 = lambda: 1111
        print(fn1()) # 1111
        
      • 一个参数

      lambda 参数: 表达式
      
      f3 = lambda a : a
      print(f3('hello world!')) # hello world!
      print(f3(122))  # 122
      
      • 默认参数
      lambda key=value: 表达式
      fn1 = lambda a, b, c=100: a + b + c
      print(fn1(10, 20)) # 130
      
      • 不定长位置参数
      lambda *args: 表达式   # 这里的可变参数传入到lambda之后,返回值为元组。
      
      fn1 = lambda *args: args
      print(fn1(10, 20, 30))
      
      • 不定长关键字参数
      lambda **kwargs: 表达式
      
      fn1 = lambda **kwargs: kwargs
      print(fn1(name='python', age=20))
      
    • 带判断的lambda

      fn1 = lambda a, b: a if a > b else b
      print(fn1(1000, 500))
      
    • 列表数据按字典key的值排序

      students = [
          {'name': 'TOM', 'age': 20},
          {'name': 'ROSE', 'age': 19},
          {'name': 'Jack', 'age': 22}
      ]
      
      # 按name值升序排列
      students.sort(key=lambda x: x['name'])
      print(students)
      
      # 按name值降序排列
      students.sort(key=lambda x: x['name'], reverse=True)
      print(students)
      
      # 按age值升序排列
      students.sort(key=lambda x: x['age'])
      print(students)
      
  • 高阶函数

    • 作用:把函数作为参数传入,化简代码

      def sum_num(a, b, f):
          return f(a) + f(b)
      
      result = sum_num(-1, 2, abs)
      print(result)  # 3
      
    • 内置高阶函数

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

        list1 = [1, 2, 3, 4, 5]
        
        def func(x):
            return x ** 2
        
        result = map(func, list1)
        
        print(result)  # <map object at 0x0000013769653198>
        print(list(result))  # [1, 4, 9, 16, 25]
        
      • reduce():reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。

        • reduce()传入的参数func必须接收2个参数。
        #计算`list1`序列中各个数字的累加和。
        import functools
        
        list1 = [1, 2, 3, 4, 5]
        
        def func(a, b):
            return a + b
        
        result = functools.reduce(func, list1)
        
        print(result)  # 15
        
      • filter():filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象。如果要转换为列表, 可以使用 list() 来转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值