python 基础回顾1

1、python介绍python

python 是Guido van Rossum建立与1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言,是ABC编程语言的继承。第一个公开发行版发行于1991年。python 是一种面向对象、直译式计算机程序设计语言,Python语法简捷而清晰,具备丰富和强大的类库。linux

python 特性web

  • Python 是一种解释型语言: 这意味着开发过程当中没有了编译这个环节。相似于PHP和Perl语言。算法

  • Python 是交互式语言: 这意味着,您能够在一个Python提示符,直接互动执行写你的程序。shell

  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。编程

  • Python 是可扩展性语言: 若是须要一段关键代码运行得更快或者但愿某些算法不公开,能够部分程序用C或C++编写,而后在Python程序中使用它们。

python 排名windows

前10名编程语言的走势图:python3.x

排名

 

编程语言排行榜 TOP 20 榜单:榜单浏览器

 

因而可知,Python总体呈上升趋势,反映出Python应用愈来愈普遍而且也逐渐获得业内的承认!!!框架

python 解释器的种类

CPython

当咱们从Python官方网站下载并安装好Python 后,咱们就直接得到了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,因此叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的全部代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强,可是执行Python代码的功能和CPython是彻底同样的。比如不少国产浏览器虽然外观不一样,但内核其实都是调用了IE。

CPython用>>>做为提示符,而IPython用In [序号]:做为提示符。

PyPy

PyPy是另外一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),因此能够显著提升Python代码的执行速度。

绝大部分Python代码均可以在PyPy下运行,可是PyPy和CPython有一些是不一样的,这就致使相同的Python代码在两种解释器下执行可能会有不一样的结果。若是你的代码要放到PyPy下执行,就须要了解PyPy和CPython的不一样点。

Jython

Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython相似,只不过IronPython是运行在微软.Net平台上的Python解释器,能够直接把Python代码编译成.Net的字节码。

 

2、python发展史

  • 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他但愿这个新的叫作Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
  • 1991年,第一个Python编译器诞生。它是用C语言实现的,并可以调用C语言的库文件。从一出生,Python已经具备了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增长了 lambda, map, filter and reduce.
  • Python 2.0 - October 16, 2000,加入了内存回收机制,构成了如今Python语言框架的基础
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015

 

3、python 2.x 与 python 3.x的区别

一、__future__模块

python3的一些特性能够同过future模块来导入,例如想要在python2.x中导入python3.x的print函数

from __future__ import print_function

print('导入陈功。')
feature optional in mandatory in effect
nested_scopes 2.1.0b1 2.2 PEP 227: Statically Nested Scopes
generators 2.2.0a1 2.3 PEP 255: Simple Generators
division 2.2.0a2 3.0 PEP 238: Changing the Division Operator
absolute_import 2.5.0a1 3.0 PEP 328: Imports: Multi-Line and Absolute/Relative
with_statement 2.5.0a1 2.6 PEP 343: The “with” Statement
print_function 2.6.0a2 3.0 PEP 3105: Make print a function
unicode_literals 2.6.0a2 3.0 PEP 3112: Bytes literals in Python 3000

二、print函数

在python3.x 中 print 再也不是语句,而是函数,书写方式由 print  改成 print()

python 2.x

print 'Hello World'
python 3.x

print('Hello World')

三、整除,原来1/2(两个整数相除)结果是0,如今是0.5了

python 2.x

>>>1/2
0
python 3.x

>>> 1/2
0.5

 

四、python 3.x中没有旧式类,只有新式类

在Python 3中,没有旧式类,只有新式类,也就是说不用再像这样 class Foobar(object): pass 显式地子类化object,声明的都是新式类。

 

五、xrange重命名为range

python 3.x 中不存在 xrange 函数,而range 函数返回的就是迭代器对象,同时更改的还有一系列内置函数及方法, 都返回迭代器对象, 而不是列表或者 元组, 好比 filter, map, dict.items 等。

六、!=取代 < >

python 3.x中再也不存在 <>符号,判断不等于的话,使用 !=号

七、long重命名为int

python3 废弃了 long 长整型表示方法,统一为 int , 支持高精度整数运算

八、except Exception, e变成except (Exception) as e

注意该写法,python 3.x中再使用以前的写法会报错

九、next()函数 和.next()方法

在python3.x中只有 next() 函数,废弃了.next()方法

十、字符串格式化 由原先的 % ,在py3.x中提倡是用 format函数

