Python基础—08-函数使用(02)

函数使用

生成器

  • 使用场景:

    在使用列表时,很多时候我们都不会一下子使用全部的数据,通常都是一个一个使用,但是数据量较小的时候,对于内存的占用可以不用过于关心;但是当数据量较大时,就会出现内存使用突然增大的情况。为了解决内存占用突然增大的问题,python中引入了生成器的概念

  • 使用方式:

    • 将列表生成式中的[]改为()即可
    lt = (i for i in range(2))# 转换为列表
    # print(list(lt))# 一个一个获取,取完后继续使用next会报错
    # print(next(lt))# 遍历
    for i in lt:print(i)

     

    说明:任意方式的使用生成器,都只能时单次的。

    • 通过在函数中使用关键字yield完成
    def test(n):for i in range(1, n+1):yield it = test(5)
    # 生成器对象
    print(t)# 一次一个获取
    # print(next(t))
    # print(next(t))
    # print(next(t))# 遍历
    # for i in t:
    #     print(i)# 转换为列表
    print(list(t))

     

  • 总结:

    • 生成器保存了生成数据的算法,并不是所有的数据
    • 生成器只能执行一遍
    • 具体操作:转换为列表、next、for-in

迭代器

  • 定义:能够使用for-in进行遍历,并且可以通过next函数依次获取元素的对象

  • 说明:

    • 生成器就是一种特殊的迭代器
    • 判断一个对象是否是迭代器
    from collections import Iterator
    lt = (i for i in range(10))
    print(isinstance(lt, Iterator))

     

    • 字符串、列表、元组、集合、字典等都不是迭代器,它们都是可迭代对象

可迭代对象

  • 定义:能够使用for-in进行遍历的对象,都是可迭代对象

  • 使用:判断是否是可迭代对象

    from collections import Iterableprint(isinstance(lt, Iterable))

     

  • 说明:

    • 迭代器一定是可迭代对象
    • 前面学习的列表、元组等都是可迭代对象
  • 将可迭代对象转换为迭代器,使用专门的函数iter

高级函数

  • map

    • 格式:
      map(func, iter)

       

    • 说明:
      • 接收两个参数:一个函数和一个可迭代对象
      • 返回值:返回一个生成器
      • 生成器内容是将func依次作用域iter每个元素的处理结果
    • 示例:
    lt = [1, 2, 3, 4]def double(x):return x * 2# 返回一个生成器
    # m = map(double, lt)
    m = map(lambda x: x*x, lt)print(list(m))

     

    • 练习:
      • 了解字符串处理函数strip
      • 使用map完成:将一个元素全为字符串的列表中的元素全部去掉两边的空白,首字母大写
  • filter

    • 格式:
      filter(func, iter)

       

    • 说明:
      • 参数是一个函数和一个可迭代对象
      • 返回一个生成器
      • 将func依次作用于iter中的元素,返回值为真的将会保留,为假的将会过滤掉
    • 示例:
    lt = [1, 2, 3, 4, 5]# 提取偶数
    f = filter(lambda x: x%2==0, lt)
    print(list(f))

     

    • 练习:提取能被3整除的奇数元素
  • reduce

    • 格式:
      reduce(func, iter)

       

    • 说明:
      • 接收两个参数,一个函数和一个可迭代对象
      • 首先取前两个元素作为func的参数,计算完的结果与第三个元素继续使用func处理,直至结束
      • 返回处理的最后结果
    • 示例:
    from functools import reducelt = [1, 2, 3, 4, 5]# 求和
    # s = reduce(lambda x,y: x+y, lt)
    # 转换为12345
    s = reduce(lambda x,y: x*10+y, lt)
    print(s)

     

    • 练习:求列表中所有元素的乘积

random

  • randint:生成指定区间的一个随机整数
  • random:生成0~1之间的随机小数
  • uniform:生成指定范围内的随机浮点数
  • choice:随机提取一个元素
  • sample:随机提取指定个数的元素,返回一个列表
  • choices:sample函数指定提取元素个数为1的情况
  • shuffle:打乱元素顺序

练习:

  • 使用random函数实现randint函数的功能
  • 生成指定长度的随机字符串,参数:长度、类型
  • 将字符串完成如下转换,如:
    IloveYOUmoreTHANiCANsay => I love you more than i can say

     

  • 将一个列表的元素完成特定的向右移动,参数:列表,移动长度
    • 如:[1, 2, 3, 4, 5],移动2,结果:[4, 5, 1, 2, 3]
  • 传入n,计算
    1!+2!+3!+...+n!
    

     

    可以使用递归

转载于:https://www.cnblogs.com/swjblog/p/9671097.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误

译文链接:https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html http://asp.net core mvc 对应着 .NET Framework 中的 http://ASP.NET MVC, 前者可以跨平台,可扩展,高性能,不过令人惊讶…

实例51:python

#题目:学习使用按位与 & 。 #程序分析:0&00; 0&10; 1&00; 1&11。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a & 3 print (‘a & b %d’ % b) b & 7 print (‘a & b %d’ % b)

asp.net core环境变量product/development设置

一:项目里修改环境变量 环境变量可以在launchSettings.json文件里面设置,也可以右键项目->属性->调试->环境变量进行设置。 这两种方式的内容是同步的,任何一种方式修改后,另外一种就会同步。只不过一个是直接修改文件&a…

win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题

有一位深度技术用户喜欢一款叫命运2的游戏,但是他的电脑安装win10 2004系统后,发现玩命运2的时候,画面经常出现掉帧卡顿卡死等问题,非常影响了正常游戏。接下来深度技术小编给大家分享一下win10电脑玩命运2掉帧的详细解决方法&…

