【Python之路Day1】基础篇

内容简要:java

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简介linux

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

二. Python能作什么?git

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

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

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

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

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

  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的3二、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
相关文章
相关标签/搜索