十一、python3.x中某些类库作了调整

例如python 2.x中 urllib 和 urllib2 两个库 在python 3.x中合并成了一个库 urllib

  

  

 

 

4、python字符编码

由于计算机只能处理数字,若是要处理文本,就必须先把文本转换为数字才能处理。最先的计算机在设计时采用8个比特(bit)做为一个字节(byte),因此,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),若是要表示更大的整数,就必须用更多的字节。好比两个字节能够表示的最大整数是65535。

因为计算机是美国人发明的,所以,最先只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,好比大写字母A的编码是65,小写字母z的编码是122。

要处理中文显然一个字节是不够的,至少须要两个字节,并且还不能和ASCII编码冲突,因此,中国制定了GB2312编码,用来把中文编进去。

全世界有上百种语言,日本不承认中文的编码,日本把日文编到Shift_JIS里,韩国也不承认中文的编码,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

Unicode就诞生了。Unicode把全部语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode 最经常使用的是用两个字节表示一个字符(部分偏僻的字符,就须要4个字节)。现代操做系统和大多数编程语言都直接支持Unicode。

可是,若是都采用Unicode的编码的话,乱码问题今后消失了。可是,若是你写的文本基本上所有是英文的话,用Unicode编码比ASCII编码须要多一倍的存储空间,在存储和传输上就十分不划算。

因此,为了节约空间,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不一样的数字大小编码成1-6个字节,经常使用的英文字母被编码成1个字节,汉字一般是3个字节,只有很生僻的字符才会被编码成4-6个字节。若是你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

到这里,编码的历史大概介绍了一遍,总结一下,在计算机内存中,统一使用Unicode编码,当须要保存到硬盘或者须要传输的时候,就转换为UTF-8编码。

下图是编码存储与读取转换的过程

 

python2.x版本原生支持ASCII编码,后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示。

python代码中包含中文的时候,在保存代码时,就须要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,咱们一般在文件开头写上这两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

第一行适用于类Unix系统,告诉系统使用什么解释器

第二行声明代码编码类型

5、python变量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不只能够是数字,还能够是任意数据类型。

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头。

在python中给变量赋值使用 = 号,python是弱类型的动态编程语言,在给变量赋值以前不须要声明变量的类型,同一个变量能够反复复制,并且能够是不一样的类型。

例如:

>>> a = 'abc'

>>> a_ = 123

>>> a_123 = True

python把一个值赋值给变量,等于在内存中开辟了一块地址存储该值。

>>> a = ‘QWE’

执行上边的语句时,等于干了两件事情:

一、在内存中建立一个‘QWE’的字符串

二、在内存中建立一个名字为a的变量,并将他指向‘QWE’

>>> b = a

>>> a = 'ASD'

>>> print (a, '', b)
ASD QWE

当将变量a复制给变量b的时候,其实是将变量b指向变量a的所指向的数据。

当再次给变量a赋值时,a指向了另外一个变量空间。

 

6、用户输入

 

python3.x中使用 input函数获取用户的输入,input的函数把用户的一切输入都看成是字符串。

 

#!/usr/bin/env python
#_*_coding:utf-8_*_

user_input = input('input your name:' )

print (user_input)

 

输入密码时,若是想要不可见,须要利用getpass 模块中的 getpass方法

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import getpass
  
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
  
# 打印输入的内容
print(pwd)

 

7、基本数据类型

“一切数据是对象,一切命名是引用” ,这是python数据类型的核心

python有如下的数据类型

一、字符串
二、布尔类型
三、整数
四、浮点数
五、复数型

python使用单引号或者双引号表示字符串,两种表示功能方式相同

s = 'test'

s = "test"

