博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
range,守护线程,引用,__name__
阅读量:5332 次
发布时间:2019-06-14

本文共 2322 字,大约阅读时间需要 7 分钟。

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等则是可以修改的对象。(这就是这个问题的重点)

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

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

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

转载于:https://www.cnblogs.com/lvhonglei-python/p/7582961.html

你可能感兴趣的文章
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
elasticsearch 集群
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>