zoukankan      html  css  js  c++  java
  • 我的Python之路【第一篇】:Python简介和入门

    1.搭建Python环境

    • windows下搭建python环境

    1.下载安装包

    2.Windows中Python的安装包是后缀名为msi的安装包,直接双击下一步即可

    3.Windwos环境下默认的安装路径是:C:Python27

    4.添加环境变量

    【右键计算机】-->【点击属性】--> 【高级系统设置】--> 【高级】--> 【环境变量】--> 【系统变量】--> 编辑Path变量 将;C:Python27添加到其中

      • 升级Linux下的Python版本

        1.安装gcc

    yum install gcc -y
    View Code

         2.下载Python2.7.11源码包

    wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
    View Code

         3.解压压缩包

    tar zxf Python-2.7.11.tgz
    View Code

         4.编译安装

    cd Python-2.7.11
    ./configure
    make all
    make install
    View Code

         5.查看安装

    /usr/local/bin/python2.7 -V
    View Code

         6.修改使用的Linux使用的Python版本

    mv /usr/bin/python /usr/bin/python2.6
    
    ln -s /usr/local/bin/python2.7 /usr/bin/python
    View Code

         7.防止yum执行异常,修改使用的Python版本

          将#!/usr/bin/python修改为#!/usr/bin/python2.6

    2.Python入门

    • python程序的执行过程

        读取到内存 词法-->语法分析-->交给编译器-->生成字节码(pyc文件)-->装换成机器码.

        注:python,java,c#这些编程语言需要先生成字节码,再转换成机器可以识别的机器码。C语言则可以直接生成机器码,这就是为什么C语言的速度比较快,但是python,java,c#这些编程语言都是通过虚拟机回收内存,而C语言则需要程序员手工回收。

     

    • 编码问题
    1. python默认按照 ascill 码编码的,使用1个字节表示字符,即8位,最多只能表示2**8个字符,主要是针对西方语言的,不包含中文。所以再不声明编码字符集的情况下就会造成中文字符被输出为乱码。 
    2. Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。注:此处说的的是最少2个字节,可能更多
    3. 3.UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...。
    4. 4.utf-8节省空间,还能表示中文,所以在py文件中规定编码字符集为utf-8,声明方法有以下两种,推荐使用第一种。
    # -*- coding:utf-8 -*-
    # coding:utf-8
    View Code
    • 注释

        单行注释

          # command

        多行注释

          """

            command1

            command2

            ......

          """

        特殊的注释要放在文件开头

          #!/usr/sbin/env python

          # -*- coding:ytf-8 -*-

    • python的模块

        python中的模块可以分为三类:

          1.python自带的,如os,sys

          2.业内开源的,一些大牛写的

          3.自己写的模块

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

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import sys
     
    print sys.argv 
    View Code

        

    • pyc文件

        在导入自己写的模块的时候会生成一个python 的字节码  .pyc文件 ,python解释器可以识别这种文件。

    # -*- coding:utf-8 -*-
    
    import m
    
    print "hello"
    View Code

         

        代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。 

        如果把m.py删除之后first.py还能执行吗?答案是可以的,python解释器会根据m.py再次生成pyc文件。

        m.py和m.pyc哪个文件的优先级高。

          当m.py和m.pyc中所表示的内容是一致的,则m.pyc的优先级比较高

          当m.py和m.pyc中的内容不一致的话,m.py的优先级高,会将m.py重新编译成m.pyc

    • 变量

        变量的命名规则

    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']   不用记  使用ide编程的时候自动报错

    变量其实就是内存中的一块空间的名称,当这个变量的值改变的时候会重新分配一块内存空间。

    >>> name1="chenyao"
    >>> name2=name1
    >>> name1
    'chenyao'
    >>> name2
    'chenyao'
    >>> name1="123"
    >>> name2
    'chenyao'
    >>> name1
    '123'
    >>>
    View Code

    name1和name2指向了同一块内存空间,但是再次对name1赋值之后,就又为name1开辟了一块空间。 

      

        每一次修改都要重新分配空间,所以性能不高,之前开辟的空间将会被虚拟机回收(python,java,c#)。

      缓冲池

         一个数据(数字,字符串,字典等)在一个可控的范围之内会指向相同的内存空间,这是py的一个优化点。 但是当超出某个范围之后就需要重新开辟空间了。

      

    • 输入和输出
    #!/usr/sbin/env python
    #-*- coding:utf-8 -*-
    import getpass
    name=raw_input(">>>")
    print name
    pwd=getpass.getpass(">>>")
    print pwd
    View Code

       getpass模块使得输入的过程不可见

          

    • 流程控制
    #!/usr/sbin/env python
    #-*- conding:utf-8 -*-
    name = raw_input("login name: ")
    if name == "chenyao":
      print "login successful"
    else:
      print "login failed"
    if name == "eric":
      print "common"
    elif name == "tony":
      print "super"
    elif name == "chenyao":
      print "god"
    else:
      print "shit"
    View Code

          嵌套

    [root@muban py]# vim login3.py 
    #!/usr/sbin/env python
    # -*- coding:utf-8 -*-
    import getpass
    name = raw_input("login name: ")
    pwd = getpass.getpass("login password: ")
    if name == "chenyao":
      if pwd == "123":
        print "god"
        print "login successful"
      else:
        print "login failed"
    elif name == "eric":
      if pwd == "123":
        print "common"
        print "login successful"
      else:
        print "login failed"
    elif name == "tony":
      if pwd == "123":
        print "super"
        print "login successful"
      else:
        print "login failed"
    else:
      if pwd == "123":
        print "shit"
        print "login successful"
      else:
        print "login failed"
    View Code
    • 数据类型
    两部分:
               1.单值
                        数字
                                整型    1226
                                长整型        
                                 浮点型    3.14
                                 复数        z = a + bj
                         字符串
               2.集合
                        列表
                        元组
                        字典
                        哈希表
    在python中整型和长整型几乎没有区别,如果用户输入的数字很大python就会自动将数字存为长整型。如果比较小就会存为整型。

     整数和长整型   范围和机器的内存有关。

    布尔类型

    >>> i = 123
    >>> type(i)
    <type 'int'>
    >>> j = True
    >>> type(j)
    <type 'bool'>
    >>> j = true
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'true' is not defined
    >>> j = 'true'
    >>> type(j)
    <type 'str'>
    >>> 
    View Code
    字符串格式化
        占位符
            使用占位符去格式化字符串的时候只会开辟一次内存空间,而使用“+”去格式化字符串的时候会多次开辟空间
    >>> name = 'i am chenyao , age 18'
    >>> name
    'i am chenyao , age 18'
    >>> name = 'i am %s , age 18' % 'nuwanda'
    >>> name
    'i am nuwanda , age 18'
    >>> name = 'i am chenyao , age %d' % 18       
    >>> name
    'i am chenyao , age 18'
    >>> name = 'i am %s , age %d' %('nuwanda',18)
    >>> name
    'i am nuwanda , age 18'
    >>> name = 'i am %s , age %d'                
    >>> name %('nuwanda',18)
    'i am nuwanda , age 18'
    >>> print name
    i am %s , age %d
    >>> new_name = name %('nuwanda',18)
    >>> print new_name
    i am nuwanda , age 18
    >>> 
    View Code

      引号:

            ‘ ’      
            “ ”
            ‘’‘ ’‘’
    单引号和双引号输出的内容是一致的  三引号可以实现多行输出,不要混用
    #!/usr/sbin/env python
    # -*- coding:utf-8 -*-
    print 'chen'
    print "chen"
    print '''
    c
    h
    e
    n
    '''
    View Code

      

     列表

      列表的修改不会重新开辟内存空间

    >>> list=['tom','alex','jerry']
    >>> list
    ['tom', 'alex', 'jerry']
    >>> id(list)
    140618237799672
    >>> list1=list
    >>> list1
    ['tom', 'alex', 'jerry']
    >>> id(list1)
    140618237799672
    >>> list.append('chenyao')
    >>> list
    ['tom', 'alex', 'jerry', 'chenyao']
    >>> list1
    ['tom', 'alex', 'jerry', 'chenyao']
    >>> id(list),id(list1)
    (140618237799672, 140618237799672)
    >>> 
    View Code

      元组

      元组不可以做添加,修改,删除的操作,其他列表的所有操作元组都可以做。

     那元组作为列表的一个元素可以被修改吗?

    >>> list3=['alex',('tom',jerry),'chen']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'jerry' is not defined
    >>> list3=['alex',('tom','jerry'),'chen']
    >>> list3
    ['alex', ('tom', 'jerry'), 'chen']
    >>> list3[2]
    'chen'
    >>> list3[1]
    ('tom', 'jerry')
    >>> list3[1][0]
    'tom'
    >>> list3.append('han')
    >>> list3
    ['alex', ('tom', 'jerry'), 'chen', 'han']
    >>> list3.append(['xi','ha'])
    >>> list3                    
    ['alex', ('tom', 'jerry'), 'chen', 'han', ['xi', 'ha']]
    >>> del list3[-1][0]
    >>> list3
    ['alex', ('tom', 'jerry'), 'chen', 'han', ['ha']]
    >>> 
    View Code

     字符串,列表,元组

        共性:索引,切片,len(),包含,循环
        str: 修改要重新开辟空间,内存地址变化
        list:修改后不需要重新开辟空间,内存地址不变
        tuple:不允许修改
        

     for循环

    [root@muban py]# vim for.py
    #!/usr/sbin/env python
    # -*- coding:utf-8 -*-
    list = ['tom', 'jerry', 'jake']
    for i in list:
      print i
    for i in list:
      if i == 'jerry':
        print 'it is you,',i
        break
    View Code

     

     break,pass,continue

        break跳出整个循环,pass啥也不干,continue跳出当前循环

     while循环

        while 条件:
            print "hahha"
     
    while True:
            print "xixixi"
     
    while False:
            print ‘True’

     字典:  又称为键值对

                 字典是无序的

                特殊的for循环

    #!/usr/sbin/env python
    # -*- coding:utf-8 -*-
    person = {
            "name": "chenyao",
            "age": 18,
            "gender": "man",
    }
    print person["name"]
    print "#########################"
    for ele in person:
      print ele
    print "#########################"
    for ele1 in person.items():
      print ele1
    print "#########################"
    for k,v in person.items():               当使用for循环输出字典中的元素的时候,输出的顺序是不确定的
      print k
      print v
    print "#########################"
    print person.keys()
    print person.values()
    View Code

    执行结果是这样的

     

    运算:

    文件操作
     
        找到文件
            文件路径 e:/xx
        打开文件
            file (文件路径,[r,w,a,w+])
            open (调用的是file方法)
        操作文件
        文件关闭
     
    读文件:
           file_obj.read()     一次性全部读取文件内容到内存中
           file_obj.readlines()    一次性全部读取文件内容到内存中,并按行分割
           file_obj.xreadlines()    以迭代的方式读取文件,每一次只读一行的内同,避免一次性全部读取到内存
     
    for line in file_obj.xreadlines(): 
            print line
    等价于
    for line in file_obj: 
            print line
     
    写操作:
        file_obj.write()    一次性全部写入
        file_obj.writelines()     一行一行地写入
     
     
    关闭文件
        file_obj.close()    
     

    文件的打开方式都有哪些?

      r 䣧以只读模式打开文件

    w  以只写模式打开文件,且先把文件内容清空(truncate the file first)

    a   以添加模式打开文件,写文件的时候总是写到文件末尾,用seek也无用。打开的文件也是不能读的

    r+  以读写方式打开文件,文件可读可写,可写到文件的任何位置

    w+ 和r+不同的是,它会truncate the file first

    a+ 和r+不同的是,它只能写到文件末尾

  • 相关阅读:
    7月30日 举办专注于微服务的.NET Conf Focus
    我和ABP vNext 的故事
    Windows环境搞好的Dockerfile文件 在Linux上报错了
    [LeetCode] 955. Delete Columns to Make Sorted II 删除列使其有序之二
    [LeetCode] 954. Array of Doubled Pairs 两倍数对儿数组
    上周热点回顾(8.3-8.9)团队
    发布新版首页“外婆新家”升级版:全新的UI,熟悉的味道团队
    上周热点回顾(7.27-8.2)团队
    终于换新颜:新版网站首页发布上线团队
    上周热点回顾(7.20-7.26)团队
  • 原文地址:https://www.cnblogs.com/along1226/p/5068708.html
Copyright © 2011-2022 走看看