Python的初次接触

一、python简介

1.1、python的产生

  Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是其非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。

  Python 已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率呈线性增长。

1.2、python的类型

  Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。

  Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy

  Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。

  虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如ZopeMnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。

  Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。

1.3、python的优缺点

优点:

  简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

  易学:Python极其容易上手,因为Python有极其简单的说明文档 。

  速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。

  免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

  高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

  可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。

  解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

  面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

  可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。

  可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

  丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。

缺点:

  单行语句和命令行输出问题:很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。

  独特的语法:这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。

运行速度慢:这里是指与C和C++相比。

1.4、版本之间的差异

版本 python2.x python3.x
编码类型 ASCII utf-8
print 
print""或者print()打印都可以正常输出

print x,   末尾加逗号进行不换行


只能print()这种形式打印,否则会出现SyntaxError类型错误

print(x,end=‘ ‘)使用空格来进行不换行

input
input:输出原生的数据类型,输出什么类型的值,就输出什么类型

raw_input:全部以字符串形式输出


3.x版本取消了raw_input方法,只能使用input方式提示输入字符串,该方法和2.x版本的raw_input()相同

如果想要实现与2.x input()输出原生数据类型值,可以使用eval(input())

不等于 <>    != 去除<>只使用!=
除法
/  除法根据除法中的数据类型得出结果类型,整型得出整型,带小数点就为真除

//  整除,结果取整

% 取余,


/  真除,得出真正结果

//  整除,结果取整

% 取余,


支持新式类和经典类,使用新式类时,类继承顺序会影响最终继承的结果


必须使用新式类,解决了类之间继承顺序的问题


改变了顺序操作符的行为


x<y,当x和y类型不匹配返回随即的 bool值


x<y,当x和y类型不匹配时抛出TypeError

注解:还有很多的改变,我这里只是列举一下常用的,如有需要,请联系修改。

二、python数据类型

类型 例子
int 符号整型
如:1,12,13,-1......  , 在2.x版本中范围在-2**31~2**31-1之间,

取值决定于操作系统,不会下于这个范围

float浮点型 有小数点的,如;1.1  1.2 -1.2......
str字符串
如:“hello world”,"python","1".....,注意,字符串需要用引号,单双引号都可以(“hello world”)

如果不用引号引起来,python就不能把这个值识别为字符串而是识别为一个变量值

bool布尔类型  只有两个值,真:True 假:False ,任何非零的数据类型,结果都为真,当结果为int 0时,则为假
long 这个类型只存在2.x版本中,取值范围无限大,取决于可用的虚拟内存
complex 复数  如:3.34j, 3.453e-7j......
元组tuple 如: (“a”,"hell", "python", "2")元组中值是不可以改变的
列表list 如:["a","hello", "python", "2"]列表中的值是可以改变的
字典dict 如:{“name”:"LaiYing","age":25,"job“:”IT"}字典中的值也是可以改变的

三、python基本语法

算术运算

以下例子 a=10 b=20

运算符 描述 示例
+ 加法运算 a+b得30
- 减法运算 a-b得-10
* 乘法运算 a*b得200
/ 除法运算 b/a得2
%
取模,将%号左边的值除以%号右边的值并且

将得到结果的余数返回


10%5得0,10%3得1

20%得6

** 幂,返回x的y次幂,就是返回多少次方 2**8得256
// 取整除,返回x除以y的商的整数部分 9//2得4,9.0//2.0得4.0

比较运算

以下例子a=10 b=20

运算符 描述 示例
== 判断两个对象是否相等 (a==b)is not true
!= 判断两个对象是否不相等 (a != b)is true
<>  在3.x版本中已取消 判断两个对象是否不相等 (a<>b)is true与!=运算符一样
> 大于,返回a是否大于b (a>b)is not true
< 小于,返回a是否小于b (a<b)is true
>= 大于等于,返回a是否大于等于b (a>=b)is not true
<= 小于等于,返回a是否小于等于b (a<=b)is true

赋值运算

以下例子 a=10 b=20

运算符 描述 示例
= 赋值,将右边的值赋值给左边的变量名
c = a + b 将会把a+b的结果

赋值给c

+=
自加赋值,将+=左边的值和+=右边的值相加

然后在把结果赋值给+=左边的值

c +=a 相当于c = c + a
-= 自减赋值 c -= a 相当于 c = c - a
*= 自乘赋值 c *= a 相当于 c = c * a
/= 自除赋值 c /= a 相当于 c = c / a
%= 自取模赋值 c %= a 相当于 c = c % a
**= 自求幂赋值 c **=a 相当于 c = c ** a
//= 自取整赋值 c //=a 相当于 c = c // a

按位运算(二进制运算)

二进制位数 8 7 6 5 4 3 2 1
每位所代表的数字 128 64 32 16 8 4 2 1
60 0 0 1 1 1 1 0 0
13 0 0 0 0 1 1 0 1

好了,我们刚刚知道了10进制如何转2进制了,接下来我们看看如何进行2个10进制数字的位运算

运算符 描述 示例
&
与运算,这个二进制为必须都在2组数中都为真

结果才返回为真


(a & b)得12,二进制位;

0000 1100

| 或运算,这个二进制位只需要在其中一组数据中为真即返回真
(a | b)得61,二进制位;

0011 1101

^ 异或运算,只有这个二进制位在两组数据中不相同就返回真
( a ^ b )得49,二进制位;

0011 0001

