• 【Python之路Day1】基础篇


    内容简要:

    1. python简介
    2. Python能做什么
    3. Python性能优化工具
    4. Python执行过程
    5. Python解释器/种类
    6. Python基本编程风格
    7. 变量
    8. 内嵌保留字
    9. 安装Python
    10. Hello World
    11. Print输出格式
    12. Python数据类型
    13. 常用内置函数
    14. 常用数学运算
    15. 比较运算
    16. Python模块
    17. 控制流

    一. Python简介

    Python(发音:/ˈpaɪθɑːn/),是一种面向对象、直译式的计算机程序语言,具有近二十年的发展历史。它包含了一组功能完备的标准库,能够轻松完成很多常见的任务。它的语法简单,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。官方站点:https://www.python.org/ 

    二. Python能做什么?

    Python是一门综合性的语言,几乎能用python在计算机上做任何事情,下面列举几个最广泛的方面:

        1. 网络应用:Web站点(DjangoTornadoFlash等框架)、服务器后台服务(Twisted网络服务框架 )以及牛13的eventlet异步通信框架等;

        2. 科学运算:随着NumPy、matplotlib、ETS等众多程序库的开发,Python越来越适合于做科学运算;

        3. GUI程序:包括PyQt、WxPython,自带的有Tkinter等;

        4. 系统管理工具:可以用python轻松的开发一些自动化运维、监控的工具,当下比较流行的诸多开源软件好多都是用python开发的,如自动话配置工具SaltStack、Ansible,私有云解决方案Openstack等;

      5. 其他实现:爬虫、游戏后台等等,总之很牛逼。。。

    三. Python的性能优化工具:
        Psyco:Python语言的扩展模块,即时对程序代码进行算法优化,可以一定程度上提高程序执行速度,尤其是程序中有大量循环时,现在已经停止维护;
        
        Shed Skin,Python编译器,能够将Python代码转换成优化的C++代码;

    四. Python 执行过程:

    source code --> Complier ---> bytecode --> PVM Interpreter ---> processor
    .py                  .pyc

    五. Python解释器/种类

    CPython,原始、标准官方的实现方式,用C语言开发,
    Jython,用于和Java语言集成的实现,把Python代码直接编译成java字节码执行;
    IPython,基于CPython之上的一个交互解释器,交互上非常直观,但是执行代码功能和CPython完全一样;
    IronPython,用于和.NET框架集成的实现,可以直接把python代码编译成.Net的字节码
    PyPy,使用python语言实现的Python解释器,是动态编译器,是Psyco的后继项目;可运行在Linux的32、64位、MacOSX和Windows的32位平台上

    六. Python的基本编程风格:

      注释,第一行开始 

    #!/usr/bin/env python 

      文档

        通过__doc__,可以查看的帮助信息,如print(id.__doc__),可以获取id内嵌函数的帮助信息;

      缩进

        建议:统一缩进四个空格

         标识符名称

        见名知意

    $ vim first.py
    #!/usr/bin/env python 
    
    "This is a test scripts"
    
    print('hello world')
    print('bye!')

    cnfol@ubuntu:~$ python 
    Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import first
    hello world
    bye!
    >>> print(first.__doc__)
    This is a test scripts

    七. 变量:

      1. 单一下划线开始的变量名(_x)不会被“from module import *”导入

      2. 前后都有下划线的变量名(__x__)是系统变量,对python解释器有特殊意义;

      如:  

    __name__  调用当前模块的名称,或者理解为导入了当前模块的名称
    __main__  如果模块是自己执行的,默认就是__main__

    每个模块都有一个名为__name__的内建变量,此变量的值会根据调用此模块的方式发生变化

    如果此文件被作为模块导入,则__name__的值为模块名称;
    如果此文件被直接执行,则__name__的值为”__main__“

      3. 两个下划线开头,但是结尾没有下划线的变量(__x)是类的本地变量;

      4. 交互模式下,只有单个下划线的变量名(_x)用于保存最后表达式的结果;

    Python中的内嵌保留字(Python3)

    False class finally is return None continue for 
    lambda try True from nonlocal while and del 
    global not with as elif if or yield
    assert else import pass 
    break except in raise

    八. 实例、类、方法:

    Python程序中保存的所有数据都是围绕“对象”展开的:

    程序中存储的所有数据都是对象
    每个对象都有一个身份(id)、一个类型(type)和一个值()

    >>> name = 'daniel'
    >>> id(name)
    23051200
    >>> type(name)
    <class 'str'>
    >>> name
    'daniel'

    对象的类型也称为对象的类别,用于描述对象的内部表示及它支持的方法和操作;
    创建特定类型的对象时,有时也将该对象成为该类型的实例
    实例被创建后,其身份和类型就不可改变
    对象值可变,为可变对象
    不可修改,为不可变对象
    如果某个对象包含对其他对象的引用,则成为容器,如列表
    大多数对象都拥有大量特有的数据属性和方法
    属性:与对象相关的值,可以直接获取,如用print
    方法:被调用时将在对象上执行某些操作的函数,调用使用()运算符;
    使用点(.)运算符可以访问属性和方法;
    访问属性:
       >>> print num.real
    访问方法:
       >>> num.real()

          class:自定义类型时使用
          type:内置的类型,和class指的是一个意思
          instance:实例,任何对象都是有类实例化而来的

    每一种对象都是由其类生成的。
    类,由数据和操作这片数据的函数组成,对类中的这片函数称为方法;
    用类实例出一个对象时,类本身只是描述了一种抽象属性,只有把这种抽象属性实例出来才叫做对象;
    对象本身只包含了数据,方法是属于类的;

    在python中一切皆对象,对象其实就是"类"实例化而来的,有的是内置类,用户也可以自定义类;

    九. 安装Python:

    *nix平台上系统自带python,windows平台直接去Python官网https://www.python.org/ 下载相对应平台的版本,然后按照安装向导完成安装即可,此处选择Python3.5.1,安装过程略...

    IDE:

      推荐使用Pycharm,可以从官方站点下载对应的版本安装即可,Pycharm有社区版(免费)和专业版,官方站点:https://www.jetbrains.com/pycharm/

    十. Hello World:

    >python
    Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print('hello world')
    hello world
    >>>

    在Linux平台下(Python3.5)创建一个Python脚本:

       1. $ vim first.py    # python脚本以.py结尾,不是必须,但是理应遵循的一个命令规范,看文件后缀就能知道是个Python程序

     2. 输入代码:

    #!/usr/bin/env python       
    
    print('hello world')       

       第一行#!/usr/bin/env python,声明脚本调用的解释器类型;print打印,类似于shell中的echo

      3. 执行:

      $ python first.py

       

      执行可以用上述直接调用python解释器执行,也可以给脚本赋予执行权限,而后. first.py,注意,第二种方式在脚本首行务必添加声明脚本执行解释器行。

    十一. Print输出格式:

    print "String %format1 %format2..." %(variable1,variable2,...)
    d,i  十进制整数或长整数
    u  无符号整数或长整数
    o  八进制整数或长整数
    x  十六进制整数或长整数
    X  十六进制整数(大写字母)
    f   浮点数,如[-]m.dddddd
    e  浮点数,如[-]m.dddddde+xx
    E  浮点数,如[-]m.ddddddE+xx
    g,G 指数小于-4或更高精度时使用%e或者%E,否则使用%f
    s  字符串或者任意对象。格式化代码使用str()生成字符串
    r  同repr()生成的字符串
    c  单个字符
    %  字面量%,就是显示自身

    十二. Python的数据类型:

    内置(核心)数据类型
    数字:int, long, float, complex(负数), bool
    字符:str, unicode 
    列表:List
    字典:dict
    元组:tuple
    文件:file
    其他:集合(set)、冻结集合(frozenset), 类类型, None( 空)

    十三. Python常用的内置函数:
    id(),查看对象指向内存指>>> name = 'daniel'

    >>> name = 'daniel'
    >>> id(name)
    4324613008

    type(),获取对象类型

    >>> type(name)
    <class 'str'>

    len() 获取对象长度

    >>> len(name)
    6

    input(),获取用户键盘输入

    >>> name = input('Please your name:')
    Please your name:Daniel
    >>> name
    'Daniel'

    Python3.x里的input捕获到用户输入数据为str类型,如果需要用户输入int类型,需要加int()来转换如下:

    >>> age = input('Age?')
    Age?18
    >>> type(age)
    <class 'str'>
    >>> age1 = int(input('Age?'))
    Age?19
    >>> type(age1)
    <class 'int'>

    raw_input() 获取用户键盘输入,这个是python2中的语法,python3中已经废弃;

    两者的区别是input捕获到用户的键盘输入不做更改,用户输入类型是什么,就是什么类型,而raw_input,会默认为str类型;

    dir(__builtins__),显示系统内嵌模块

    >>> name = 'daniel'
    >>> dir(name)
    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
    View Code

    help(),显示内嵌模块帮助,如显示str用法,help(str)

    >>> help(str)
    退出请按q

    callable() 查看对象是否可以调用,可以调用为真,否则为假

    >>> name = 'Daniel'
    >>> callable(name)
    False
    >>> def name1():
    ...   print(name)
    ... 
    >>> 
    >>> callable(name1)
    True
    View Code

    十四. Python数学运算:

    >>>print 1+9 # 加法
    >>>print 1.3-4 # 减法
    >>>print 3*5 # 乘法
    >>>print 4.5/1.5 # 除法
    >>>print 3**2 # 乘方 
    >>>print 10%3 # 求余数,取模
    x // y, 截断除法,只取第一段整数结果
    -x, 一元减法
    +x, 一元加法

    十五. Python比较运算:

    x << y 左移,如,58<<1, 左移动一位就是乘以2,两位就是乘以4...

    二进制表示:
         128   64       32       16        8        4        2        1 
    58    0     0        1        1        1        0        1        0
    
    <<1   0     1        1        1        0        1        0        0  = 116
    >>> 58 << 1
    116
    >>> 58 << 2
    232

    x >> y 右移,其实右移动一位就是除以2取整,右移动2为就是除以4取整...;

    二进制表示:
         128   64       32       16        8        4        2        1 
    58    0     0        1        1        1        0        1        0
    
    >>1   0     0        0        1        1        1        0        1  = 29

    >>> 58 >> 1

    29

    >>> 58 >> 2

    14


    x & 7 按位与,二进制中的两个数,二进制都为1时,结果为1,否则为0;

    二进制表示:
         128   64       32       16        8        4        2        1 
    58    0     0        1        1        1        0        1        0
    25    0     0        0        1        1        0        0        1
    &     0     0        0        1        1        0        0        0  = 24

    >>> 58 & 25

    24

    x | y 按位或,二进制中的两个数,二级制有1时,结果都为1,否则为0;

    二进制表示:
    58 0 0 1 1 1 0 1 0 25 0 0 0 1 1 0 0 1 | 0 0 1 1 1 0 1 1 = 59

    >>> 58|25
    59

    x ^ y 按位异或,二进制中的两个数,二进位相异时,相同为0,不同为1;

    二进制表示:
    58 0 0 1 1 1 0 1 0 25 0 0 0 1 1 0 0 1 ^ 0 0 1 0 0 0 1 1 = 35

    >>> 58^25
    35

    ~x 按位求反,-(x+1),正变负,负变正;

    >>> ~58

    -59

    >>> ~-1

    0

    >>> ~-11

    10

    >>> ~10

    -11

    十六. Python模块

    牛X的python有着非常强大标准库和异常牛逼的第三方库,能帮助开发者完成各种需求。先列两个简单的:

    1. OS模块

    是Python标准库中用于访问操作系统功能的模块。

    首先导入模块:

    >>> import os

    查看帮助信息:

    >>> help(os)

    列出模块常用的方法:

    >>> dir(os)
    ['CLD_CONTINUED', 'CLD_DUMPED', 'CLD_EXITED', 'CLD_TRAPPED', 'EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_LOCK', 'F_OK', 'F_TEST', 'F_TLOCK', 'F_ULOCK', 'MutableMapping', 'NGROUPS_MAX', 'O_ACCMODE', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_EXLOCK', 'O_NDELAY', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_SHLOCK', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'PRIO_PGRP', 'PRIO_PROCESS', 'PRIO_USER', 'P_ALL', 'P_NOWAIT', 'P_NOWAITO', 'P_PGID', 'P_PID', 'P_WAIT', 'RTLD_GLOBAL', 'RTLD_LAZY', 'RTLD_LOCAL', 'RTLD_NODELETE', 'RTLD_NOLOAD', 'RTLD_NOW', 'R_OK', 'SCHED_FIFO', 'SCHED_OTHER', 'SCHED_RR', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_NOSUID', 'ST_RDONLY', 'TMP_MAX', 'WCONTINUED', 'WCOREDUMP', 'WEXITED', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WNOWAIT', 'WSTOPPED', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_get_exports_list', '_putenv', '_spawnvef', '_unsetenv', '_wrap_close', 'abort', 'access', 'altsep', 'chdir', 'chflags', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'cpu_count', 'ctermid', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'environb', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fsdecode', 'fsencode', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'get_blocking', 'get_exec_path', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getegid', 'getenv', 'getenvb', 'geteuid', 'getgid', 'getgrouplist', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getpriority', 'getsid', 'getuid', 'initgroups', 'isatty', 'kill', 'killpg', 'lchflags', 'lchmod', 'lchown', 'linesep', 'link', 'listdir', 'lockf', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'pread', 'putenv', 'pwrite', 'read', 'readlink', 'readv', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sched_get_priority_max', 'sched_get_priority_min', 'sched_yield', 'sendfile', 'sep', 'set_blocking', 'set_inheritable', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setpriority', 'setregid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'st', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sync', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'terminal_size', 'times', 'times_result', 'truncate', 'ttyname', 'umask', 'uname', 'uname_result', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write', 'writev']
    View Code

    常用方法:

    system,调用本地系统命令

    如查看系统磁盘使用量:
    >>> os.system('df -Th')
    Filesystem                      Type   Size  Used Avail Use% Mounted on
    /dev/mapper/vg_template-lv_root ext4    45G   17G   27G  39% /
    tmpfs                           tmpfs  939M     0  939M   0% /dev/shm
    /dev/vda1                       ext4   485M   33M  427M   8% /boot
    172.16.30.251:/data/Deployment  nfs     14T   12T  1.8T  87% /mnt
    View Code

    popen,保存命令执行结果,而不是执行结果返回的状态值

    >>> a = os.popen('df -h')
    >>> print(a.read())
    Filesystem      Size   Used  Avail Capacity  iused    ifree %iused  Mounted on
    /dev/disk1     233Gi  148Gi   84Gi    64% 38899509 22081737   64%   /
    devfs          185Ki  185Ki    0Bi   100%      639        0  100%   /dev
    map -hosts       0Bi    0Bi    0Bi   100%        0        0  100%   /net
    map auto_home    0Bi    0Bi    0Bi   100%        0        0  100%   /home

    2. getpass模块

    Python标准库,秉承*nix输入密码风格不显示输入信息的风格

    >>> import getpass
    >>> dir(getpass)
    ['GetPassWarning', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_raw_input', 'contextlib', 'fallback_getpass', 'getpass', 'getuser', 'io', 'os', 'sys', 'termios', 'unix_getpass', 'warnings', 'win_getpass']
    获取当前用户
    >>> getpass.getuser()
    'daniel'
    获取用户输入的密码信息
    >>> password=getpass.getpass()
    Password: 
    >>> print(password)
    Woyebuzhidaomimashisha

    十七. 控制流

    1. if..else

    需求:判断用户输入的用户名和密码是否正确,如正确就打印欢迎登陆,错误提示用户名或密码错误,结合getpass模块:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import getpass
    
    
    user = 'daniel'
    password = 'nicai'
    
    input_user = input('Username?')
    input_pass = getpass.getpass('Password?')
    
    if input_user == user and input_pass == password:
        print('欢迎登陆,%s' %input_user)
    else:
        print('用户名或者密码错误,请稍后再试')

    2. while

    循环,满足条件进入循环:

    还是上面的需求,允许用户输入尝试三次,如果连续三次失败的话,退出程序,使用while循环来处理:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import getpass
    
    
    user = 'daniel'
    password = 'nicai'
    
    
    Count = 0  #定义一个标志位
    
    while True:
        if Count < 3:
            input_user = input('Username?')
            input_pass = getpass.getpass('Password?')
            if input_user == user and input_pass == password:
                print('欢迎登陆,%s' %input_user)
                break  #成功后直接跳出循环
            else:
                print('用户名或密码输入错误,请重试!')
        else:
            Continue_flag = input('输入错误次数过多,是否继续?y/n')
            if Continue_flag == 'y':
                Count = 0
                continue
            else:
                break
        Count += 1

    3. for..in

    继续完善上面的需求,允许用户输入尝试三次,如果连续三次失败的话,退出程序:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import getpass
    
    
    user = 'daniel'
    password = 'nicai'
    
    
    Count = 0  #定义一个标志位
    
    for i in range(10):
        if Count < 3:
            input_user = input('Username?')
            input_pass = getpass.getpass('Password?')
            if input_user == user and input_pass == password:
                print('欢迎登陆,%s' %input_user)
                break  #成功后直接跳出循环
            else:
                print('用户名或密码输入错误,请重试!')
        else:
            Continue_flag = input('输入错误次数过多,是否继续?y/n')
            if Continue_flag == 'y':        
                Count = 0
                continue                    
            else:
                break
        Count += 1

     

  • 相关阅读:
    Docker常用命令
    CentOS7.8源码安装nginx
    CentOS7.8搭建STF
    Mac关闭系统安全保护(提示无权删除/usr/bin目录下的文件时)
    Mac本地安装Tcloud-后端
    Mac后台运行进程-终端退出不影响其后台运行
    Docker快速部署TCloud云测试平台--前端
    Docker快速部署TCloud云测试平台--后端
    【项目】项目组件索引
    Netty 直接内存(堆外内存)溢出分析
  • 原文地址:https://www.cnblogs.com/dubq/p/5474785.html
Copyright © 2020-2023  润新知