zoukankan      html  css  js  c++  java
  • python基础1

    一 python与C的区别

      c--代码编译直接得到机器码,机器码直接在处理器执行

      Python--代码编译得到字节码,虚拟机直接执行字节码并转换成机器码,然后再次在处理器上执行
      优点:Python类库多而且十分简洁
      缺点:运行慢
    二 Python种类:
      1.Cpython--用C实现的python,将python编成python字节码(使用最广泛)
      2.Jpython--用java实现的python,拿到python的源码后编译成java的字节码,然后再来执行
      3.Rubypython---用ruby实现的python
      4.PyPy---使用Python实现的Python,将python的字节码进行处理,执行起来更快
    三 安装Python
      1.windows环境下
        1.下载包:https://www.python.org/downloads/
        2.安装,C:\python27/
        3.环境变量的配置
      2.Linux环境下
        1.python内部执行过程:加载内存-->词法分析--语法分析---编译--字节码

    四 编码(ASSII码、Unicode、UTF-8)
      1.ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
    是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
      2.Unicode(统一码、万国码、单一码)
    是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,至少2个字节16位
    特点:能表示中文,但是不能读到硬盘上
      3.UTF-8,
    是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
    特点:节省了硬盘空间,所有的英文采用1个字节即8位存,中文就用3个字节即24位存,避免了空间的浪费

    注:此处说的的是最少2个字节,可能更多

    五 python集体实践
    1.
    #!/usr/bin/env python

    print "你好,世界"

    报错:ascii码无法表示中文

    改正:应该显示的告诉python解释器,用什么编码来执行源代码,

    注释:
    1.单行注释
    #

    2.多行注释(用三个引号进行多行注释)
    """
    ......
    """
    参数

    模块
    1.sys模块(系统内置模块)---sys.argv捕获执行python脚本传入的参数
    eg:

    #vim hello.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import sys #导入模块
    
    print sys.argv #调用模块,捕获并打印解释器后面跟的参数
    

      

    执行:
    [root@localhost ~]# python test.py haha
    ['test.py', 'haha'] #两个参数,存储在一个容器当中然后被打印出来

    字节码:

    2.自定义模块
    #vim m.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    print "hello"

    #vim hello.py

    ..............
    import sys #导入模块
    print sys.argv #调用模块,捕获并打印解释器后面跟的参数
    
    import m #导入m模块,使用m里面的功能

    执行后# python hello.py,会生成m的.pyc字节码文件(m.pyc),即编译m.py后生成的文件

    变量:其实就是:指向、引用、软链接--代指内存里某个地址保存的内容,其实就是某个地址内的内容的快捷方式
    1.声明变量、变量赋值
    变量名 = "字符串"

    2.变量命名的规则:
    1.变量名只能是字母、数字或下划线的任意组合
    2.变量名的第一个字符不能是数字
    3.以下关键字不能声明为变量名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']


    eg:当两个不同的变量name1、name2指向同一个内存地址时,修改一个变量name1,则另外一个变量name2不会改变

    >>> name1="hello"
    >>> name2=name1
    当修改name1时,name2的值不会改变
    >>> name1="123"
    >>> name1
    '123'
    >>> name2
    'hello'

    注意:C语言没有字符串,只有字符,所以C语言的字符串通过连续的字符数组实现
    python里的字符串,在C语言里面是通过字符数组['h','e','l','l','o']来保存的,当修改字符串的时候,python就会重新开辟、创建一个字符数组,而不是在原来的基础上添加。

    如:"hello"+"world"+"ok",就开辟了3段内存空间:
    1."hello"
    2."hello world"
    3."hello world ok"
    新开辟的3段内存,最终会由python的虚拟机垃圾回收器自动回收,而不会造成内存泄露。C语言要手动释放。
    python默认的缓冲池:-5 - 257,
    输入输出:
    1.raw_input() :输入函数
    eg:
    raw_input("请输入内容:")
    eg:赋值
    name=raw_input("请输入内容:")

    模块:
    2.getpass 模块:让用户输入的内容不可见(一般写用户登录界面书写密码使用)
    eg:
    import getpass

    pwd=getpass.getpass(">>>")
    print pwd

    流程控制:
    1.if else语句
    eg:单条件的流程控制

    name = raw_input("请输入用户名:")
    
    if name == "alex" : #值与值进行对比,而不是内存地址对比,采用"=="
    print "log in success"
    elseprint "log in failed"

    注意:
    ==是比较两个变量的值相同
    is是比较两个变量在内存中的地址相同

    eg:多条件的流程控制

    if name == "eric" :
    print "普通"
    elif name == "tony" :
    print "超级"
    elif name == "alex" :
    print "超神"
    else:
    print "*****"

    eg:

    import getpass
    
    name = raw_input("请输入用户名")
    pwd = getpass.getpass("请输入密码:")
    
    if name == "alex" and pwd =="123":
    print "登录成功"
    else:
    print "登录失败"

    数据类型:
    1.单值
    数字
    整型、长整型、浮点型、复数
    字符串
    占位符:%s,%d
    eg:%s占位符,调用---%'alex'
    >>> name="i am %s" %'tanjie'
    >>> print name
    i am tanjie
    eg:%d占位符,调用---%("alex",12)

    字符串格式化的2种格式:

    >>> message="i am %s ,age %d" %("tanjie",21) #只在内存里面分配1次,而+要分配2次
    >>> print message
    i am tanjie ,age 21


    >>> name = "i am %s,age %d"
    >>> name %("alex",21)
    'i am alex,age 21'

    >>> message = "i am {0},age {1}"
    >>> message.format("tanjie",21)
    'i am tanjie,age 21'

    eg:打印多行
    print """
    a
    b
    c
    d

    """
    eg:字符串切片
    name = "alex"
    print name[0] #打印第一个字符
    print name[0:2] #只打印小于第二个的字符(左边包含,右边不包含)
    print name[0:] #打印到结尾的字符串
    print name[-1] #打印最后一个字符
    print name[:-1] #打印开头到倒数第二个字符(左边包含,右边不包含)

    eg:打印最后一位字符
    name = "tanjie"
    print len(name) #返回name的长度
    print name[len(name)-1] #打印最后一位的字符

    eg:去除字符串两头的空格
    >>> name=" tanjie "
    >>> name.strip() #去除两头的空格
    'tanjie'
    >>> name.lstrip() #去除左边的空格
    'tanjie '
    >>> name.rstrip() #去除右边的空格
    ' tanjie'

    eg:字符串分割,并以列表的形式返回
    >>> name="tanjie,wangning"
    >>> name.split(",")
    ['tanjie', 'wangning'] #表示按","对name字符串进行分割
    若要按tab键分割,使用:name.split('\t');
    若要按空格分割,使用:name.split(' ');

    布尔值:True / False

    1.type(TYPE) 查TYPE的类型
    2.id(VALUE) 查看VALUE的地址


    2.集合

    列表
    创建列表:
    >>> name_list=['tanjie','wangning','lilin']

    name_list=list(['tanjie','wangning','lilin'])
    调用:
    name_list[0]
    name_list[1]
    name_list[-1]
    追加:修改、追加列表元素,列表在内存中的地址不会改变的
    >>> name_list.append("tanqi")
    删除:
    del name_list[0] #删除列表中的第一个元素
    列表长度:
    len(name_list)
    将列表变成字符串,并以_隔开,返回改变后的字符串
    "_".join(name_list)
    eg:
    >>> " ".join(name_list)
    'tanjie wangning lilin'
    >>> "".join(name_list)
    'tanjiewangninglilin'
    >>> "-".join(name_list)
    'tanjie-wangning-lilin'
    判断某元素是否在列表里面,返回布尔值
    "tanjie" in name_list
    eg:
    >>> "tanjie" in name_list
    True

    元组---元组不可修改,列表可修改
    创建元组
    tuple=("tanjie","lilin")
    若列表中有元组:
    [
    "lilin",("tanjie","tanqi")
    ]
    这里可以直接删除"lilin"和("tanjie","tanqi"),但不可以对元组("tanjie","tanqi")进行修改

    字典---也称为键值对
    创建字典
    eg:
    >>> person={
    ... "name":'tanjie',
    ... "age":21,
    ... "gender":'man'
    ... }
    查找字典里面的元素:
    eg:
    person["name"]

    字典内循环:
    1.
    eg:

    for ele in person :
    print ele #打印的ele只是字典里面的键key

    2.person.items()的使用----获取到所有的元素
    eg:

    for k,v in person.items(): #将字典里面的键赋值给key,值赋值给v
    print k
    print v
    print "======"
    

      


    3.person.keys()--获取到字典内的所有的key,用列表封装
    使用同person.items()
    4.person.values() ---获取到字典内所有的value,使用列表封装
    使用同person.items()

    str、list、tuple
    共同点:
    1.都可以切片
    2.都有索引(特殊的:-1)
    3.都有长度:len()
    4.循环
    1.for循环
    eg:。打印的是列表中的所有元素

    name_list = ["alex","seven","eric"]
    for ele in name_list :
    print ele

    eg:break的使用

    name_list = ["alex","seven","eric"]
    for ele in name_list :
    if ele == "alex":
    print "%s is here" %(ele)
    break #找到后跳出整个循环
    else:
    pass #pass表示:略过,不执行

    eg:continue的使用

    name_list = ["alex","seven","eric"]
    for ele in name_list :
    if ele == "alex":
    print "%s is here" %(ele)
    continue #跳过本次循环,不执行下面的代码,进入下一次循环
    if else == "eric"
    print "%s is here" %(ele)
    else:
    pass #pass表示:略过,不执行

    2.while循环
    while 条件 : #若条件为真执行...
    ....
    while True: #死循环
    ....
    while 1==1: #死循环
    ....

    eg:


    不同点:
    str修改后,str会在内存中重新开辟空间,内存地址改变
    而list修改后内存地址不会改变,tuple不能修改
    运算:
    >>> 5/2
    2
    >>> 5%2
    1
    >>> 2**10
    1024
    >>> 5.0/2
    2.5

    文本操作(读、写):
    流程:找到文件---打开文件---文件操作--关闭文件

    1.找到文件:

    2.打开文件:
    file(参数1,参数2) 参数1:文件路径;参数2:模式

    模式有:
    1.r,以只读模式打开
    2.w,打开文件,只用于写入。eg:'r+':可读、可写;
    3.a,打开一个文件,用于追加
    eg:
    file_obj = file(文件路径,'r+')
    file_obj.read() #将所有内容读入内存
    file_obj.readlines() #得到以行为值的列表
    file_obj.xreadlines()
    eg:
    for line in file_obj.xreadlines():
    print line

    for line in file_obj: #每次循环只读一行,避免一次性全部读入内存
    print line
    file_obj.write()
    file_obj.writeline()


    3.文件操作:

    4.文件关闭

    file_obj.closed()



  • 相关阅读:
    【ybtoj】【kmp】公共子串
    【ybtoj】【Hash】最大分离度
    【哈希表模板(链前版本)】【ybtoj】【特殊序列】
    【ybtoj】【单调队列】出题方案
    【ybtoj】【单调队列】写博客
    【ybtoj】【线段树】魔法传输
    【ybtoj】【单调队列入门专题】
    OS:3-存储管理
    OS:2-处理器管理
    OS:1-操作系统概观
  • 原文地址:https://www.cnblogs.com/jachy/p/4925128.html
Copyright © 2011-2022 走看看