zoukankan      html  css  js  c++  java
  • Python之路---day1

    Python简介

    Python前世今生

    Python创始人是吉多.范罗苏姆。在1989年万圣节期间为打发时间而开发的。

    目前Python在TIOBE排行榜第五位置

    Python可以应用在众多的领域中:

    数据分析、组建集成、网络服务、图像处理、数值计算和科学计算等领域。

    Python应用的知名公司有:

    Youtube、Dropbox、BT、知乎、豆瓣、谷歌、百度、腾讯、

    汽车之家等。

    Python可以做的工作有:

    自动化运维、自动化测试、大数据分析、爬虫、Web等

    Python与其他语言的异同:

    • python是由C语言来发而来的。
    • 代码的执行:

    C语言:代码编译===》机器码===》执行

    其他语言:代码编译===》字节码===》机器码===》执行

    python也是这样,在字节码===》机器码的过程会生成一个.pyc的文件,这个文件就是机器码的文件。

    注视:python在执行过程中会先找有没有.pyc文件,然后与原py文件进行对比,如果没有变化,则直接执行.pyc文件;如果.py文件较新,则重新生产.pyc文件。然后执行。

    • 代码执行速度

      由上面代码的执行顺序,也可以看出,python的运行速度相比较C会慢。

    • 内置模版库

      Python内部会自带很多的模版库,可以直接调用。可以满足大多数的基本的需求。

    • Python的种类
    1. Cpython

      官方的版本。使用C语言实现,使用最为广泛。CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。

    2. Jyhton

      Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。

    3. IronPython

      Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。

    4. PyPy

      Python实现的Python,将Python的字节码字节码再编译成机器码。它在Python的基础上对Python的字节码进一步处理,提升了执行速度。

    Python环境

    推荐使用2.7版本的

    Windows:

    1:下载安装包

    https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi

    或者直接去官网下载你想要的版:https://www.python.org/downloads/

    2:直接安装

    默认的安装路径是:C:Python27

    3:配置环境变量

    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

    例如:;C:Python27 在最后面添加即可。

    Linux:

    1:linux都自带Python环境。推荐使用ubuntu。因为其自带比较新的版本。

    Python入门

    一:你好世界

    创建hello.py

     1 root@python:/python/day1# cat hello.py
     2 
     3 #!/usr/bin/env python #告诉系统使用python解释器
     4 
     5 #-*- coding:utf-8 -*- #设置字符集,使用UTF-8
     6 
     7 print "你好,世界"
     8 
     9 root@python:/python/day1# python hello.py #py文件的执行
    10 
    11 你好,世界
    View Code

    二:python程序的执行过程

    三:编码格式

    • ASCII:美国标准信息交换代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
    • Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,

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

    • UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。

      所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。但是3.0以后的版本默认是UTF-8。

    四:注释的方式

    • 单行注释:#
    • 多行注释:"""注释的内容"""或者是三个单引号

    五:传参

    上面已经说了,Python有大量的模块,从而使得开发很简洁,类库主要包含三种:

    1:Python内部提供的模块

    2:业内开源的模块

    3:程序员自己开发的模块

    Python内部提供一个sys的模块,其中的sys.argv就是用来捕获执行python脚本时传入的参数。

     1 root@python:/python/day1# cat hello.py
     2 
     3 #!/usr/bin/env python
     4 
     5 #-*- coding:utf-8 -*-
     6 
     7 import sys                                          #导入sys模块
     8 
     9 print sys.argv                                          #使用argv
    10 
    11 root@python:/python/day1# python hello.py user_argv             #文件名后面是参数
    12 
    13 ['hello.py', 'user_argv']
    View Code

    六:变量

    1:声明变量

    1 #!/usr/bin/env python
    2 
    3 #-*- coding:utf-8 -*-
    4 
    5 name = "曹小贱"
    View Code

    变量的名:name 变量的值:"曹小贱"

    变量的作用:昵称,代指内存里某个地址中保存的内容。

    变量定义的规则:

    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']

    2:变量的赋值

    七:输入

     1 root@python:/python/day1# cat hello.py
     2 
     3 #!/usr/bin/env python
     4 
     5 #-*- coding:utf-8 -*-
     6 
     7 #将用户输入的内容赋值给name变量
     8 
     9 name = raw_input("请输入用户名:")
    10 
    11 #打印输入的内容
    12 
    13 print name
    14 
    15 root@python:/python/day1# python hello.py
    16 
    17 请输入用户名:曹高田
    18 
    19 曹高田
    20 
    21 输入密码时,如果想要不可见,需要利用getpass方法即可:
    22 
    23 #!/usr/bin/env python
    24 
    25 #-*- coding:utf-8 -*-
    26 
    27 #首先导入getpass模块
    28 
    29 import getpass
    30 
    31 #设置隐藏密码
    32 
    33 pwd = getpass.getpass("请输入密码:")
    34 
    35 print pwd
    36 
    37 root@python:/python/day1# python hello.py
    38 
    39 请输入密码:
    40 
    41 can not look
    View Code

    八:流程控制和缩进

    需求一:用户登录验证

     1 #!/usr/bin/env python
     2 
     3 #coding:utf-8
     4 
     5 import getpass
     6 
     7 name = raw_input("请输入用户名:")
     8 
     9 pwd = getpass.getpass("请输入密码:")
    10 
    11 if name == "曹小贱" and pwd == "123456":
    12 
    13 print "欢迎,曹小贱"
    14 
    15 else:
    16 
    17 print "大哥,你走错门了吧"
    18 
    19 执行:
    20 
    21 root@python:/python/day1# python 1.py
    22 
    23 请输入用户名:cao
    24 
    25 请输入密码:
    26 
    27 大哥,你走错门了吧
    28 
    29 root@python:/python/day1# python 1.py
    30 
    31 请输入用户名:曹小贱
    32 
    33 请输入密码:
    34 
    35 欢迎,曹小贱
    View Code

    需求二:根据用户输入内容输出其权限

     1 #!/usr/bin/env python
     2 
     3 #coding:utf-8
     4 
     5 import getpass
     6 
     7 name = raw_input('请输入用户名:')
     8 
     9 pwd = getpass.getpass('这是隐藏的密码:')
    10 
    11 if name == 'eric' and pwd == '123':
    12 
    13 print '普通'
    14 
    15 elif name == 'tony' and pwd == '123':
    16 
    17 print '超级'
    18 
    19 elif name == 'alex' and pwd == '123':
    20 
    21 print '超神'
    22 
    23 else:
    24 
    25 print '登录失败'
    View Code

    注释:外层变量可以被内存变量调用,反之不行。

    九:Python的基本类型

    1:数字

    int(整型)

      在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

      在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

    long(长整型)

      跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

      注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

    float(浮点型)

      浮点数用来处理实数,即带有小数的数字。

    complex(复数)

      复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

    注:Python中存在小数字池:-5 ~ 257

    2:布尔值(bool)

    True False

    真或假

    1 或0

    3:字符串

    "Hello World"

    万恶的字符串拼接:

    python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

    字符串格式化

    >>> name = "曹小贱"

    >>> print "i am %s " % name

    i am 曹小贱

    注释:字符串是%s;整数%d;浮点数%f

    字符串的常用功能:

    移除空白

    strip

    lstrip

    rstrip

    >>> name = " alex "

    >>> import tab

    >>> print name.strip()

    alex

    >>> print name.lstrip()

    alex

    >>> print name.rstrip()

    alex

    分割

    >>> name = "a;b;c;d"

    >>> name1 = name.split(';')

    >>> name1

    ['a', 'b', 'c', 'd']

    长度

    >>> name

    'a;b;c;d'

    >>> len(name)

    7

    >>> name[len(name)-1]

    'd'

    索引

    >>> name

    'a;b;c;d'

    >>> name[1]

    ';'

    >>> name[2]

    'b'

    切片

    >>> name = "alexd"

    >>> name[0]

    'a'

    >>> name[0]

    'a'

    >>> name[1:2]

    'l'

    >>> name[1:4]

    'lex'

    >>> name[3:4]

    'x'

    >>> name[-3:]

    'exd'

    >>> name[0:]

    'alexd'

    4:列表

    创建(第一种方式最终要调用第二种方式)

    >>> name = ['ccc','ggg','ttt']

    >>> name

    ['ccc', 'ggg', 'ttt']

    >>> name = list(['ccc','ggg','ttt'])

    >>> name

    ['ccc', 'ggg', 'ttt']

    索引

    >>> name[1]

    'ggg'

    切片

    >>> name[1:3]

    ['ggg', 'ttt']

    追加

    >>> name.append('sss')

    >>> name

    ['ccc', 'ggg', 'ttt', 'sss']

    删除

    >>> name

    ['ccc', 'ggg', 'ttt', 'sss']

    >>> del name[2]

    >>> name

    ['ccc', 'ggg', 'sss']

    长度

    >>> name

    ['ccc', 'ggg', 'sss']

    >>> len(name)

    3

    循环

    #!/usr/bin/env python

    #coding:utf-8

    name = ['ccc','ggg','ttt']

    for i in name:

    if i == "ccc":

    print "找到了"

    break

    包含

    >>> name

    ['ccc', 'ggg', 'sss']

    >>> 'ccc' in name

    True

    >>> 'cgt' in name

    False

    5:元组(tuple)

    创建元组

    >>> name = ('ccc','ggg','ttt')

    >>> name

    ('ccc', 'ggg', 'ttt')

    >>> name1 = tuple(('aaa','bbb','ccc'))

    >>> name1

    ('aaa', 'bbb', 'ccc')

    上面的name的方式最终还是要调用下面的方式。

    索引

    >>> name1

    ('aaa', 'bbb', 'ccc')

    >>> name1[2]

    'ccc'

    切片

    >>> name1

    ('aaa', 'bbb', 'ccc')

    >>> name[1:2]

    ('ggg',)

    解释:顾头不顾尾

    循环

    #!/usr/bin/env python

    #coding:utf-8

    name = ('aaa', 'bbb', 'ccc')

    for i in name:

    if i == "ccc":

    print "找到了"

    break

    包含

    >>> name1

    ('aaa', 'bbb', 'ccc')

    >>> 'bbb' in name1

    True

    >>> 'abc' in name1

    False

    6:字典(无序)

    创建字典

    >>> menu = {'name':'cgt','age':24,'job':'IT'}

    >>> menu

    {'job': 'IT', 'age': 24, 'name': 'cgt'}

    >>> menu1 = {'name':'cgt1','age':2424,'job':'IT'}

    >>> menu1

    {'job': 'IT', 'age': 2424, 'name': 'cgt1'}

    索引

    >>> menu

    {'job': 'IT', 'age': 24, 'name': 'cgt'}

    >>> menu[1] #字典是一种键值对的方式,不能使用下标来获取,通过键值。原因是它是无序的

    Traceback (most recent call last):

    File "<stdin>", line 1, in <module>

    KeyError: 1

    >>> menu['name']

    'cgt'

    新增

    >>> menu['salary']=400000

    >>> menu

    {'job': 'IT', 'salary': 400000, 'age': 24, 'name': 'cgt'} #从这里也可以体现出他的无序

    修改

    >>> menu['salary']=400000

    >>> menu

    {'job': 'IT', 'salary': 400000, 'age': 24, 'name': 'cgt'}

    >>> menu['salary']=1 #可以直接重新定义变量的值,进行修改

    >>> menu

    {'job': 'IT', 'salary': 1, 'age': 24, 'name': 'cgt'}

    删除

    >>> menu

    {'job': 'IT', 'salary': 1, 'age': 24, 'name': 'cgt'}

    >>> del menu['salary']

    >>> menu

    {'job': 'IT', 'age': 24, 'name': 'cgt'}

    #通过pop来删除键,它的不同之处是再删除的同时,显示出值

    >>> menu

    {'job': 'IT', 'age': 24, 'name': 'cgt'}

    >>> menu.pop('name')

    'cgt'

    >>> menu

    {'job': 'IT', 'age': 24}

    #清除所有的键

    >>> menu1

    {'job': 'IT', 'age': 2424, 'name': 'cgt1'}

    >>> menu1.clear()

    >>> menu1

    {}

    循环

    #!/usr/bin/env python

    #coding:utf-8

    menu = {

    'name':'曹小贱',

    'age':24,

    'job':'IT'

    }

    #开始遍历循环

    for key in menu:

    print key,'对应的值',menu[key]

    结果: #这里呈现的结果打印出来也是无序的

    job 对应的值 IT

    age 对应的值 24

    name 对应的值 曹小贱

    #####################################################

    #!/usr/bin/env python

    #coding:utf-8

    menu = {

    'name':'曹小贱',

    'age':24,

    'job':'IT'

    }

    #开始遍历循环

    for key,value in menu.items():

    print key,'对应的值',value

    结果:

    job 对应的值 IT

    age 对应的值 24

    name 对应的值 曹小贱

    PS:循环,range,continue 和 break

    range在什么范围内

    continue跳出本次循环,继续执行下次循环

    break终止循环

    长度

    len(menu)

    十:运算

    运算符

    描述

    实例

    算术运算

    两个对象相加

    10+19输出结果29

    _

    得到负数;两个对象相减

    10-19输出结果-9

    *

    两个数相乘,

    10*19输出结果190

    /

    两个数相除

    10/2输出结果5

    %

    取模-返回除法的余数

    10%3输出结果1

    **

    2**2输出结果4

    //

    取整除返回商的整数部分

    9//2输出结果4

    比较运算

    ==

    等于

    (a==b)返回false

    !=

    不等于

    (a != b)返回true

    <>

    不等于

    (a <> b)返回false

    >

    大于

    (a > b)返回false

    <

    小于

    (a < b)返回true

    >= 

    大于等于

    (a >= b)返回false

    <= 

    小于等于

    (a <= b)返回true

    赋值运算

    =

    简单的赋值运算符

    c = a + b将a+b的运算结果赋值给c

    +=

    加法赋值运算

    c+=a等效于c=c+a

    -=

    减法赋值运算

    c-=a等效于c=c-a

    /=

    除法赋值运算

    c/=a等效于c=c/a

    %=

    取模赋值运算

    c%=a等效于c=c%a

    *=

    乘法赋值运算

    c*=a等效于c=c*a

    **=

    幂赋值运算

    c**=a等效于c=c**a

    //=

    取整赋值运算

    c//a等效于c=c//a

    逻辑运算

    and

    布尔"与"如果x为False,x and y 返回false,否则返回y的值

    (a and b)返回true

    or

    布尔"或"如果x为True,,则返回True。否则返回y大的值

    (a or b)返回true

    not

    布尔"非",x为true,返回false

    not (a and b)返回false

    成员运算

    in

    如果在指定的序列内找到值,则返回True.

    x在y的序列中,返回True

    not in

    如果在指定的序列内没找到值,则返回True.

    x不在y的序列中,返回True

    身份运算

    is

    is 是判断两个标识符是不是引用自一个对象

    x is y,如果id(x)=id(y) is返回结果1

    is not

    is not 是判断两个标识符是不是引用来自不同的对象

    x is not y 如果id(x)!=id(y)返回结果1

    位运算

    &

    按位与运算

    (a&b)输出结果12.二进制解释:0000 1100

    |

    按位或运算

    (a|b)输出结果61二进制解释:0011 1101

    ^

    按位异或运算

    (a^b)输出结果49 二进制解释:0011 0001

    -

    按位取反

    (-a)输出结果-61 二进制解释:1100 0011

    <<

    左移动运算

    a<<2输出结果240二进制解释:1111 0000

    >>

    右移动运算

    a>>2输出结果15二进制解释:0000 1111

     1 #!/usr/bin/env python
     2 
     3 #coding:utf-8
     4 
     5 import getpass
     6 
     7 name = raw_input('请输入用户名:')
     8 
     9 pwd = getpass.getpass('这是隐藏的密码:')
    10 
    11 if name == 'eric' and pwd == '123':
    12 
    13 print '普通'
    14 
    15 elif name == 'tony' and pwd == '123':
    16 
    17 print '超级'
    18 
    19 elif name == 'alex' and pwd == '123':
    20 
    21 print '超神'
    22 
    23 else:
    24 
    25 print '登录失败'
    View Code

    运算符优先级

    运算符

    描述

    **

    指数(最高优先级)

    ~+-

    按位翻转,一元加号和减号(最后两个方法名为:+@和-@)

    */%//

    乘除取模取整除

    + -

    加法减法

     

    左移右移

    &

    位 'AND'

    ^ |

    位运算

    <= <> >=s

    比较运算符

    <> == !=

    等于运算符

    = %= /= //= -= += *= **=

    赋值运算符

    is is not

    身份运算符

    in not in

    成员运算符

    not or and

    逻辑运算符

    十一:对文件的基本操作

    file = file("文件路径名称","模式")

    f = file('文件名','模式') 打开一个文件,
    f = open('文件名','模式') 打开一个文件,
    f.read():是以字符串的形式读取出来
    f.readline():是以列表的形式
    f.name获取文件的名字
    f.realines():全部一次性读取到内存中出来
    f.xrealines():全部读取到内存中出来,但是一行一行的读取
    f.flush():将内存中的内容刷到硬盘文件中
    f.close():关闭文件.
    f.write():写入
    f.seek(0): 回到文件开头
    f.mode:文件打开的模式,读写等
    f.truncate():加数字 截取多少字节

    文件打开的模式

    w 以写方式打开,

    a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)

    r+ 以读写模式打开(一般使用r+)

    w+ 以读写模式打开 (参见 w )

    a+ 以读写模式打开 (参见 a )

    rb 以二进制读模式打开

    wb 以二进制写模式打开 (参见 w )

    ab 以二进制追加模式打开 (参见 a )

    rb+ 以二进制读写模式打开 (参见 r+ )

    wb+ 以二进制读写模式打开 (参见 w+ )

    ab+ 以二进制读写模式打开 (参见 a+ )

     

     

     

     

     

     

     

     

    作者:曹小贱
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
    使用逆波兰式进行表达式求值
    [moses笔记]编译含有nplm的moses解码器
    菲波那契数列编程实现
    引领网页设计潮流的优秀网页作品赏析
    MFC中获取各个窗口之间的句柄或者指针对象的方法
    UVALive 6529 Eleven 区间dp
    jquery 实现菜单的下拉菜单
    数字图像和视频处理的基础-第4周运动预计matlab练习题
    setjmp与longjmp
  • 原文地址:https://www.cnblogs.com/caoxiaojian/p/4911460.html
Copyright © 2011-2022 走看看