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列表中

  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/zhang1422749310/p/10991042.html
Copyright © 2011-2022 走看看