四、python杂项

一、pycharm单行和多行注释快捷键
           
多行注释就一个组合键:选中+Ctrl+/    

多行向里面移动:选中+shift+TAB 

多行向外面移动:选中+TAB

 

二、什么是脚本语言?

          忽然想到这个问题,其实python学习中,看到有人叫脚本语言、有人说是编译语言。脚本语言需要的是解释器,进行脚本的解释执行,而编译语言需要的是编译器,程序写完,需要的是编译,生成字节码,链接动态库,运行结果,所以脚本语言更具实时性,但编译语言一次编译,多次执行,效率高,但依赖编译器,跨平台性差。脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。每次运行,都是重复执行的。这是我理解的区别。

三、全局变量与局部变量?

  3.1 如果要在函数内改变全局变量的值,就要用global 在函数内声明全局变量,

  3.2 函数中的变量都在栈帧中,栈帧可以访问引用函数之外的变量,但是不能被函数之外的变量引用

       3.3 局部变量比函数效率更高。

四、__str__()函数的作用:

  写程序时,打印一个实例化对象时,打印的其实是一个对象的地址。而通过__str__()函数就可以帮助我们打印对象中具体的属性值,或者你想得到的东西。

  因为在python中调用print()打印实例化对象时会调用__str__(),如果重写了__str__()且有返回值,就会打印其中的返回值。
例子:
  class ss:
      def __init__(self,age,name):
          self.age = age
          self.name = name
      def __str__(self):
          return str(self.age)+",,wozenmezhemeshuai,,"+self.name
  if __name__=="__main__":
      s = ss(21,'aitebao')
      print(s)
  输出结果:
  21,,wozenmezhemeshuai,,aitebao
 
五、Django的objects.get和objects.filter方法详解和区别?
 
1)django的objects.get()方法: django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。
2)django的 objects.filter()方法: django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
 
六、单例:
    场景:例如打开一个应用,那么配置文件只要加载一次。在python中,单例的方式方法有很多。

七、os和os.path模块:

     os.system模块可以直接调用系统的命令

     os.startfile:直接调用可执行文件 (可以理解为安装的软件,不是原有的)

     os 模块:创建、删除目录、获取文件信息等

     os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作

八、http://www.python.org可以进行在线程序的编写。

九、可读性强,意味着让你可以在更短的时间学习和记忆,提高生产力。

十、比如a=3, a为变量,不需要像java一样声明类型,因为在a=3时,对象就有了类型,在堆中,定义了对象地址、类型、和值了。

十一、round(3.14)=3,四舍五入后产生的新的对象。

十二、强转换也会产生新的对象。

十三、删除列表元素和增加列表元素一样,都会涉及元素的拷贝。

十四、python中,字典的底层为散列表,散列表为一个稀疏数组,数组的每个单元叫做bucket,我们经过计算键的hash值,指定一定的偏移量,然后看对应的bucket是否有值,无值,加入之;有值,则在进行偏移,当散列表2/3都有值时,在进行扩容。

十五、内部函数作用:

  1.隐藏数据     2.避免重复代码,只为所属外部函数服务,不面向所有,不被频繁调用     3.闭包

         nonlocal 内部函数中,用来声明外层的局部变量,在内层需要修改外层变量时,会用到。

十六、locals(),字典返回所在函数局部变量

     globals(),字典返回的所有全局变量

十七、对于面向对象和面向过程的理解?

  面向过程:适合简单的,不需要协作即可完成的,需要找动词作为处理关系的。

       面向对象:适合复杂的,需要协作的,需要找名词作为类名,确定类与类之间的关系的。

十八、几个需要知道的内置方式,

  1.对象.__dict__表示对象的属性字典

       2.print(dir(对象))表示对象的全部方法和属性

       3.类方法不能调用实例方法和属性

       4.__del__析构函数,del实际调用的是__del__

       5.对象()实际调用的是__call__方法。

十九、trackback:打印异常的详细信息

  with open("d/a.txt","a") as f

    trackback.print.exc(file=f)

二十、文件操作中的file.close关闭的是全部,包括内存python文件程序资源,解释器缓存,os操作系统打开硬盘的硬件资源。

二十一、编码与解码不一致,大多造成乱码,python程序为UTF-8,windows默认编码为GBK,linux默认的编码是UTF-8

二十二、file.write():把字符串写到文件中,file.writelines(b)把字符串写到列表中。

二十三、os.listdir(path):只能打印一层文件或文件夹

    os.walk():递归遍历所有文件和目录

二十四、个人理解导入模块实际是一种类似单例的模式,在解释器中只会被加载一次。如果要重新加载importlib.reload(模块名)

二十五、模块和包的发展史可以让我们知道,核心的哲学思想就是“量变引起质变”,“物以类聚”。同样的思路,在企业管理、人的管理中思想完全一致。

二十六、模块的发布:

  本地发布:在当前包下,python setup.py sdist

  下载: python setup.py install(安装到site-packages中)

       在pypi官网发布:https://pypi.org发布

二十七、序列化和反序列化

序列化:将对象转化成“串行化”数据形式,存储在硬盘或者网络传输到其他地方。

反序列化:是指相反的操作,将读取的“串行化数据”转化成对象。

二十八、GUI图形用户界面编程就4步骤:

  1.创建跟窗口

  2.在根窗口添加各种可视化组件

  3.布局管理器调整组件的大小和位置

  4.事件处理,让组件活动起来,有相应的事件反应。

二十九、既然可以直接在根窗口添加组件,为什么要Frame,个人理解,因为复杂的可视化界面需要,如果可视化界面足够复杂,各种类型的组件都有,那么我们在添加了Frame后,就可以方便的进行区分。比如不同分类的单选、一部分相同控件不显示等等。可能还有自己没有意识到的许多方便之处。遵循经典写法即可。(了解)

三十、%g 浮点数字(根据值的大小采用%e或%f)

三十一、静态方法是定义在类对象中的,和类中的普通函数类似,和类对象无关的一个函数而已。

三十二、对于__call__方法
   对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2) 。模拟函数的对象可以用于创建防函数(functor) 或代理(proxy).

class DistanceForm(object):
  def __init__(self, origin):
    self.origin = origin
    print "origin :"+str(origin)
  def __call__(self, x):
    print "x :"+str(x)
p = DistanceForm(100)
p(2000)

总结:此方法在对象中调用,创建该方法后,对象进行初始化后,就一定最后会执行该方法,且自动执行在该方法中的所有方法,比如类装饰器。

三十三、super(MyTank, self).__init__(top,left);找到mytank的父类后,将子类对象self传递给父类作为对象。

 

三十四、关于并发编程,有三种方式:
  1)多进程,每个进程只有一个线程
  2)多线程,每个进程有多个线程
  3)多进程,每个进程又有多个线程,但是这种模式很复杂,实际很少采用。
  在python上有一个守护线程的概念,就是主线程死,守护线程也死。创建一个被多个线程共享的队列是最安全的方式,队列里面包换了锁。

三十五、genterator:生成器,一边计算,一边生成,快于推导式

    iterator:迭代器,生成器也是迭代器的一种表现形式,方法next

    iterable:具备迭代性,生成器和集合类都具备迭代性。

 

三十六、地址/robots.txt,robots是网站跟爬虫间的协议.

 

三十七、fidder抓包工具,抓取请求。

posted @ 2020-02-17 14:41  小熊尤里  阅读(139)  评论(0编辑  收藏  举报