zoukankan      html  css  js  c++  java
  • python

    Python

     先编译一个中间的字节码,然后再由解释器根据中间的字节码再次去解释执行

    Python解释器在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生的一组Python的字节码,然后将编译的结果交给Python虚拟机,由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。

    # -*- coding: utf-8 -*-

    python中一切皆是对象: 不论是是变量还是字面量(直接量)

    id Type Valua

    格式输出:  你想打印一个字符串加数字 直接用字符串方式来解决

    a = 'asdfasf'
    b = 123
    print(a+str(b)) #这样的代码不优雅,并且有时候忘了格式转换会出错   !!!!!只能将str(而不是“int”)连接到str  
    print('%s, %s' % (a,b))  #如果用格式输出就好多了

     

     

     pyc:

    •  持久化:提升下次的执行效率
    • import中作为工具,不经常改
    • 还可以保护源码
    • 没import不会走pyc

        手动持久化操作

     

    Python 中的变量赋值不需要类型声明。

    10**20 = 1020

    if 12>10:
        print("yes")
    else:
        print("no")

    for:

          

    # 遍历 0 到 4
    for
    i in range(5): print(i)

    while:

    a=1     
    while a<10:     
        print a    #输出1~9      
        a+=1       #python中没有++ --

     列表(List):[]

    删除列表:del list[2]

    一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

    >>>a[:-6]
    >>> [0, 1, 2, 3]
    step=1,从左往右取值,从“起点”开始一直取到end_index=-6。

    元祖(Tuple):()  类似列表,不可更改

     元组中只包含一个元素时,需要在元素后面添加逗号:a=(50,)

     元组 tuple() 函数将列表转换为元组  字典返回键的值

    字典(Dict):{}    键值

    集合(Set):{}  无序、无重、不可变

    输入:

    name=input('请输入用户名字:')

    print("a",end="a")
    print("a")
    #输出aaa
    #默认end=" "  改了就不换行了

    join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

    a=" "
    b=['a','b','c']
    print (a.join(b))    #输出 a b c

     函数

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict  

          

    加*表示接受一个tuple类型(元组)

    加**表示接受一个dict类型(字典)

    def f(**kargs):
        print(kargs)
    f(a=1, b=2)
    
    {'a': 1, 'b': 2}

    面向对象

    self代表类的实例,而非类

    类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

    方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。

    类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

    类的私有属性:__private_attrs  __(2个)      注:实例不能访问私有变量

    Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性 前面1个_后面2个__

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

    模块:一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。

    __name__

    内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。  如:python -c "import asdasd.zx"

    问题

    data = [randint(-10,10) for _ in range(10)]     #生成随机数
    d={x:randint(60,100) for x in range(1,21)} #1~20 (不包括21)

    乱七八糟

    python中for _ in range(10)与for i in range(10)有何区别?

    • 下划线表示 临时变量, 仅用一次,后面无需再用到

    isinstance() 函数来判断一个对象是否是一个已知的类型

    split() 通过指定分隔符对字符串进行切片

    正则

    . 匹配除换行符 之外的任何单字符

    d 等同于[0-9]

    w 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线

    import re
    key = r"chuxiuhong@hit.edu.cn"
    p = r"@.+?."#我想匹配到@后面一直到“.”之间的,在这里是hit
    pattern = re.compile(p)
    print( pattern.findall(key)) #['@hit.']
    import re
    key = r"<html><body><h1>hello world</h1></body></html>"#这段是你要匹配的文本
    p1 = r"(?<=<h1>).+?(?=</h1>)"#这是我们写的正则表达式规则,你现在可以不理解啥意思
    pattern1 = re.compile(p1)#我们在编译这段正则表达式
    matcher1 = re.search(pattern1,key)#在源文本中搜索符合正则表达式的部分
    print(matcher1.group(0))
    #第一个?<=表示在被匹配字符前必须得有<h1>,后面的?=表示被匹配字符后必须有</h1>
    p1 = r"(?<=<h1>).+?(?=<h1>)"

    正则表达式默认是“贪婪”的 +? 解决

    子表达式:几个字符的组合形式看做一个大的“字符”

    回溯引用

    • p1 = r"<h([1-6])>.*?</h1>"

    • 原本那个位置应该是[1-6],但是我们写的是1

    • 转义符干的活就是把特殊的字符转成一般的字符,把一般的字符转成特殊字符。

    • 普普通通的数字1被转移成什么了呢?

    • 在这里1表示第一个子表达式,也就是说,它是动态的,是随着前面第一个子表达式的匹配到的东西而变化的。

    • 比方说前面的子表达式内是[1-6],在实际字符串中找到了1,那么后面的1就是1,如果前面的子表达式在实际字符串中找到了2,那么后面的1就是2。

    python3

    取消xrange

    取消iteritems() 用 items()替换iteritems()

    items() 将字典中的所有项,以列表方式返回

     

    扩展功能

    [(x,y)for x in [1,2]for y in [3,4]]
    #[(1, 3), (1, 4), (2, 3), (2, 4)]
    M = [[x, x+1, x+2] for x in [1, 4, 7]]  
    #[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    a={x ** 2 for x in [1, 2, 2]}
    #{1, 4} for前面是输出的格式

    随机数

    import random
    random.randrange(100, 1000, 2) # 输出 100 <= number < 1000 间的偶数

     

    列表,字典,集合中根据条件筛选数据

    列表

    data = [randint(-10,10) for _ in range(10)]

    通用:迭代

    filter(lambda x:x>0,data)       #filter函数
    [x for x in data if x > 0] #列表解析 更快

    方法:

    • 迭代

    • filter函数

    • 列表解析

    字典

    键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

    字典解析:

    d={x:randint(60,100) for x in range(1,21)}
    {k:v for k,v in d.items() if v >90} #在Python 3.x 里面,iteritems()方法已经废除了

    集合

    date =  [randint(-10,10) for _ in range(10)]    #[-6, -2, 2, -8, -7, -7, -10, 1, -10, -8]
    s = set(date) #{1, 2, -10, -8, -7, -6, -2}
    {x for x in s if x % 3 == 0} #{-6}

     

    元组命名

    元组:存储空间小,访问速度快

     

    类似其他语言枚举

    #NAME=0
    #AGE=1
    #SEX=2
    #EMAIL=3

    NAME,AGE,SEX,EMAIL = range(4)
    student=('Jim','19','male','jim8721.@gmain.com')
    print(student[NAME])
    print(student[AGE])
    print(student[SEX])
    print(student[EMAIL])

     

    collections.namedtuple替代内置tuple

    from collections import namedtuple
    Student = namedtuple('Student',['name','age','sex','email'])
    s=Student('Jim','19','male','jim8721.@gmain.com')
    print(s) #Student(name='Jim', age='19', sex='male', email='jim8721.@gmain.com')
    print(s.name)   #Jim
    print(s.age) #19
    print(isinstance(s,tuple)) #True

     

    如何统计序列中元素出现的频率

    列表变为字典的形式

    from random import randint
    data=[randint(0,20) for _ in range(10)] #生成10个0~20的随机数
    print(data) #[1, 3, 7, 19, 17, 11, 14, 14, 16, 16]
    c = dict.fromkeys(data,0)
    print(c) #{1: 0, 3: 0, 7: 0, 19: 0, 17: 0, 11: 0, 14: 0, 16: 0}
    for x in data:
      c[x] += 1 #data中的数字的字典形式的键值+1(原来键值为0)
    print(c) #{1: 1, 3: 1, 7: 1, 19: 1, 17: 1, 11: 1, 14: 2, 16: 2}

    筛选字典中的值

    {k:v for k,v in c.items() if v >1}          #{14: 2, 16: 2}     字典解析
    from collections import Counter         #函数
    c2 = Counter(data)
    c2.most_common(3) #most_common 出现频度最高

    对某文章单词词频统计

    from collections import Counter
    a = open('navicat.txt').read()
    b= re.split('W+',a)
    c = Counter(b)
    d=c.most_common(3)

    字典排序

    将字典转化为元组 list(iter(d))

    d = { x:randint(60,100) for x in 'xyzabc'}
    #{'x': 79, 'y': 62, 'z': 62, 'a': 84, 'b': 83, 'c': 95}
    q=list(iter(d)) #['x', 'y', 'z', 'a', 'b', 'c']
    sorted(zip(d.values(),d.keys()))
    #[(62, 'y'), (62, 'z'), (79, 'x'), (83, 'b'), (84, 'a'), (95, 'c')]
    dprint(d) #             {'x': 89, 'y': 69, 'z': 96, 'a': 69, 'b': 92, 'c': 78}  
    d.item() #dict_items([('x', 89), ('y', 69), ('z', 96), ('a', 69), ('b', 92), ('c', 78)])
    sorted(d.items(),key=lambda x:x[1]) #将字典中的所有项,以列表方式返回,第二项做键值

    多个字典的公共键

    from random import randint,sample
    sample('abcdefg',randint(3,6)) #随机取样
    s1={x:randint(1,4) for x in sample('abcdefg',randint(3,6))}
    s2={x:randint(1,4) for x in sample('abcdefg',randint(3,6))}
    s3={x:randint(1,4) for x in sample('abcdefg',randint(3,6))}
    res = []
    for k in s1:
      if k in s2 and k in s3:
          res.append(k)
    print(res)

    Lambda

    lambda argument_list: expression

    • 匿名

    • 有输入和输出

    • 单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。

    add=lambda x, y: x+y
    print(add(1,2)) #3

    历史纪录

    from collections import deque
    history = deque([],5)
    ...
    history.append(k)
    ...
    if line == 'history':
      print(list(history))

     

    多进程

     

     

    def main():
    look_process = multiprocessing.Process(target=look)
      walk_process = multiprocessing.Process(target=walk)
      look_process.start()
      walk_process.start()
    if __name__ == '__main__':
      main()

     

    str转bytes

    b=str1.encode()

    bytes转换成str

    b.decode()

    pickle

     

    文件读写

     写

    追加

     读

    file.readline()  一行一行的读  全部后面加s  放在python列表中

  • 相关阅读:
    go test 下篇
    go test 上篇
    利用Docker Compose快速搭建本地测试环境
    phinx:php数据库迁移
    tp5 r3 一个简单的SQL语句调试实例
    TP开发小技巧
    优酷真实视频地址解析——2014年10月7日
    霍夫变换
    Google Earth影像数据破解之旅
    线程理论:(四)锁优化
  • 原文地址:https://www.cnblogs.com/zhang1422749310/p/10991042.html
Copyright © 2011-2022 走看看