思前想后,还是决定学习python,于是开始整理学到的东西,方便以后回头复习和检查自己。
最近找到了一个学习 ptthon 的交流qq群 7848 6745,新人刚入群群主还会发学习资料,感觉挺好的,大家可以一起来学习。
一、编程开发规范
作为一门开发语言,python自然也有自己的编程规范,以下是特有且必须遵循的规范:
- 代码开头
python中代码必须顶格编写,除非被作为语句嵌套在条件判断或条件循环中。 - 代码层级
代码与代码之间的逻辑层级关系(涉及逻辑判断、包含关系等情况)通过空格来界定,第一层顶格编写,第二层(被包含或者逻辑判断后的执行动作)开头预留4个空格(如果不考虑跨平台可以使用tab) - 对齐方式
同一个层级的代码必须严格对齐,如第一层都是顶格,第二层都是4个空格开头,第三层则是8个空格,以此类推。 - 注释
单行注释用#开头,单独一行作为注释或者在代码后面通过#跟上注释均可,多行注释在首尾处用成对的三引号引用即可,可以是成对的三个单引号或者三个双引号。 - 代码块
if逻辑判断和for循环条件后面均以冒号结尾,然后通过4个空格开始下一层级的实际执行动作语句编写。这部分在冒号后面接上的语句称为代码块。 - 程序命名
编写的python程序必须以.py结尾。 - 项目规范
启动一个项目开发时先在开发工具中创建project,然后根据需要创建目录,最后在目录下创建当前活动的py程序。
二、变量
python中的变量也用于存储临时值以便后续灵活调用,在定义时只能使用字母、数字、下划线的任意组合,且不能以数字开头,不能以python内置的关键字来命名变量(如and,import,global,finally等,有待后续学习加深印象)。对变量进行字符串类型的赋值时,字符串需要用成对的引号引起来,可以是单引号、双引号或者三引号。
建议通过以下两种形式来定义较为复杂的变量,便于阅读:
- 驼峰体
即每个单词的首字母大写,其他小写,如MappingTable - 下划线
不同单词之间通过下划线分开,如mappting_table
三、字符编码
字符编码经历了ASCII码->unicode->UTF-8的演变过程,python 2.x默认使用ASCII编码,而3.x默认使用UTF-8编码。由于字符编码事关重大,一言不合就会导致乱码,因此强烈建议统一使用万用的utf-8编码。怎么使用呢?
- 程序开头明确显式定义
#!/usr/bin/env python
# -*- coding: utf-8 -*-
windows下编程可忽略第一行,但为了保留移植性建议始终声明变量。
- 在程序解释器中选择utf-8字符编码
以上两个条件缺一不可,虽然python 3.x版本默认使用utf-8编码,但还是建议在程序中声明编码格式。
以上是结果,下面谈谈为什么强烈建议使用urf-8编码,以及为什么utf-8编码就可以通吃。
最早就只有包括所有字母的大小写、数字、必要的特殊符号等合计才127个字符被编码到计算机里,这个编码就是ASCII编码。由于需要进行编码的字符才有127个,因此用7个二进制位就足以搞定了,但8个二进制位才能构成一个完整的字节,因此索性用8个二进制位来进行编码,剩余的一位只好浪费掉。所以ASCCI码只占用一个字符。
随着计算机技术的推广和普及,其他不以英语为官方语言的国家也开始使用计算机了。那么现在问题来了,一个字节的8个bit位只能表示非常有限的字符(设计时只包括所有字母的大小写、数字、必要的特殊符号,其中整数还不能超过255),既有的ASCII编码表里没有包含其他国家的语言字符,但显然也没法强迫全球都使用英语,于是各个国家开始进行本土化改良,设计能满足自己国家需要的编码,如国内的GB2312。这里的改良涉及两个要点,一是原有的一个字节的编码空间要扩充为两个字节甚至更多,二是新的编码还不能与既有的ASCII编码冲突,否则老美要跟你捉急了!你可以想象,中国搞定了一套,日本也搞定了一套,接着是韩国、越南等巴拉巴拉,大家都有自己的编码标准,各自为政,遇到多语言混合使用的场景这编码表还不炸开锅,连同计算机一起傻掉!这时Unicode应运而生。Unicode把所有语言都统一到一套编码里,用两个甚至更多的字节来进行编码(通常用两个字节,搞不定时再喊人加砝码呀),这样就不会再有乱码问题了。
Unicode搞定了多国语言乱码和编码统一的问题,但你会发现如果需要处理的内容全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就不太经济划算。OK,Unicode的演进改良版utf-8就是来解决这个问题的。utf-8的优势在于它使用“可变长编码”,在继续沿用ASCII编码基础上来对1个字节不能搞定的那些语言字符进行编码设计,这样英文还是用1个字节,遇到中文就用3个或者更多的字节来处理。这样既可以保障空间和性能的最大化,还能兼顾老美的老巢和其他非英文的编码兼容问题,一举三得!所以你会发现ASCII其实是utf-8的子集,utf-8向下兼容。
四、 Python解释器
python是一门解释性语言,自然不能缺了解释器(类似于JVM)。官方支持Cpython、Jpython、Ironpython和pypy等,默认使用基于C语言实现的Cpython。它也是最为广泛使用的解释器。程序运行时会把.py文件转换成.pyc字节码文件,然后运行在python虚拟机上。
最近找到了一个学习 ptthon 的交流qq群 7848 6745,新人刚入群群主还会发学习资料,感觉挺好的,大家可以一起来学习。
五、构建Python的开发环境
构建好包括解释器(虚拟机)和开发工具IDE在内的Python的开发环境才便于展开程序开发之旅。
其中解释器(虚拟机)从python官方下载安装即可,需要注意的是建议安装3.7版本,windows下安装后需要把python的bin目录和scripts目录追加到系统环境变量path和用户变量path中。我的win 7用户不是以administor,补充追加了用户变量后才能在cmd下傻瓜式地输入python。linux下系统默认是2.x的版本,安装3.7版本时需要先将旧版本重命名为其他目录(如python2.6)后再安装,安装完毕无需额外设置环境变量。
好的程序猿都得有自己好使的IDE,python程序建议使用pycharm工具来进行开发。从官网下载安装社区版即可,需要注意的是选择后本地的解释器和项目的默认字符编码。其他一些好玩的特性、快捷键等只有后续逐步体会了。
六、模块初识
python内置了很多模块,同时也可以自定义编写一些好玩的模块,使用模块时需要通过关键字import导入。导入后python会从系统变量的路径中从前往后一次查找,首次成功查找匹配后不再进行后续查找。因此如果需要使用自定义模块,需要特别关注自定义模块的存放位置,底线是只存放在系统变量的一个路径下,否则可能得到意外的结果。
七、用户输入和格式化输出
用户输入通过input来实现,示例如下:
YourName=input("Please input you name here: ")
简单的输出通过print来实现,示例如下:
print("Hi,", YourName) #调用输出上面用户输入的变量YourName
注意:
- 3.x版本中input默认接收用户输入的类型为字符串,如果需要使用其他的数据类型则需要进行转换,如
UserAge=int(input("Please input your name:"))
- print输出中可以接上转义符号\来实现更多的输出显示效果,如 \n表示换行,\t为制表符。
print的使用进阶——字符串的格式化输出:
python中,对字符串进行格式化输出与c语言是相同的,即借助%来实现。%s表示与字符串替换,%d表示用整数替换,%f表示用浮点数替换,如果输出的字符串中本身就需要%(比如输出比率),则需要用连续的两个%%来输出%。
示例程序如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
print ("Your name is %s" %"Bob")
print ("Your age is %d" %21)
print ("Your name is %s,age is %d" %("Bob",21))
从以上示例程序可看出,利用print进行格式化输出的基本格式是在需要替换输出的位置用%s,%d等占位符,然后在后面通过%来接上实际替换后需要输出的内容,如果需要替换输出的元素不止一个,则需要在%后面通过一对圆括号把实际替换后需要输出的内容包含进来,同时在每个元素之间用逗号隔开。
八、Python的运行逻辑
Python的运行工作逻辑如下:
内存加载代码->语法分析->解释器加载->生成字节码->执行字节码->生成机器码->CPU执行