<< 左移运算,将a整体向左移2位
a << 2得240,二进制位;

1111 0000

>> 右移运算,将a整体向左移3位
a >> 3得7,二进制位;

0000 0111

我们来看看下面的运算过程

二进制位 8 7 6 5 4 3 2 1 结果
每位所代表的数字 128 64 32 16 8 4 2 1  
60 0 0 1 1 1 1 0 0  
13 0 0 0 0 1 1 0 1  
&与运算 0 0 0 0 1 1 0 0 12
|或运算 0 0 1 1 1 1 0 1 61
^异或运算 0 0 1 1 0 0 0 1 49
a<<2 1 1 1 1 0 0 0 0 240
a >>3 0 0 0 0 0 1 1 1 7

逻辑运算符

运算符 描述 示例
and 且,必须左右两个条件都为真,假如一个为假就为假 1 and 0 ,1为真,0为假,其结果为假
or  或,只要一个为真就为真,否则就为假
1 or  0,, 1 为真就为真,只要有一个条件为真就不

继续判断后面的条件了

not 非,取反

内容参考网络上资料,如有侵权请联系修改。

时间: 2024-10-14 04:32:59

Python的初次接触的相关文章

c++中类的初次接触

下面是我写的简单的代码,初次接触c++中的类,c++真的是博大精深啊,学习c++的路还很长,加油! 1 /*q1.cpp*/ 2 //一个简单的类极其实例化 3 #include<iostream> 4 using namespace std; 5 6 class Point{ 7 public: 8 //设置坐标 9 void setPoint(int x,int y){ 10 xPos = x; 11 yPos = y; 12 } 13 //打印坐标 14 void printPoint(

初次接触scrapy框架

初次接触这个框架,先订个小目标,抓取QQ首页,然后存入记事本. 安装框架(http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html) 创建一个项目,项目根目录输入 scrapy startproject tutorial 在spiders文件夹下面新建一个qq_spider.py,写入内容如下: import scrapy class DmozSpider(scrapy.Spider): name = "dmoz" a

【00】Python爬虫初次开发

我的第00篇博客 Python爬虫初次开发: 这周四讲了正则表达式,晚上就开始摸索着写一个网络爬虫.这个爬虫的功能就是从指定的网页开始,爬取这个网页里所有的链接,然后进入这些链接继续爬取新的链接,不断继续这个过程,并保存下所有爬取到的链接.这个爬虫目前还没有什么实际用处,后续可以在此基础上开发搜索指定信息等功能. 这个Python程序将用到以下模块:urllib, re, time urllib:用来调用urlopen函数打开链接 re:编译正则表达式 time:用于计时[可选] 以下是我的代码

初次接触JQuery

初次接触JQuery 1. 综述 JQuery,是一个JavaScript库,给JavaScript开发带来了极大的便利.它有以下好处:减少了JavaScript的代码量:分离了JavaScript和HTML,在页面里只需要定义id即可:方便地为网站提供Ajax交互. 2. JQuery代码 2.1 函数调用 $(this).hide(); 对当前HTML元素,调用hide函数,即隐藏他. $("p").hide(); 对所有的<p>元素,调用hide函数,即隐藏他. $(

[Docker]初次接触

Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔记. 理论部分 Docker 引擎包括了两个部分,一个守护进程作为server端来管理全部的容器. 一个client.能够远程来控制服务端. Docker有公共的云端仓库 Docker Hub Registry.里面有能够使用的镜像 你能够觉得容器containers就是沙箱box中的一个进程.这个

初次接触modelsim的一些体验

  在网上查找了一些资料来学习,看来看去觉得一篇讲modelsim三种仿真方式的不错,就按着步骤一步步做了,结果可想而知,问题是一个接一个啊,摸索了两天还是有点收获的,且记下. 第一点:操控modelsim的基本方式 1.用户图形界面接口(GUI),在界面也接受命令行输入.(适合菜鸟) 2.DO文件,应该是用TCL脚步语言写的.(升级学习) 第二点:关于在modelsim添加altera仿真库的问题 在网上看到很多关于这方面的资料,但都是比较老的,然后我发现他们想要添加的库基本已经添加在新版 

初次接触CodeSmith

说到开发效率的提高,代码生成器肯定是其中必不可少的重点.说到代码生成器,鼎鼎大名CodeSmith肯定是如雷贯耳. CodeSmith最大的特点是能够自定义模板(通俗的说就是想生成什么样就可以生成什么样子,全部由自己自定义) CodeSmith相关资料CodeSmith官方网站:http://www.codesmithtools.com/CodeSmith5.0.1破解版下载:http://kewlshare.com/dl/0538fcf454d3/CodeSmith.5.0.Professio

动态规划的初次接触,简单分析

一.简单的0,1背包问题 1.题目描述:有n个重量和价值分别为Wi,Vi的物品.从这些物品中挑选出总重量不超过W的物品,求所选方案中价值总和的最大值(注:在0,1背包问题中,每个物品只有一件,可以选择房或者不放). [分析]:对于这样的问题,首先我们可以用最简单容易想到的方法,将所有可能一一例举出来,找到最合适的. 对于函数rec(int i,int j)// 这里的 i 表示的是第几个物品,而 j 表示此时背包的容量. 既然是最朴素,简单的想法,那我们就去想一想当前的这件物品我们是否要把它放入

javaweb中的乱码问题(初次接触时写)

javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2. 读取数据时乱码 (servlet) 1. 在request.getParameter("nam