实例52:python

#题目:学习使用按位或 | 。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a | 3 print (‘a | b is %d’ % b) b | 7 print (‘a | b is %d’ % b)

实例53:python

#学习使用按位异或 ^ #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a ^ 3 print (‘The a ^ 3 %d’ % b) b ^ 7 print (‘The a ^ b %d’ % b)

unity全栈开发是什么意思_unity游戏公司面试问题总结

面试大计切勿怕你说的面试官听不懂就重复解释&#xff0c;一定要言简意赅的回答。C#篇一、请简述ArrayList和List的主要区别&#xff1f;ArrayList就是一个List<Object>而已&#xff0c;泛型集合的优势就是类型安全和无装箱。二、请简述nternal的作用internal&#xff1a…

springBoot 解决前后端分离项目中跨越请求,同源策略

今天在做项目的过程&#xff0c;采用前后端分离技术的时遇到采用ajax请求无法访问后台接口&#xff0c;按F12&#xff0c;查看浏览器运行状态时&#xff0c;报如下错误 为了解决浏览的同源策略&#xff0c;就必须了解什么是同源策略。 1.什么是同源策略 同源策略(Same origin p…

python之按位运算

| 按位或: 参与运算的两数各对应的二进位相或.只要对应的二个二进位有一个为1时,结果位就为1 例如: 1|2 : 0001 | 0010 0011 9|5 : 1001 | 0101 1101 所以9|513 & 按位与: 参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1,否则为0 例如: 1&am…

新技术关注

新技术关注 Facebook 开源分布式日志系统 开源 LogDevice 在发布Streaming Ledger之前&#xff0c;流式处理框架&#xff08;如Flink和Spark&#xff09;只提供一次性语义&#xff0c;只能在单个键上实现一致性。然而&#xff0c;随着data Artisans Streaming Ledger的发布&…

轻量级锁_并发编程实战05:锁的状态

无锁、偏向锁 、轻量级锁和重量级锁这四种锁是指锁的状态&#xff0c;专门针对synchronized的。在介绍这四种锁状态之前还需要介绍一些额外的知识。首先为什么Synchronized能实现线程同步&#xff1f;在回答这个问题之前我们需要了解两个重要的概念&#xff1a;“Java对象头”、…

实例54:python

#题目&#xff1a;取一个整数a从右端开始的4〜7位。 #(1)先使a右移4位。 #(2)设置一个低4位全为1,其余全为0的数。可用(0<<4) #(3)将上面二者进行&运算。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a int(input(‘input a number:\n’)) b a &…

SSH隧道技术----端口转发,socket代理

原文的原始出处不详&#xff0c;本文也是在复制引用了某篇转载&#xff0c;并做了必要的整理与编辑。 本文的受众 如果你遇到了以下问题&#xff0c;那么你应该阅读这篇文章 我听说过这种技术&#xff0c;我对它很感兴趣我想在家里访问我在公司的机器&#xff08;写程序&#x…

5d4的白平衡模式_佳能5D4/5D3/6D2系列中高端单反相机和全画幅微单EOS R专题系列课程...

【相机市场谁老大&#xff1f;佳能连续18年全球可更换镜头相机市场份额第一】佳能宣布&#xff0c;从2003年到2020年佳能连续18年全球可更换镜头相机市场份额(台数)第一名&#xff0c;包括数码单反以及微单相机。2019-2020年数码相机市场的销售情况。可更换镜头相机中&#xff…

实例55:python

#题目&#xff1a;学习使用按位取反~ #1)先使a右移4位。 #(2)设置一个低4位全为1,其余全为0的数。可用(0<<4) #(3)将上面二者进行&运算。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 234 b ~a print (‘The a’s 1 complement is %d’ % b) a …

jQuery 简单案例

案例一&#xff1a;全选、反选、取消实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><input type"button" value"全选" …

xadsafe做暗刷_手把手教你如何去掉网吧广告之PUBWin2015_XADSAFE

链接: https://pan.baidu.com/s/1sOMjmseN_O9NW1fne6nyUw 密码: s7hf完完全全学会网吧去广告第四节&#xff1a;Pubwin2015篇前言&#xff1a;暗安全兴趣小组追求的是在技术突破中的快感&#xff0c;他们在乎过程&#xff0c;而不是最终的结果。暗安全欢迎任何有共同爱好的人加…

实例56:python

#题目&#xff1a;画图&#xff0c;学用circle画圆形。 #usr/bin/env python #coding:utf-8 if name ‘main’: import turtle turtle.title(“画圆”) turtle.setup(800,600,0,0) penturtle.Turtle() pen.color(“yellow”) pen.width(5) pen.shape(“turtle”) pen.speed(…

c语言笔记之数组和指针(初学者)

数组 定义 由数据类型相同的一系列元素组成 size_t arr[index]{ } *当{}内列出元素的值&#xff0c;可以让编译器自己数出数组大小&#xff0c;此时index可省略不写。数组的长度可以用(sizeof arr)/(sizeof arr[0])间接得出 初始化 不完全初始化时&#xff0c;编译器会把…

JAVA之运算符优先级

Java运算符优先级从高到低 运算符结合性[ ] . ( ) (方法调用)从左向右! ~ -- (一元运算) -(一元运算)从右向左* / %从左向右 -从左向右<< >> >>>从左向右< < > > instanceof从左向右 !从左向右&从左向右^从左向右|从左向右&&从左…