python笔记

牛客网上某些习题笔记,初学,选的题目超简单。。。。

  1. print('a'<'b'<'c')运行结果是True
    解析:python支持连续比较,其本质是字符ASCII码的大小比较
  2. 字符应该视为长度为1的字符串
  3. 既可以用单引号,也可以用双引号创建字符串
  4. 在三引号字符串中可以包含换行回车等特殊字符
  5. python中字符串不需要以\0结尾,c/c++中字符串以\0结尾
  6. python2中,普通字符串是以8为ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够更好的表示更多的字符集,使用的语法是在字符串前面加上前缀u
    在python3中,所有的字符串都是unicode字符串
  7. 1
    2
    3
    4
    5
    6
    7
    import copy
    a = [1,2,3,4,['a','b']]
    b = a # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
    c = copy.copy(a) # 浅复制,只会拷贝父对象,不会拷贝父对象中子对象,所以若a的子对象变则c变,但是父对象变c不会变
    d = copy.deepcopy(a) # 深拷贝,完全拷贝,完全独立于原对象,a变也不变
    a.append(5)
    a[4].append('c')

结果

1
2
3
4
a == [1,2,3,4,['a','b','c'],5]
b == [1,2,3,4,['a','b','c'],5]
c == [1,2,3,4,['a','b''c']]
d == [1,2,3,4,['a','b']]

  1. python2支持数字和字符串之间的比较,而python3不支持
    tuple的比较是从两者的第一个元素的ASCII码开始,直至两个元素不相等为止,若前面元素都相等,则元素个数多的tuple较大

    (1,9)<(2,3) # True
    (8,9)<(1,2,3) # False
    (1,2,3)==(1,2,3) # True
    (3,2)<(‘a’,’b’) # python2:True python3:False

  2. python中浮点数的运算存在误差,例:1.2-1.0=0.1999999999999996
  3. name这个系统变量显示了当前模块执行过程中的名称,如果当前程序运行在这个模块中,则为这个模块的名称
    main一般作为函数的入口,类似与C语言,尤其在大型工程中,常常有ifname==”main“来表明整个工程开始运行的入口
    参考链接:https://blog.csdn.net/iamoldpan/article/details/78077983
  4. 1
    2
    a = map(lambda x:x**3,[1,2,3])
    list(a)

结果:
[1,8,27]
map()接收两个参数,一个是功能函数f,一个list,并将f依次作用在list的每个元素上,并返回一个新的list,a**b表示a的b次方

  1. 线程由操作系统控制,协程由程序自身控制
    参考链接:https://www.cnblogs.com/lxmhhy/p/6041001.html
  2. 当tuple(元组)只含一个元素时,需要在元素后加上逗号。因为()优先级高,被认为是执行算术运算

    (1):不是元组的定义方式
    (1,):元组的定义方式

  3. [i**i for i in xrange(3)]
    结果:
    [1,1,4]
    xrange()函数用法与range完全相同,所不同的是xrange返回一个生成器,而range返回list
  4. new是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法
    init是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值
    newinit之前被调用,new的返回值(实例)将传递给init方法的第一个参数,然后init给这个实例设置一些参数
    new是一个静态方法,而init是一个实例方法
    new方法会返回一个创建的实例,而init什么都不返回
    只有在new返回一个cls实例时,后面的init才能被调用
    当创建一个新实例时调用new,初始化一个实例时用init

  5. python中四种命名方式
  6. object #公用方法
  7. _object #半保护

    被看作是”protect”,意思是只有类对象和子类对象自己能访问到这些变量,在模块或类外不可以使用,不能用’from moudle import *’导入
    _object是为了避免与子类的方法名称冲突,对于该标识符描述的方法,父类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是_classname_methodname

  8. __object #全私有,全保护

    私有成员”private”,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据,不能用’form module import *’导入

  9. __object__ #内建方法,用户不要这样定义,代表特殊方法专用的标识
  10. 切片(元组与列表相同)
  11. 切片的使用形式是元组元素后跟[a:b][a:b:s],其返回值是一个新元组
  12. 元组切片元素的ab代表了元素索引s代表了步长值
  13. 元组切片,会返回索引a索引b之间的内容(包括索引a对应的内容而不包括索引b对应的内容)组成的新元组,其中新元组的每两个相邻元素的索引差值是步长值
  14. 未提供索引a则默认为0,为提供索引b则默认为元组长度(即最后一个元素索引+1),未提供步长值s则默认为1
  15. 省略元素时应注意至少有一个存在才会被认为是切片;且只有一个时会认为是a:b形式
  16. 步长值为负数时意味着新元组产生方向为从右到左
  17. 元组索引为负数代表元组从后数,-x的意思是从后数x个元素,例如-1代表了元组的最后一个元素

    a=(1,2,3,4,5,6,7,8,9)
    x=a[4:]# x=(5,6,7,8,9)
    x=a[:3]# x=(1,2,3)
    x=a[:]# x=(1,2,3,4,5,6,7,8,9)
    x=a[2:7]# x=(3,4,5,6,7)
    x=a[2:7:2]# x=(3,5,7)
    x=a[-5:]# x=(5,6,7,8,9)
    x=a[:-3]# x=(1,2,3,4,5,6)
    x=a[::-1]# x=(9,8,7,6,5,4,3,2,1)
    x=a[5:1]# x=() 默认的元组产生方式为从左到右,元组索引a在b之后会返回空元组
    x=a[5:1:-1]# x=(6,5,4,3)
    x=a[-1:-5]# x=() 新元组的产生方式只与步长值的正负有关而与索引的查询方式无关
    参考链接:https://blog.singee.me/2017/07/30/python-note-tuple/

  18. 类的继承和多态
    Python有两个判断继承的函数:isinstance()用于检查实例类型;issubclass()用于检查类继承
    参考链接:https://www.cnblogs.com/feeland/p/4419121.html
  19. 可变类型和不可变类型
    可变类型:list,dict
    不可变类型:int,string,float,tuple
    is 指地址相同
    == 指内容相同
    参考链接:https://www.jianshu.com/p/c5582e23b26c
  20. set
    要创建一个set,需要提供一个list作为输入集合
    s=set([1,2,3])
    重复元素在set中自动被过滤
    参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143167793538255adf33371774853a0ef943280573f4d000
  21. python my.py v1 v2命令运行脚本,通过from sys import argv如何获得v2的参数值

    sys.argv是传递给python脚本的命令行参数[字符串]列表
    argv[0]为该脚本自身路径,其余为命令行参数
    argv[2]

-------------本文结束感谢您的阅读-------------