还可以使用'''三引号表示长段的字符串

s = '''
    this a test with a lot pf
    words which show the
    long string in Python
    '''
字符串经常使用功能:
  • 移除空白
  • 分割
  • 长度
  • 索引
  • 切片

 

布尔型

布尔型 实际上是整型的子类型,布尔型数据只有两个取值:True和False,分别对应整型的1和0。

每个Python对象都天生具备布尔值(True或False),进而可用于布尔测试(如用在if、while中)。

如下对象的布尔值都是False:

  • None
  • False(布尔型)
  • 0(整型0)
  • 0L(长整型0)
  • 0.0(浮点型0)
  • 0.0+0.0j(复数0)
  • ''(空字符串)
  • [](空列表)
  • ()(空元组)
  • {}(空字典)
  • 用户自定义的 类实例,该类定义了方法 __nonzero__()__len__(),而且这些方法返回0或False

整型

Python语言的整型至关于C语言中的long型,在32位机器上,整型的位宽为32位,取值范围为-231~231-1,即-2147483648~2147483647;在64位系统上,整型的位宽一般为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807。
Python中的整数不只能够用十进制表示,也能够用八进制和十六进制表示。当用八进制表示整数时,数值前面要加上一个前缀“0”;当用十六进制表示整数时,数字前面要加上前缀0X或0x。

 

长整型

在python 2.x中还存在长整型,跟C语言不一样,Python的长整型没有指定位宽,也就是说Python没有限制长整型数值的大小,可是实际上因为机器内存有限,因此咱们使用的长整型数值不可能无限大。
在使用过程当中,咱们如何区分长整型和整型数值呢?一般的作法是在数字尾部加上一个大写字母L或小写字母l以表示该整数是长整型的。

 

浮点型

浮点型用来处理实数,即带有小数的数字。Python的浮点型至关于C语言的双精度浮点型。实数有两种表示形式,一种是十进制数形式,它由数字和小数点组成,而且这里的小数点是不可或缺的,如1.23,123.0,0.0等;另外一种是指数形式,好比789e3或789E3表示的都是789×103,字母e(或E)以前必须有数字,字母e(或E)以后能够有正负号,表示指数的符号,若是没有则表示正号;此外,指数必须为整数。

 

复数类型

复数由实数部分和虚数部分组成,通常形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。注意,虚数部分的字母j大小写均可以,如5.6+3.1j,5.6+3.1J是等价的。
对于复数类型变量n,咱们还能够用n.real来提取其实数部分,用n.imag来提取其虚数部分,用n.conjugate返回复数n的共轭复数。

 

8、条件判断与循环

条件判断

根据年龄打印不一样的内容,在Python程序中,用if语句实现:

1 age = 20
2 if age >= 18:
3     print('your age is', age)
4     print('adult')

根据Python的缩进规则,若是if语句判断是True,就把缩进的两行print语句执行了,不然,什么也不作。

也能够给if添加一个else语句,意思是,若是if判断是False,不要执行if的内容,去把else执行了:

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

还能够用elif作更细致的判断:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

elifelse if的缩写,彻底能够有多个elif,因此if语句的完整形式就是:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

循环

for 循环

循环10次

for i in range(10):
    print("loop:", i )

输出

loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

改变下条件,遇到小于5的循环次数就不走了,直接跳入下一次循环

for i in range(10):
    if i<5:
        continue #不往下走了,直接进入下一次loop
    print("loop:", i )

再次改变下条件,可是遇到大于5的循环次数就不走了,直接退出

for i in range(10):
    if i>5:
        break #不往下走了,直接跳出整个loop
    print("loop:", i )

 

9、字符串格式化

name = raw_input("Please input your name:")
age = int(raw_input("Please input your age:"))
provice = raw_input("Please input your provice:")
company = raw_input("Please input your company:")
msg = '''
Infomation of user %s
-------------------------
name    :   %s
age     :   %2f
provice :   %s
company :   %s
-----------End-----------
''' % (name,name,age,provice,company)
print msg

10、模块初识

Python的强大之处在于他有很是丰富和强大的标准库和第三方库

sys

import sys
 
print(sys.argv)
 
 
#输出
$ python test.py helo world
['test.py', 'helo', 'world']  #把执行脚本时传递的参数获取到了

os

import os
 
os.system("df -h")

结合一下

import os,sys
 
os.system(''.join(sys.argv[1:])) #把用户的输入的参数看成一条命令交给os.system来执行

 

本身写个模块


本身编写模块以后将模块文件放到 /usr/local/lib/pythonx.x/site-packages/ 目录下

下面添加个自动不全模块

#!/usr/bin/env python 
# python startup file 
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion 
readline.parse_and_bind('tab: complete')
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
    readline.read_history_file(histfile)
except IOError:
    pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter

for Linux
for linux
# python startup file for window 
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')
 
del os,readline, rlcompleter
for windows
import sys
import readline
import rlcompleter
if sys.platform == 'darwin' and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac
for mac

注:保存内容为tab.py,使用import tab命令引用该模块。该文件存放的位置就是 /usr/local/lib/pythonx.x/site-packages/ 

相关文章
相关标签/搜索