码迷,mamicode.com
首页 > 编程语言 > 详细

PythonMan(五)

时间:2016-07-29 21:06:37      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

Hello Python :)

 

补充数据类型:set(简单记忆:不允许重复的列表)
  s = set() #创建空集合
  s.add(11)
  s.add(11)
  for s1 in s :
    print(s1) #仅仅输出一个11


细节:
  创建set集合的时候,也可以接受元组、字符串、列表等可迭代对象。

方法:
  clear() :清空

  difference() :
    s1 = {11,22,33}
    s2 = {22,44}
    print(s1.difference(s2))
    #{11,33}
    print(s2.difference(s1))
    #{44}

  difference_update():
    print(s1.difference_updata(s2))
    #None 所以无返回值
    print(s1)
    #{33,11} 所以这个方法是找到s1存在而s2不存在的,更新自己。

  discard() :移除指定元素,不存在不报错


  remove() : 移除指定元素,不存在会报错

  intersection() :取两个几个集合的交集

  intersection_update() :取交集并且更新自己

  isdisjoint() :判断一下是否有交集

  issubset() :是否为子序列

  issuperset() :是否为父序列

  pop() : 移除一个元素并返回

  symmetric_difference() :
    s1 = {11,22,33}
    s2 = {22,44}
    print(s1.symmetric_difference(s2))
    #输出{33,44}

  symmetric_difference_updata() :...


  union() :并集

  update() :更新

----------------------set结束,不太重要···----------------



三元运算
  例子:name = "Kepler" if 条件 else "Stark"
  如果条件为True,name = "Kepler"
  如果条件为False,name = "Stark"

不同数据类型在内存中的存址方式:
  类比于C语言,Python中的列表就像链表。
  str就像数组,所以本身不能变化,仅能重新分配


深浅拷贝:
  import copy
  n1 = 123
  n2 = copy.copy(n1)
  print(id(n1))
  print(id(n2))
  #输出的id号一样,这是浅拷贝
  n2 = copy.deepcopy(n1)
  print(id(n1))
  print(id(n2))
  #输出的id号一样,这是深拷贝
  #综上,对于数字和str,无论深浅拷贝,id都是一样的,因为有Python的本身优化

对于列表等,情况就不同了。
  n1 = {11:"Kepler" , 22:"Air"}
  n2 = copy.copy(n1)
  print(id(n1))
  print(id(n2))
  #id相同
  print(id(n1[11]))
  print(id(n2[11]))
  #id不同
  #综上,浅拷贝仅仅拷贝第一层,后续的依旧指向了原始地址

  n2 = copy.deepcopy(n1)
  #这时候,会一直拷贝到数字和str这一层,即有多少层就拷贝多少层,直到str和数字(即最后一层)


函数初步:
  Q:如何定义函数?
    def first() :
      Something...

  Q:如何调用函数?
    first()

  Q:函数如何返回?
    return Something

  Q:函数的参数?
    def first(args) :
      Something...
    # args 被叫做形式参数,写法随意,被调用时,first(123),中的123被叫做实际参数,这点和Java、C等有些差别。值得注意的是,函数有多个形参时,也可以不按顺序,只要通知编译器就好了。
    默认值:
      def first(args,args1 = 123) :
        Something...
      #这个first函数,可以这样调用:first(110)、first(110,220),其中第一种不指定args1,默认值是123,第二种是指定了args1 = 220。值得注意的是,要想使用默认参数,一定要放在后面,也可以有多个默认参数。

    动态参数:
      顾名思义,传多少参数都可以。
      

      a)def first(*args) :
        Something...
      #这样,first()函数可以接受任意多的参数。内部原理:动态参数的本质是把传入的任意多个参数变成了元组的形式,当然可以嵌套等...


      b)def first(**args) :
        Something...

      #这种类型的动态参数要这样调用:first(k1=123,ke=234)。内部的本质是将传入的参数转换成字典。所以传入的时候要遵循字典的定义,即KV。

      c)以上的两种动态参数可以混合使用,也可以和普通的形式参数混搭,但要注意a)的要在b)的前面。

      细节:
        def first(*args) :
          print(args)


        first([11,22,33,44])
        first(*[11,22,33,44])
        #第一个输出:([11,22,33,44],)
        #第二个输出:(11,22,33,44)

        def first(**args) :
          print(args)

        dic = {"K1":11,"K2":22}
        first(dic)
        firsst(**dic)
        #第一个会报错
        #第二个才是正确的传入动态参数字典的方法,当然KV形式当然是可以的

      全局变量和局部变量:
        和Java等高级编程语言相通。
        如果想在函数内(局部变量)修改全局变量,那就使用global关键字。
        例子:
          p = "Kepler"

          def fun1():
            p = "Air"

          def fun2():
            global p
            p = "Stark"

          def fun3() :
            print(p)


          fun1()
          fun3()
          #输出Kepler
          

          fun2()
          fun3()
          #输出Stark
          Got it?

PythonMan(五)

标签:

原文地址:http://www.cnblogs.com/AirStark/p/5719392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!