Python前篇

Python是一种解释型语言,一门完善的面向对象高级编程语言,无需编译和链接,为编写大型程序提供更多的结构和支持,并且与Shell脚本相比,适合编写GUI应用程序或游戏。Python提供大量的多种类型标准模块,模块提供了诸如I/O、 系统调用、Socket支持、用户图形(GUI工具)、机器学习、可视化等;内置高级的数据结构类型,为数据分析提供了更多支持;Python是可扩展的,可以将Python解释器集成进其它应用程序。

Python学习建议:对于学习Python的建议是可以先敲几行代码,再回头看具体的类型和语法解释,因为这样会理解深刻,地基也能打的更牢靠。然后在这一组循环结束之后,再进行Python高阶学习,效率会更高。

个人认为的Python的优点: 每种语言都有自己的特点,之所以选择学习Python,是认可了Python对数字类型、字符串 强大的处理能力,以及对数据结构的扩展,这两点对数据清洗、数据存储和操作有很大帮助。

Python官网:https://www.python.org/

Python下载安装

官网地址https://www.python.org/downloads/提供各种版本的平台安装包,可以根据自己电脑版本下载对应的平台包。本人电脑是Mac 版,所以安装的Mac OS X平台包。不过Mac系统自带Python2.7环境,可以打开Termail 输入Python -v查看版本号,或者打开Python自带的IDLE,解释器开头会有Python环境的描述。因为本人要学习Python3,所以保留了自带的Python2.7环境,又下载来Python3.6,同时存在两种版本。若只想将Python2.7升级到Python3.6,则需要将下载后的Python3.6 替换原有的Python2.7。

通常Python安装目录是:/usr/local/bin ,如果是windows,安装目录一般是C:\Python36, 这里目录并不是固定Python36,如果安装版本是3.5,则目录就是C:\Python35

Python IDE:模式&类型

Python运行,需要通过IDE,Python IDE有很多种,例如:IDLE、PyCharm、Sublime Text、iPython、Vim、Eclipse + PyDev、jupyter、notebook+spyder3 等,可以根据个人习惯安装适合的IDE,以JAVA开发为主的编程人员可能更习惯使用Eclipse,不太会编码的人员可能使用notebook+spyder3更普遍,不过本人使用最频繁的IDE是Pycharm,Pycharm自带错误提示和输入提示,节约编码时间,提高编码效率,并且适合编写爬虫。

以上IDE中有IDE是工作在交互模式下,例如IDLE,打开IDLE会发现每行都以>>>开头,>>>是主标识符。若解释器从tty读取命名,则称解释器工作于交互模式,IDLE就是工作于交互模式的解释器,这种模式是根据主提示符来执行,主提示符通常情况下标识为三个大于号>>> ,继续部分称为从属提示符,通常是三个点...,

在第一行主提示符之前,IDE打印欢迎信息、版本号和授权提示,这就是我们打开Python安装包自带的IDLE就能查看版本号的原因。因为交互模式的工作方式,每行代码敲完后都需要回车,回车之后会继续有三个大于号>>> 的提示符,再继续输入后面的内容。脚本式编程的IDE 不会有提示符,代码编写完成后再运行即可。

Python IDE 环境设计

Python3 之前默认的编码格式是ASCII格式,在没有修改编码格式之前无法打印汉字,不过Python3 之后这个问题不存在,默认情况下源码文件以UTF-8编码。若使用的Python3之前的版本,则在编写程序之间需要添加一行注释:

# -*- coding: utf-8 -*-

若要支持其它文字,则需要输入对应的编码格式。

针对部分IDE,可以统一设置编码格式,统一设置编码格式后则不需要在每次编码的时候添加注释。统一设置一般是在setting(mac版为偏好设置)中,找到对应的File encodings 将其中的IDE Encoding和Project Encoding设置为utf-8

Python 基础语法

1.缩进问题

​ 缩进在Python中作为语法出现,表示代码的层级关系,同一个代码块的语句必须包含相同的缩进空格数。所以空格缩进问题要特别注意,多一个空格或少空格会造成语法错误。

IndentationError: unindent does not match any outer indentation level

2.标识符

标识符由字母、数字、下划线构成,第一个字符必须是字母表中字母或下划线_,并且标识符区分大小写。以下划线开头的标识符有特殊含义, 单下划线开头_modelorclassname代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import *导入;双下划线开头__propertyname代表类的私有成员;以双下划线开头和结尾的__name__ 是Python特殊方法专用表示,如__init()__代表类的构造函数。此外,Python3 现在可以接收非ASCII字符。

3.注释

单行注释用#开头,多行注释可以用多个#号,或者是三个单引号’’’,或者三个双引号”””

#Python简介
#Python基础语法

'''
Python简介
Python基础语法
'''

"""
Python简介
Python基础语法
"""

4.保留字

保留字是Python系统的关键字,所以开发者不能用来当标识符。Python3中可以查看所有保留字

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

5.多行语句

在[],{},()中的语句可以直接回车换行进行多行语句书写,但非以上结构中的语句,要想换行写必须使用反斜杠\

number = 120000000 + 2000000000 + \
                 3424546 + 58690765465\
               234567789 + 5678900

