zoukankan      html  css  js  c++  java
  • range,守护线程,引用,__name__

    1、range 和 xrange 的区别?

      很大的数字序列的时候,用xrange会比range性能优很多
      range 是python3中的。 range(10) 返回是一个列表 range(0,10,2 )

      xrange是python2 中的。 xrange(10)返回是一个生成器

     2、守护线程是什么?

      如果你设置一个线程为守护线程,,就表示你在说这个线程是不重要的,在进程退出 的时候,不用等待这个线程退出。 
      如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即,

      在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志。

      (thread.setDaemon(True))就表示 这个线程“不重要”。

      如果你想等待子线程完成再退出,那就什么都不用做。或者显示地调用thread.setDaemon(False),设置daemon的值为false。

      新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,

      即进程中没有非守护线程存在的时 候才结束。
      import time
      import threading

      def fun():
        print "start fun"
        time.sleep(2)
      print "end fun"

      print "main thread"
      t1= threading.Thread(target=fun,args=())
      #t1.setDaemon(True)

      t1.start()
      time.sleep(1)
      print "main thread end"

      main thread
      start fun
      main thread end
      end fun 
      说明,程序在等待子线程结束,才退出了。



      import time
      import threading

      def fun():
        print "start fun"
        time.sleep(2)
      print "end fun"

      print "main thread"
      t1 = threading.Thread(target=fun,args=())
      t1.setDaemon(True)
      t1.start()
      time.sleep(1)
      print "main thread end"

      main thread 
      start fun
      main thread end

           程序在主线程结束后,直接退出了。 导致子线程没有运行完

     3、__name__使用方法? if __name__ == "__main__":

      1. 如果模块是被导入,__name__的值为模块名字
      2. 如果模块是被直接执行,__name__的值为’ __main__

            模块是对象,并且所有的模块都有一个内置属性 __name__,在cmd 中直接运行.py文件,则 __name__的值是'__main__';

             而在import 一个.py文件 后,__name__的值就不               是'__main__' 了

    4、引用的传递
      a = 1
      def fun(a):
        a = 2
      fun(a)
      print a      # 1


     

      a = []
      def fun(a):
        a.append(1)
      fun(a)
      print a # [1]
      所有的变量都可以理解是内存中一个对象的“引用”
      通过id来看引用a的内存地址可以比较理解,但实际不是
      a = 1
      def fun(a):                                   这里的形参a如果是b.就好理解了
      print "func_in",id(a)                            # func_in 41322472
      a = 2
      print "re-point",id(a), id(2)                      # re-point 41322448 41322448
      print "func_out",id(a), id(1)                      # func_out 41322472 41322472
      fun(a)
      print a # 1


      a = []

      def fun(a):
      print "func_in",id(a) # func_in 53629256
        a.append(1)
      print "func_out",id(a) # func_out 53629256
      fun(a)
      print a # [1]

      类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。

      在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)

      第一个案例当一个引用传递给函数的时候,函数自动复制一份引用而已,其他的活没做,只是传递了引用而已,

      多了一个引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,

      当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作外面的也会修改.

    life is short,i need python
  • 相关阅读:
    音频(一)_音频认知(1.音频释义)
    音频_写在前面的话
    SignInWithAppleId(Apple登录接入)_unity篇
    编程工具~用了都说好的快捷键大杂烩
    Unity的PlayerPrefs存储路径
    unity如何判断应用的运行平台
    Unity资源加载机制www的坑
    VSCode快捷键
    MD5加密字符串并转化为base64(C#和PHP代码相同实现)
    转载:关于 Google Chrome 中的全屏模式和 APP 模式
  • 原文地址:https://www.cnblogs.com/lvhonglei-python/p/7582961.html
Copyright © 2011-2022 走看看