当前位置: 首页 > news >正文

python函数式编程一

一、pythonorand的使用

  • 1、使用方式

    result = a or b
    result = a and b
    复制代码
  • 2、or计算规则

    • a为真的时候就直接返回a的值,否则返回b的值
  • 3、and计算规则

    • a为真的时候返回b,当a为假的时候返回a
  • 4、pythonFalse的值

    • None
    • False
    • 0
    • ''/()/[]
    • {}

二、python中的三木运算

  • 1、格式

    result = 条件为真时返回的结果 if 条件 else 条件为假返回结果
    复制代码
  • 2、使用案例

    result = '我是真的' if True else '我是假的'
    复制代码

三、python中函数的定义方式

  • 1、常规函数定义方式

    def 函数名(参数):
    	pass
    复制代码
  • 2、lambda函数

    赋值接收的变量 = lambda 参数列表...: 函数返回值
    f = lambda x, y: x + y
    复制代码

四、函数传参的几种形式

  • 1、无参函数

    def foo():
    	pass
    复制代码
  • 2、固定参数(形参与实参一一对应)

    def foo(name, age, gender):
    	pass
    
    if __name__ == '__main__':
    	foo('张三', 20, '男')
    复制代码
  • 3、可变参数(python中习惯使用关键词*args来表示)

    在函数体中接收的是一个tuple元祖

    def foo(*args):
    	print(args)
    
    if __name__ == '__main__':
    	foo(1,2,3,4,5)
    复制代码
  • 4、关键字参数(python中习惯使用关键词**kwargs来表示)

    关键字参数传递到函数中是以dict的方式展示

    def bar(**kwargs):
        print(type(kwargs))
        print(kwargs)
    
    if __name__ == '__main__':
        bar(name='张三', gender='男', age=20)
    
    # <class 'dict'>
    #{'name': '张三', 'gender': '男', 'age': 20}
    复制代码
  • 5、固定参数、可变参数、关键字参数混合使用

    原理

    • 1.先会把实参不能少于形参固定参数的个数(少于会直接报错)
    • 2.把实参优先给固定参数,多余的给可变参数
    • 3.如果使用了关键词传递的参数就是关键字参数中
    def test(name, age, *args, **kwargs):
        print(name, age)
        print(args)
        print(kwargs)
    
    if __name__ == '__main__':
        test(1, 2, 3, 4, 5, address='广东', mobile = '110')
    复制代码
  • 6、默认参数

    def test(name, age=20):
        print(name, age)
    
    if __name__ == '__main__':
        test('哈哈')
    复制代码

五、函数的返回值

  • 1、如果没指定函数返回就返回None
  • 2、函数使用return的返回值只有一个
  • 3、如果一个函数可以返回一个列表、元祖、字典
  • 4、函数可以使用yield返回多个值

六、python中常见的内置函数

  • 1、map函数(遍历可迭代对象返回一个可迭代对象)

    • 使用格式

      map(函数, iterable...)
      复制代码
    • 使用案例

      list1 = [1, 2, 3, 4, 5]
      list2 = [6, 7, 8, 9, 10]
      
      result1 = map(lambda x: x ** 2, list1)
      print(list(result1))
      
      result2 = map(lambda x, y: x + y, list1, list2)
      print(list(result2))
      
      tuple1 = (1, 2, 3, 4)
      print(list(map(lambda x: x ** 2, tuple1)))
      复制代码
  • 2、filter函数(过滤数据)

    • 使用格式

      filter(函数, iterable...)
      复制代码
    • 使用案例

      list1 = [1, 2, 3, 4, 5]
      print(list(filter(lambda x: x % 2 == 0, list1)))
      print([x for x in list1 if x % 2 == 0])
      复制代码
    • 过滤数据推荐使用列表推导式

      list1 = [1, 2, 3, 4, 5]
      print([x for x in list1 if x % 2 == 0])
      复制代码
  • 3、reduce函数(连续计算)注意需要先导包

    • 1、定义格式

      from functools import reduce
      
      result = reduce(函数, iterable, 初始化值)
      复制代码
    • 2、使用案例

      from functools import reduce
      
      if __name__ == "__main__":
          list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
          result = reduce(lambda x, y: x + y, list1)
          print(result)
          result2 = reduce(lambda x, y: str(x) + str(y), list1, '==')
      复制代码
  • 4、sorted排序函数

    • 列表排序

      sorted([36, 6, -12, 9, -22])  列表排序
      复制代码
    • 字符排序

      sorted(['bob', 'about', 'Zoo', 'Credit'])  #字符串排序,按照ASCII的大小排序
      复制代码
    • 逆向排序(相当于先升序排序后,然后在反向)

      sorted([36, 6, -12, 9, -22], reverse=True)
      复制代码
    • 添加函数排序使用关键参数key(注意这个地方的函数只能传递一个参数的函数)

      L = [{1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
      print(sorted(L, key=lambda x: len(x)))
      复制代码
    • key函数需要传递多个函数的时候

      from functools import cmp_to_key
      
      if __name__ == "__main__":
          L = [{1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
          print(sorted(L, key=cmp_to_key(lambda x, y: x[1] > y[1])))
      复制代码
    • 元祖、字典使用排序

      a = [('b', 2), ('a', 1), ('c', 0)]
      print(sorted(a, key=lambda x: x[0]))
      print(sorted(a, key=lambda x: x[1]))
      
      b = [{'city': '深圳', 'tem': 40}, {'city': '广州', 'tem': 30}]
      print(sorted(b, key=lambda x: x['tem']))
      复制代码

七、更多关于作者文章请访问

相关文章:

  • .NET性能优化(文摘)
  • CentOS 7.5 运维之路之网络配置
  • Linux日志分析详解
  • 高德地图大批量数据(上万)画历史轨迹实现方案
  • java并发包
  • 爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
  • yum工具介绍及本地源配置方法
  • Vuex的模块化、优点
  • 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
  • 程序员通往架构师必须掌握知识点——并发编程的那些事
  • ElasticSearch(五)之elasticsearch基本用法
  • CodeOne 主题演讲:Java,未来已来
  • JAVA入门到精通-第1讲
  • centos7防火墙设置
  • mongodb细讲
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • axios 和 cookie 的那些事
  • git 常用命令
  • Git的一些常用操作
  • HTML中设置input等文本框为不可操作
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js算法-归并排序(merge_sort)
  • leetcode46 Permutation 排列组合
  • MobX
  • PHP的Ev教程三(Periodic watcher)
  • scala基础语法(二)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SQLServer插入数据
  • 翻译--Thinking in React
  • 欢迎参加第二届中国游戏开发者大会
  • 机器学习中为什么要做归一化normalization
  • 你不可错过的前端面试题(一)
  • 前端技术周刊 2019-01-14:客户端存储
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 深度学习入门:10门免费线上课程推荐
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 最近的计划
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (10)STL算法之搜索(二) 二分查找
  • (12)Linux 常见的三种进程状态
  • (70min)字节暑假实习二面(已挂)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (待修改)PyG安装步骤
  • (二)springcloud实战之config配置中心
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (学习日记)2024.02.29:UCOSIII第二节
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码