6.标点符号问题

Python环境中,除了Python流程控制函数后需要输入冒号以此来区分控制语句的多行代码,其它情况每行代码后无需加任何标点符号。

7.空行

空行在Python中也是程序代码的一部分,但空行并不是Python语法的一部分。函数之间、类的方法之间用空行分隔,表式一段新的代码的开始,不插入空行也不会报错。

8.一行显示多条语句

Python中可以在同一行中写多条语句,这个时候语句之间要使用分号分割。交互式IDE中会一次性输出多条语句的执行结果。

9. 多个语句构成代码组

前面讲到缩进相同的代码代表同一个层级,这些代码构成来一个代码块,称为代码组。

ifwhile等控制语句就会形成代码组。以及自定义函数defclass后面可以形成代码组。 交互式系统中代码组最后一行必须是空行 以此来表示代码组结束。

10. import 与 from … import

Python中导入模块有importform…import两种方式。整个模块导入用import格式,从某个模块中导入某个函数使用from…import个数。多个模块导入或某个模块导入多个函数,则在模块或特定函数之间用逗号,分割

import modulename
import moduleone,moduletwo

from modulename import funcname
from modulename import funcone,functwo

11.模块下载

Python具有兼容性,许多第三方module要自己下载,打开Terimal,输入:

python -m install modulename  #modulename 为要下载的部件名称

如果电脑上有多个Python版本,需要指定Python版本进行下载

python3 -m install modulename 

12. 命令行参数

在Terimal中使用-h参数可以查看各参数帮助信息:

apple@muyingdeMacBook-Pro ~> python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d     : debug output from parser; also PYTHONDEBUG=x
-E     : ignore PYTHON* environment variables (such as PYTHONPATH)
-h     : print this help message and exit (also --help)
-i     : inspect interactively after running script; forces a prompt even
         if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-m mod : run library module as a script (terminates option list)
-O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO    : remove doc-strings in addition to the -O optimizations
-R     : use a pseudo-random salt to make hash() values of various types be
         unpredictable between separate invocations of the interpreter, as
         a defense against denial-of-service attacks
-Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
-s     : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S     : don't imply 'import site' on initialization
-t     : issue warnings about inconsistent tab usage (-tt: issue errors)
-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
         see man page for details on internal buffering relating to '-u'
-v     : verbose (trace import statements); also PYTHONVERBOSE=x
         can be supplied multiple times to increase verbosity
-V     : print the Python version number and exit (also --version)
-W arg : warning control; arg is action:message:category:module:lineno
         also PYTHONWARNINGS=arg
-x     : skip first line of source, allowing use of non-Unix forms of #!cmd
-3     : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix
file   : program read from script file
-      : program read from stdin (default; interactive mode if a tty)
arg ...: arguments passed to program in sys.argv[1:]

Other environment variables:
PYTHONSTARTUP: file executed on interactive startup (no default)
PYTHONPATH   : ':'-separated list of directories prefixed to the
               default module search path.  The result is sys.path.
PYTHONHOME   : alternate <prefix> directory (or <prefix>:<exec_prefix>).
               The default module search path uses <prefix>/pythonX.X.
PYTHONCASEOK : ignore case in 'import' statements (Windows).
PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.
PYTHONHASHSEED: if this variable is set to 'random', the effect is the same
   as specifying the -R option: a random value is used to seed the hashes of
   str, bytes and datetime objects.  It can also be set to an integer
   in the range [0,4294967295] to get hash values with a predictable seed.

此外,Python提供来getopt模块获取命令行参数, 或者用sys 模块的sys.argv获取命令行参数

sys模块:

sys.argv[0]表示脚本名

sys.argv是命令行参数列表

len(sys.argv)是命令行参数个数

.py文件(.py为Python文件的后缀)中:

import sys
print ('命令行参数个数为:', len(sys.argv))
pring ('命令行参数列表:', str(sys.argv)) 

执行和输出结果为:

python3 classname.py arg1 arg2

输出结果:
命令行参数个数为: 4
命令行参数列表:['classname.py', 'arg1', 'arg2']

getopt模块

getopt模块专门处理命令行参数,用于获取命令行选型和参数支持短选项模式-和长选项模式

模块中共有:两个方法;一个异常。 用来处理解析命令行参数。

getopt方法:

此方法解析命令行参数列表:

getopt.getopt(args, options[, long_options])

方法参数说明:

args:要解析的命令行参数列表

options: 以字符串格式定义,options后的冒号: 表示该选项必须有附加的参数,没有则代表不需要附加参数。

long_options : 列表格式定义,long_options 后的等号表示如果设置该选项,必须有附加的参数,否则就不附加参数。

返回值由两个元素组成:第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有’-‘或’–’的参数。

gnu_getopt方法:

getopt.getopt方法在遇到第一个不符合设置的参数时就会自动忽略,而gnu_getopt方法则不会存在这样的情况,即使参数不符合设定也会将结果输出出来,能够得到全部的命令行参数。

GetoptError异常:

没有找到参数列表或选项需要的参数为空时会触发此异常。异常的参数是一个字符串,表示错误的原因。属性msg和opt为相关选项的错误信息。