基本类型的补充:

  • set集合

    • 介绍:

      • set集合是一个无序且不重复的元素集合,我们可以使用他来对比,去重,查看重复项(交集),不重复项(差集),a有很多元素,b中有几个元素但是元素都和a中元素相同这样可以判断a是不是b的父集,查看两个合并后去掉两个集合中的重复元素。
    • 集合元素

      • a={1,2,3,4,5,6,7,8,9}
      • b={3,4,5,6}
    • 方法:

      • 判断a集合是不是b集合的父集或是不是子集:

        print(a.issuperset(b))  #判断a集合是不是b集合的父集,也就是说b中有的a中都有,使用True或者False返回
        print(a.issubset(b))  #判断a集合是不是b集合的子集,也就是说a中有的b中都有,使用True或者False返回
        执行结果:
        True
        False

        判断a集合是不是b集合的父集或是不是子集

      • 清空集合:

        a.clear()
        print(a)
        执行结果:
        set()

        清空集合

      • 向集合中添加一个元素:

        a.add(10)
        print(a)
        执行结果:
        {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

        向集合中添加一个元素

      • 向集合中添加多个元素:

        a.update(['a','b','c','d'])
        print(a)
        执行结果:
        {1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'c', 'd', 'b'}

        向集合中添加多个元素

      • 删除a集合中的3元素(这个方法如果集合中不存在这个元素会报错):

        a.remove(3)
        print(a)
        执行结果:
        {1, 2, 4, 5, 6, 7, 8, 9}

        删除a集合中的3元素

      • 删除a集合中的8元素(该方法若是集合中没有这个元素不会报错):

        a.discard(8)
        print(a)
        执行结果:
        {1, 2, 3, 4, 5, 6, 7, 9}

        删除a集合中的8元素

      • 随机删除一个元素,因为集合是无序的所以它默认是删除最后一个可是最后一个不固定:

        a.pop()
        print(a)
        执行结果:
        {2, 3, 4, 5, 6, 7, 8, 9}

        随机删除一个元素

      • 输出两个集合中都存在的元素,产生一个新的值,如果需要用变量接收,或者直接查看(交集)。

        print(a.intersection(b))
        执行结果:
        {3, 4, 5, 6}

        输出两个集合中都存在的元素

      • 对比两个集合中都存在的元素,修改原来的元素(交集)。

        a.intersection_update(b)
        print(a)
        执行结果:
        {3, 4, 5, 6}

        对比两个集合中都存在的元素

      • 判断两个集合中有没交集。

        print(a.isdisjoint(b))
        执行结果:
        False

        判断没有交集

      • 将两个集合合并,可以达到去重的效果(并集),如果需要值需要将执行结果给一个变量它不会修改原来的集合。

        print(a.union(b))
        执行结果:
        {1, 2, 3, 4, 5, 6, 7, 8, 9}

        将两个集合合并

      • 拿出集合a中存在的b中不存在的,如果需要值需要将执行结果给一个变量它不会修改原来的集合(差集)。

        print(a.difference(b))
        执行结果:
        {8, 1, 2, 9, 7}

        集合a中存在b中不存在

      • 拿出集合a中存在的b中不存在的,并修改a集合(差集)。

        a.difference_update(b)
        print(a)
        执行结果:
        {1, 2, 7, 8, 9}

        拿出集合a中存在b中不存在的值,修改a集合

      • 在a集合或b集合中,但不会同时出现在二者中(对称差集),如果需要值需要将执行结果给一个变量它不会修改原来的集合。。

        print(a.symmetric_difference(b))
        执行结果:
        {1, 2, 7, 8, 9}

        在a或b集合中的元素,不会同时出现在另一个集合中的

      • 在a集合或b集合中,但不会同时出现在二者中(对称差集),直接修改a集合:

        a.symmetric_difference_update(b)
        print(a)
        执行结果:
        {1, 2, 7, 8, 9}

        对称差集

三目运算(三元运算):

  • 介绍:

    • 三目运算就是是对简单的条件语句的缩写,让之前需要3-4行的特殊代码写成一行:
    • 使用方法:
      c=0
      name='Wu' if c== 0 else 'Qi'  #先做if判断如果c等于0那么name的值就是Wu否则值为Qi
      print(name)
      执行结果:
      Wu

深浅拷贝:

  • 数字和字符串

    • 对于数字和字符串而言深浅拷贝、赋值,没有是没意义,因为他们如果相同永远指向同一个内存地址:

      a='hello'
      b='hello'
      c=1
      d=1
      print(id(a))    #id()查看变量的内存地址print(id(b))print(id(c))print(id(d))
      执行结果:
      1902418750296
      1902418750296
      1521807152
      1521807152    

  • 其他基本数据类型的深浅拷贝赋值:

    • 介绍:

      • 赋值就是你创建了一个变量然后有值,又创建一个变量给的值指向的就是你之前创建的变量名。

        n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
        n2 = n1
        print(id(n1))    #查看n1字典在内存的位置
        print(id(n2))       #查看n2字典在内存的位置
        print(id(n1['k1']))     #查看n1字典中k1值的内存位置
        print(id(n2['k1']))       #查看n2字典中k1值的内存位置
        执行结果:
        1961536305736
        1961536305736
        1961536697040
        1961536697040

        赋值的拷贝分析

        

  • 浅拷贝:

    • 介绍:在内存中只创建第一层数据结构:

      • 分析:

        import copy #拷贝模块
        n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
        n2 =copy.copy(n1)    #浅拷贝n1
        print(id(n1)) #输出n1在内存的位置
        print(id(n2)) #输出n2在内存的位置
        print(id(n1['k3'])) #输出n1中列表在内存的位置
        print(id(n2['k3'])) #输出n2中列表在内存的位置
        执行结果:
        2162448251464
        2162448682888
        2162450147144
        2162450147144

        浅拷贝分析

        

  • 深拷贝:

    • 介绍:

      • 在内存中将所有的数据重新创建一遍,除了字符串和数字使用的还是原来的内存地址,因为Python对他们做了优化。
    • 深拷贝的分析:

      import copy
      n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
      n2 = copy.deepcopy(n1)    #深拷贝
      print(id(n1))     #查看n1字典的内存地址
      print(id(n2))     #查看n2字典的内存地址
      print(id(n1['k3']))       #查看n1字典中的k3值的内存地址
      print(id(n2['k3']))       #查看n2字典中的k3值的内存地址
      print(id(n1['k1']))          #查看n1字典中的k1值的内存地址
      print(id(n2['k1']))        #查看n2字典中的k1值的内存地址
      执行结果:
      2398849710664
      2398850108872
      2398851605768
      2398851575624
      2188442383056
      2188442383056

      Python深拷贝分析

函数:

  • 背景:

    • 在学习函数之前,我们一直遵循:面向过程编程,就是所谓的从上到下的执行实现功能,有时候会有很多重复的代码我们就需要复制粘贴,这样就会导致我们的开发效率,而且容易出错。

    • 函数的使用:假设我们有一个脚本在不断的循环查看服务器的各个状态是否正常如果不正常就会发送邮件但是邮件发送使用面向过程的大方会有很多重复的代码既浪费空间还浪费时间。

      while True:if cpu利用率 > 90%:#发送邮件提醒连接邮箱服务器发送邮件关闭连接    if 硬盘使用空间 > 90%:#发送邮件提醒连接邮箱服务器发送邮件关闭连接if 内存占用 > 80%:#发送邮件提醒连接邮箱服务器发送邮件关闭连接

      面向过程的编写方式

      def 发送邮件(内容)#发送邮件提醒连接邮箱服务器发送邮件关闭连接while True:if cpu利用率 > 90%:发送邮件('CPU报警')if 硬盘使用空间 > 90%:发送邮件('硬盘报警')if 内存占用 > 80%:发送邮件('内存报警')

      函数式编程的编写方式

      可以看出来上面的两种方法第二种要比第一种重用性和可读性要好很多,这就是面向过程和函数式编程的区别

    • 解释:

      • 函数式编程:将写好的某些功能代码封装到函数中,以后便不需重复编写,直接调用函数就可以。(函数式编程最重要的是增强代码的重用性和可读性
      • 面向对象:对函数进行分类和封装,让开发者开发的效率“更快更好更强...”
      • 面向过程:这个代码从上到下的执行。
  • 定义和使用

    • 函数结构:

      def 函数名(参数):       ...函数体...返回值

      函数结构

    • 函数的定义主要有以下几点:

      • def:表示函数的关键字。
      • 函数名:函数的名称,以后根据函数名调用函数。
      • 函数体:函数中进行一系列的逻辑计算。
      • 参数:为函数体提供数据
      • 返回值:当函数执行完毕后,给调用者返回需要的数据。
  • 返回值

    • 解释:

      • 函数是一个功能块,该功能到底执行是否成功,需要通过返回值来告知调用者。
    • 列如:

      def test():a=0if a == 0 :return '成功'else:return '失败'
      print(test())
      执行结果:
      成功

      Python函数返回值的例子

  • 参数

    • 解释:

      • 参数可以更好、更准确的去执行处理,因为如果没有参数那么就相当于函数被写死了。
    • 参数例子

      • 如果没有参数将会成为这样,需要写很多函数,调用每一个不同的函数,但是函数内部就是改了一个内容而已,这样就和面向过程变成一样了。

        def CPU报警邮件()#发送邮件提醒连接邮箱服务器发送邮件关闭连接def 硬盘报警邮件()#发送邮件提醒连接邮箱服务器发送邮件关闭连接def 内存报警邮件()#发送邮件提醒连接邮箱服务器发送邮件关闭连接while True:if cpu利用率 > 90%:CPU报警邮件()if 硬盘使用空间 > 90%:硬盘报警邮件()if 内存占用 > 80%:内存报警邮件()

        没有参数的函数

      • 加参数函数,这样我们的可读性变得会很好,而且可以很好的操作。

        def 发送邮件(邮件内容)#发送邮件提醒连接邮箱服务器发送邮件关闭连接while True:if cpu利用率 > 90%:发送邮件("CPU报警了。")if 硬盘使用空间 > 90%:发送邮件("硬盘报警了。")if 内存占用 > 80%:发送邮件("内存报警了。")

        加参数的函数

    • 函数中三种不同的参数

      • 普通参数就和我们上面说的一样,但是他必须是有几个形参就要有多少实参,形参就是函数名后面()里的参数个数,实参就是调用函数时的()里写的内容。

        def test(name):      #参数name,(形参)return name
        print(test('Wu'))
        执行结果:
        print(test('Wu'))        #执行test函数传参Wu。(实参)
        执行结果:
        Wu

        普通参数

      • 默认参数:

        def test(name='None'):     #默认参数必须在形参后面,也可以理解为写到最后面才可以使用。return name
        print(test())
        执行结果:
        None

        默认参数

      • 动态参数一:

        def test(*name):return name
        print(test(1,2,3,4,5,7))   #给test函数传很多数字
        执行结果:
        (1, 2, 3, 4, 5, 7)        #输入结果为元组类型的。

        Python动态参数一

      • 动态参数二:

        def test(**name):return name
        print(test(name='Wu',age=20))     #给函数test传实参,多个参数,必须是**=**因为这种动态参数会以字典的形式返回
        执行结果:
        {'name': 'Wu', 'age': 20}

        Python动态参数二

      • 动态参数一和二可以同时使用:

        def test(*args,**kwargs):#python默认提供的动态参数名称*args和**kwargsreturn args,kwargs
        print(test(123,123,234,name='Wu',age=20))
        执行结果:
        ((123, 123, 234), {'age': 20, 'name': 'Wu'})

        Python动态参数同时使用两个

      • 向动态参数传元组需要加一个*,字典加两个*。
  • 练习:

    • 简述普通参数、指定参数、默认参数、动态参数的区别。
    • 写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
    • 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    • 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    • 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    • 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    • 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
      dic = {"k1": "v1v1", "k2": [11,22,33,44]}

      PS:字典中的value只能是字符串或列表

    • 写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。

      def func(arg1,arg2):if arg1 == 0:print arg1, arg2arg3 = arg1 + arg2print arg3func(arg2, arg3)
      func(0,1)

      斐波那契

    • 寻找差异

      # 数据库中原有old_dict = {"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },"#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }}# cmdb 新汇报的数据new_dict = {"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 },"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }"#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 }}

      选做

      提示是否删除:?
      提示是否新建:?
      提示是否更新:?
      注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新,凭自己想法去做。

练习解答在另一篇中出现 !

转载于:https://www.cnblogs.com/WuYongQi/p/5468773.html

Python开发Day03相关推荐

  1. python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)

    s12-20160116-day03 pytho自动化开发 day03 Date:2016.01.16 @南非波波 课程大纲: day2 http://www.cnblogs.com/wupeiqi/ ...

  2. Python基础day03 作业解析【5道 字符串题、3道 列表题、2道 元组题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day03[字符串(定义.输入输出.常用方法).列表(定义.基本使用.增删改查.嵌 ...

  3. python开发实例-python开发案例

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. gitee.com52itstylepythonblobmasterda ...

  4. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

  5. python 开发板-MicroPython:STM32 上 的 Python 开发

    虽然Python在国外是一门非常火的语言,在黑客界更是赫赫有名,然而中国的大学却极少开设 Python 课程,故而国内 Python 程序员多属自学.而一个没有MCU编程经验的初学者,要想让芯片跑起来 ...

  6. 如何在python开发的GUI界面程序中恰当地使用PyExecJS

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 "解决一闪而过的黑框的小技巧." 在使用python开发过程中,不可避免地,会开发带界面的应用,也会经常使用js来完成一些功能,比如, ...

  7. Python培训教程分享:10款超好用的Python开发工具

    学会Python技术后,我们在参加工作的时候如果能有辅助工具的话,那么会很大程度的提高我们的工作效率,那么Python都有哪些好用的开发工具呢?下面小编就为大家详细的介绍一下10款超好用的Python ...

  8. 学习Python开发培训有用吗

    学习Python开发培训有用吗?这是目前很多人都比较关注的一个问题,Python语言在最近几年是广受IT互联网行业关注的, 下面我们就针对这问题来详细的分析一下. 学习Python开发培训有用吗?Py ...

  9. Python开发【第十篇】:CSS (二)

    Python开发[前端]:CSS Kylin Zhang 发表于 2016-11-10 13:13:57 css样式选择器 标签上设置style属性: <body><div styl ...

最新文章

  1. linux传文件到xp,Linux与Windows XP之间使用FTP互传文件
  2. 知乎热议20年科研怪状:为何论文创新性越强越难发表,跟风修修补补反而更容易发?...
  3. 零基础学编程学java还是python-零基础学编程,Java和Python你pick谁?
  4. ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...
  5. 【哲学】罗素《哲学问题》,把我从怀疑派拉回来,本能信仰
  6. nginx-rtmp常用指令
  7. EJB3与EJB2的差别
  8. 【TensorFlow】TensorFlow从浅入深系列之五 -- 教你详解滑动平均模型
  9. React中函数式声明组件
  10. ORA-01033 ORACLE initialization or shutdow in progress
  11. webpack项目篇(六十六):react 全家桶 和 webpack 开发 h5 商城项目的整体思路
  12. 【设备管理】【OEE】30页精彩PPT:详解精益生产OEE
  13. 水晶易表Xcelsius 2008安装常见问题小结
  14. 双人版井字棋游戏c语言设计报告,井字棋游戏课程设计总结报告.doc
  15. Java 盾神与砝码称重
  16. Netapp 两节点双活VS本地HA
  17. Python 3 《array》入门练习
  18. 微信开发者工具下载及调试
  19. 2021年武汉大学MPA考研复试真题分享
  20. win10计算机怎么改中文,windows10 中文,小编教你Win10怎么设置中文语言

热门文章

  1. 代码控制UI,View
  2. 动态规划面试常考:最短路径和
  3. 嵌入式软件开发的特点、设计流程、嵌入式软件的结构
  4. 简述网络文件系统NFS,并说明其作用。
  5. keil5软件仿真出现unknown signal解决方法。
  6. JAVA中return与finally的先后关系
  7. 汇编: 更灵活的定位内存地址的方法
  8. 成本中心的费用计划/KP06
  9. 使用SharedPreferences进行数据存储
  10. vue.js环境安装