1.首先这个人在工作的时候觉得现有的语言编写东西很麻烦,于是就发明了python。
贵铎·范·罗萨姆(Guido van Rossum)于 1989 年底始创了 Python,荷兰人。到目前已经有接近30年的历史了。
2.其次python的特点。
Python是一门简洁的高级语言,意味着它能帮助人们节省很多的开发时间。同时兼具shell的脚本语言特性,也兼具面向对象的特性,虽然人们实际开发中经常使用的是前者。简单的shell脚本语言可以用来处理简单的任务,但是功能是会有穷尽的,因此重用度和可升级性都很差。而相比之下python可以自行添加喜欢的元素和模块,因此开发人员很少会看到一个很长很复杂的python程序。
Python强调简洁的重要性,因此python在开发的过程中一直非常就强调易维护易开发的重要性 。另外他还兼具易维护和高健壮性的特点。
Python被人们称为“胶水语言”,是因为它的可拓展的特性。 它可以随时将标准库和你自己创建的任何语言的模块工具用同样的界面进行拓展和复用。能够灵活附加或定制工具,缩短开发周期。另外python拥有的一些插件也允许它可以进行混合语言的编程。
另外Python是由c语言编写的,自然也拥有c语言的可移植性,适用于各种操作系统和各种不同的架构。它比c语言要好的一点是将内存管理的任务交给了python解释器来负责,因此程序员在进行python开发的时候就会能更加专注的进行编程工作。python是一门解释性的语言,所以它没有编译的环节,运行也比通常的解释性语言运行的要慢,另外,python是字节编译的,生成一种近似于机器语言的中间形式。
采用引用计数器来实现对象的垃圾回收机制
3.python的使用以及工具
对于python来说,最重要的一门工具就是IDLE,可以在百度上搜索python,进入官网,下载python2.7或者3.6的版本,安装完毕之后就会找到相应的工具。另外可以在cmd的dos环境中敲击python。如果两个版本都下载了的话为了选择想用的版本,可以通过绝对路径来执行python.exe这个文件。
下面是常用的python命令的help。可以通过 python --help命令查看英文版
-d 提供调试输出
-O 生成优化的字节码(生成 .pyo 文件)
-S 不导入 site 模块以在启动时查找 Python 路径
-v 冗余输出(导入语句详细追踪)
-m mod 将一个模块以脚本形式运行
-Q opt 除法选项(参阅文档)
-c cmd 运行以命令行字符串形式提交的 Python 脚本
file 从给定的文件运行 Python 脚本(参阅后文)
如果在离线情况下想查阅相关的帮助手册,可以在安装目录下的doc目录下找到一个你所在版本的.chm文件。
python 的文件后缀为.py。
4.推荐阅读的书籍
Python核心编程
简明python教程
利用python进行数据分析
推荐想要进一步熟悉的人看一些PEP(Python增强提案)类的文章,PEP的索引网址为:http://python.org/dev/peps.
5.常用语法
>>> |
Python提示符 |
如果接触过命令行工具的一定不会感到陌生类似的形式。 |
# |
注释 |
; |
允许多个语句在同一行中书写,但是不推荐使用 |
\ |
继续上一行 |
. |
属性标识法,ep: object.method() |
_ |
最后一个表达式的值 |
tab键(缩进) |
代替了其他语言中的花括号,简洁,可读性高 |
但是在一些书籍中推荐使用四个空格键来进行缩进而不是tab键,因为tab键在不同的文本编辑器中代表的空白宽度不一,跨平台应用会不太顺手
help([obj]) |
显示文档字符串或者是交互式帮助(obj为空时) |
dir([obj]) |
显示对象的属性,没有参数显示全局变量的名字 |
type(obj) |
返回一个对象的类型,返回值是一个type对象 |
print() |
打印输出 |
3.6版本中一定要输入() |
字符串
print('hello word')
变量
print (var)
字符串格式运算符
print (“%s age is %d” %("python",30))
输出多内容(逗号处会被替换为空格)
print('im','zxd','opportunity')
如果一行写不完,使用 \ 可以从下一行继续写
raw_input() |
输入 |
|
a = raw_input('plea input a:')
3.6版本里面更新为input()
if-else |
条件判断语句 |
可以判断bool类型 和 0与非0 |
if expression:
if_suite
elseif expression:
elseif_suite
else:
else_suite
注:无switch-case语句
另外,有的同学在命令行中运行,可能会遇到不会在IDLE中执行语句的情况,这时候仅仅需要把光标调整到与while同一列然后回车就可以执行了
while |
循环语句 |
while expression:
while_suite
for |
循环语句 |
类似于shell中的foreach |
可接受序列和迭代器对象
for varName in something:
doSomething
something 可以是 元组,列表,字符串
ep:简单的递增计数器
for num in [0,1,2,3]:
print num
range([start,]stop[,step]) |
递增计数器,产生一个从start到end的步长为step的列表 |
ep:效果同上例
for num in range(4):
print num
len() |
计算字符串的长度 |
enumerate() |
用于字符串,可同时循环索引(类如len())和元素(类如直接用字符串) |
ep:
str='abc'
for num,ch in enumerate(str):
print(ch,'-->%d' % (num))
open() |
打开文件 |
handle = open(fileName,mode)
mode 有如下几种
'r':读取,默认
'w':写入
'a':追加
'+':读写
'b':二进制访问
可以用到的函数有 :
handle.readlines() 返回值为一个字符串类型的列表,回车以‘\n’表示出来
handle.close() 关闭文件
for eachLines in handle:
print(eachLine)
替换函数file(),工厂方法,返回一个文件对象。
try-except &raise |
错误和异常 |
python语法检查分为运行时检测和语法检测。
try:后为检查部分
except:后为错误处理部分
raise:主动引发一个异常
def |
自定义函数 |
def function_name([arguments]):
"optional documentation string"
function_suite
其中的arguments可以添加默认函数值
class |
定义类 |
class ClassName(base_class[es]):
"optional documentation string"
static_member_declarations
method_declarations
base_class 表示的是基类,默认是object类为基类
函数的定义要使用def语句进行定义
_xxx 不用'from module import *'导入
__xxx__系统定义名字
__xxx 类中的私有变量名
__init__() 初始化构造函数,仅仅是第一个执行的函数,不产生对象
__doc__ 在模块,类声明,或函数声明中第一个没有赋值的字符串可以用属性 obj.__doc__来进行访问
self 表示是本对象,同c++/java中的this指针
类对象的创建生成:objectName = className()
del可以销毁对象的一个引用或者别名,如果引用计数为0,那么对象就会被回收。
import |
导入一个模块,python以模块的形式组织文件,每个脚本文件都是一个模块 |
import module_name
通过属性标识法可以访问模块中的函数以及变量
强制类型转换 |
int(obj) 将obj强制转换为整形 |
|
str(obj) 将obj强制转换为字符串 |
6.运算符
+-*/% |
加减乘除取模 |
// |
浮点除法(对结果进行地板除法,单个为正常除法) |
** |
乘方,等价于pow(x,exp) |
比较运算符 |
<,<=,>,>=,==(对象身份比较),<>,!=, is(对象身份比较),is not |
逻辑运算符 |
and or not |
支持增量运算符(+=等) 但是不支持自加自减(--,++)
= |
赋值表达式,没有返回值,因此不可以x=(y=1),但可以链式(多重)赋值,x=y=1 |
多元赋值: x,y,z = 'a',15,11.1,也可以写成元组形式,( x,y,z) =( 'a',15,11.1)
支持隐式的and链接。 即1
位运算符:
~ |
取反 |
& |
与 |
| |
或 |
^ |
异或 |
<< |
左移位 |
>> |
右移位 |
负数的处理方法为二进制的补码处理。
7.支持的类型
数字:
int |
有符号整形,跟机器的位数有关 支持hex()转换16进制的数(0x开头),oct() 转换8进制的数(0o开头) 支持ASCII转换,ord(chr)可将ASCII或者Unicode字符转换为ASCII或Unicode码 可以通过chr(ASCII_Num) 将ASCII码转化为字符 unichr(num) 将unicode码转化为unicode字符 |
long |
长整形(任意长),后缀L |
bool |
布尔(True,False) |
float |
双精度浮点数,55+11+1格式,支持科学计数法 |
complex |
复数(real+imagj ),虚部必须是j或者J后缀,实部虚部均有浮点数表示 com.real 实部 com.imag 虚部 com.conjugate() 返回共轭复数 |
decimal |
用法:decimal.Decimal('123.12'), 非内建函数需要引入模块 |
科学计数法 |
1e10 表示十的十次幂 |
不支持 char byte 指针等类型。
字符串:在赋值时推荐单引号括起。
[] |
索引运算符,第一个为0,最后一个为-1 |
[:] |
切片运算符 |
+ |
字符串的链接 |
字符串在定义的时候可以通过单引号或者双引号定义,在需要使用特殊字符并且需要字符串跨越多行时推荐使用三引号,一对(每一边三个)连续的单引号或者双引号。尤其是在调用HTML以及SQL等语句块时。 推荐使用三单引号。
列表:
使用[]
列表解析:使用for循环将所有值放到一个列表中,
ep: group = [x ** 2 for x in range(8) if not x%2]
元组:
使用(),是一种只读的列表
列表和元组均可以用来存储任意类型任意数量的python对象,下标从0开始。同字符串的用法一致。
字典:
相当于c++中的map,一种映射,哈希表实现。key-value
使用{}表示。
标准类型内建函数:
cmp(obj1,obj2) |
比较两个对象的大小,返回整形,和c++/java中一致, 可以重写__cmp__()类中函数来实现比较 |
repr(obj) |
返回对象的字符串表示,在2.7中可以用`obj`(反点)表示 |
str(obj) |
返回对象适合可读性好的字符串表示 |
type(obj) |
得到一个对象的类型,返回type对象。 isinstance(obj,(objType1,objType2…))用于面向对象中。 通过types对象可以实现上述功能 |
id(obj) |
查看对象的身份,列表的值无论怎么改变,id始终不变。 |
coerce() |
操作数运算时的类型转换,可以隐式调用。优先级复数>浮点数>长整数>普通整数 |
类型的工厂函数:
int(obj,base=10) |
默认返回0 |
long(obj,base=10) |
|
float() |
|
complex() |
有complex(str) 和 complex(real,imag=0.0)两种格式 |
bool() |
返回obj对象的布尔值,也就是obj.__nonzero__()方法的返回值,默认为True |
数学功能函数:
abs() |
取绝对值 |
coerce(obj1,obj2) |
类型转换函数,属于标准内建函数 |
divmod() |
返回一个商和余数的元组 |
pow(), ** |
指数运算 |
round(num,target) |
四舍五入运算 |
random |
伪随机数生成器(0-1之间) |
8.保留字(关键字)
9.模块结构和布局
10.推荐编程注意事项
减少函数调用的次数
减少解释器进行查询的次数,通过from-import语句进行简化。
*欢迎大家关注我的个人微信公众号:Opportunity_s
欢迎提出宝贵意见!
Opportunity的程序猿笔记