Python之路【第一篇】:python简介与杂乱知识汇总

本节内容:html

 

Python发展历史python

1.起源
Python的做者,Guido von Rossum,荷兰人。1982年,Guido从阿姆斯特丹大学得到了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于作计算机相关的工做,并热衷于作任何和编程相关的活儿。
 
在那个时候,Guido接触并使用过诸如Pascal、C、Fortran等语言。这些语言的基本设计原则是让机器能更快运行。在80年代,虽然IBM和苹果已经掀起了我的电脑浪潮,但这些我的电脑的配置很低。好比早期的Macintosh,只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。全部的编译器的核心是作优化,以便让程序可以运行。为了增进效率,语言也迫使程序员像计算机同样思考,以便能写出更符合机器口味的程序。在那个时代,程序员巴不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。
 
这种编程方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程须要耗费大量的时间,即便他已经准确的知道了如何实现。他的另外一个选择是shell。Bourne Shell做为UNIX系统的解释器已经长期存在。UNIX的管理员们经常用shell去写一些简单的脚本,以进行一些系统维护的工做,好比按期备份、文件系统管理等等。shell能够像胶水同样,将UNIX下的许多功能链接在一块儿。许多C语言下上百行的程序,在shell下只用几行就能够完成。然而,shell的本质是调用命令。它并非一个真正的语言。好比说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。
 
Guido但愿有一种语言,这种语言可以像C语言那样,可以全面调用计算机的功能接口,又能够像shell那样,能够轻松的编程。ABC语言让Guido看到但愿。ABC是由荷兰的数学和计算机研究所开发的。Guido在该研究所工做,并参与到ABC语言的开发。ABC语言以教学为目的。与当时的大部分语言不一样,ABC语言的目标是“让用户感受更好”。ABC语言但愿让语言变得容易阅读,容易使用,容易记忆,容易学习,并以此来激发人们学习编程的兴趣。好比下面是一段来自Wikipedia的ABC程序,这个程序用于统计文本中出现的词的总数:
  
   HOW TO RETURN words document:
      PUT {} IN collection
      FOR line IN document:
         FOR word IN split line:
            IF word not.in collection:
               INSERT word IN collection
      RETURN collection

 HOW TO用于定义一个函数。一个Python程序员应该很容易理解这段程序。ABC语言使用冒号和缩进来表示程序块。行尾没有分号。for和if结构中也没有括号() 。赋值采用的是PUT,而不是更常见的等号。这些改动让ABC程序读起来像一段文字。尽管已经具有了良好的可读性和易用性,ABC语言最终没有流行起来。在当时,ABC语言编译器须要比较高配置的电脑才能运行。而这些电脑的使用者一般精通计算机,他们更多考虑程序的效率,而非它的学习难度。除了硬件上的困难外,ABC语言的设计也存在一些致命的问题: 可拓展性差。ABC语言不是模块化语言。若是想在ABC语言中增长功能,好比对图形化的支持,就必须改动不少地方。不能直接进行IO。ABC语言不能直接操做文件系统。尽管你能够经过诸如文本流的方式导入数据,但ABC没法直接读写文件。输入输出的困难对于计算机语言来讲是致命的。你能想像一个打不开车门的跑车么?过分革新。ABC用天然语言的方式来表达程序的意义,好比上面程序中的HOW TO 。然而对于程序员来讲,他们更习惯用function或者define来定义一个函数。一样,程序员更习惯用等号来分配变量。尽管ABC语言很特别,但学习难度也很大。传播困难。ABC编译器很大,必须被保存在磁带上。当时Guido在访问的时候,就必须有一个大磁带来给别人安装ABC编译器。这样,ABC语言就很难快速传播。1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python's Flying Circus。他但愿这个新的叫作Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。Guido做为一个语言设计爱好者,已经有过设计语言的尝试。这一次,也不过是一次纯粹的hacking行为。linux

 
一门语言的诞生
 
1991年,第一个Python编译器诞生。它是用C语言实现的,并可以调用C语言的库文件。从一出生,Python已经具备了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。Python语法不少来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,好比强制缩进。但这些语法规定让Python容易读。另外一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,好比回归等号赋值。Guido认为,若是“常识”上确立的东西,没有必要过分纠结。Python从一开始就特别在乎可拓展性。Python能够在多个层次上拓展。从高层上,你能够直接引入. py文件。在底层,你能够引用C语言的库。Python程序员能够快速的使用Python写. py文件做为拓展模块。但当性能是考虑的重要因素时,Python程序员能够深刻底层,写C程序,编译为.so文件引入到Python中使用。Python就好像是使用钢构建房同样,先规定好大的框架。而程序员能够在此框架下至关自由的拓展或更改。最初的Python彻底由Guido本人开发。Python获得Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成Python的核心团队。他们将本身大部分的业余时间用于hack Python。随后,Python拓展到研究所以外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员能够花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。
 
 
人生苦短,我用python
 
时势造英雄
 
咱们不得不暂停咱们的Python时间,转而看一看瞬息万变的计算机行业。1990年代初,我的计算机开始进入普通家庭。Intel发布了486处理器,windows发布window 3.0开始的一系列视窗系统。计算机的性能大大提升。程序员开始关注计算机的易用性,好比图形化界面。
 
Windows 3.0
 
因为计算机性能的提升,软件的世界也开始随之改变。硬件足以知足许多我的电脑的须要。硬件厂商甚至渴望高需求软件的出现,以带动硬件的更新换代。C++和Java相继流行。C++和Java提供了面向对象的编程范式,以及丰富的对象库。在牺牲了必定的性能的代价下,C++和Java大大提升了程序的产量。语言的易用性被提到一个新的高度。咱们还记得,ABC失败的一个重要缘由是硬件的性能限制。从这方面说,Python要比ABC幸运许多。另外一个悄然发生的改变是Internet。1990年代仍是我的电脑的时代,windows和Intel挟PC以令天下,盛极一时。尽管Internet为主体的信息革命还没有到来,但许多程序员以及资深计算机用户已经在频繁使用Internet进行交流,好比使用email和newsgroup。Internet让信息交流成本大大降低。一种新的软件开发模式开始流行:开源。程序员利用业余时间进行软件开发,并开放源代码。1991年,Linus在comp.os. minix新闻组上发布了Linux内核源代码,吸引大批hacker的加入。Linux和GNU相互合做,最终构成了一个充满活力的开源平台。硬件性能不是瓶颈,Python又容易使用,因此许多人开始转向Python。Guido维护了一个maillist,Python用户就经过邮件进行交流。Python用户来自许多领域,有不一样的背景,对Python也有不一样的需求。Python至关的开放,又容易拓展,因此当用户不知足于现有功能,很容易对Python进行拓展或改造。随后,这些用户将改动发给Guido,并由Gu ido决定是否将新的特征加入到Python或者标准库中。若是代码能被归入Python自身或者标准库,这将极大的荣誉。因为Guido至高无上的决定权,他所以被称为“终身的仁慈独裁者”。Python被称为“Battery Included”,是说它以及其标准库的功能强大。这些是整个社区的贡献。Python的开发者来自不一样领域,他们将不一样领域的优势带给Python。好比Python标准库中的正则表达是参考Perl,而lambda, map, filter, reduce等函数参考了Lisp。Python自己的一些功能以及大部分的标准库来自于社区。Python的社区不断扩大,进而拥有了本身的newsgroup,网站,以及基金。从Python 2.0开始,Python也从maillist的开发方式,转为彻底开源的开发方式。社区气氛已经造成,工做被整个社区分担,Python也得到了更加高速的发展。到今天,Python的框架已经确立。Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python支持解释运行,并能调用C库进行拓展。Python有强大的标准库。因为标准库的体系已经稳定,因此Python的生态系统开始拓展到第三方包。这些包,如Django、web.
 
启示录
 
Python崇尚优美、清晰、简单,是一个优秀并普遍使用的语言。Python在TIOBE排行榜中排行第八,它是Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。Python的发展史能够做为一个表明,带给我许多启示。在Python的开发过程当中,社区起到了重要的做用。Guido自认为本身不是全能型的程序员,因此他只负责制订框架。若是问题太复杂,他会选择绕过去,也就是cut the corner。这些问题最终由社区中的其余人解决。社区中的人才是异常丰富的,就连建立网站,筹集基金这样与开发稍远的事情,也有人乐意于处理。现在的项目开发愈来愈复杂,愈来愈庞大,合做以及开放的心态成为项目最终成功的关键。Python从其余语言中学到了不少,不管是已经进入历史的ABC,仍是依然在使用的C和Perl,以及许多没有列出的其余语言。能够说,Python的成功表明了它全部借鉴的语言的成功。一样,Ruby借鉴了Python,它的成功也表明了Python某些方面的成功。每一个语言都是混合体,都有它优秀的地方,但也有各类各样的缺陷。同时,一个语言“好与很差”的评判,每每受制于平台、硬件、时代等等外部缘由。程序员经历过许多语言之争。其实,以开放的心态来接受各个语言,说不定哪一天,程序员也能够如Guido那样,混合出本身的语言。
 
关键点常识
Python的发音与拼写
Python的意思是蟒蛇,源于做者喜欢的一部电视剧(C呢?)
Python的做者是Guido van Rossum(龟叔)
Python是龟叔在1989年圣诞节期间,为了打发无聊的圣诞节而用C编写的一个编程语言
Python正式诞生于1991年
Python的解释器现在有多个语言实现,咱们经常使用的是CPython(官方版本的C语言实现),其余还有Jython(能够运行在Java平台)、IronPython(能够运行在.NET和Mono平台)、PyPy (Python实现的,支持JIT即时编译)
Python目前有两个版本,Python2和Python3,最新版分别为2.7.13和3.7.0
Life is shot, you need Python. 人生苦短,我用Python。
2018年10月份编程语言排行榜  https://www.tiobe.com/tiobe-index/ 

TIOBE Index for October 2018

 
 
2. Python优缺点
优势
简单————Python是一种表明简单主义思想的语言。阅读一个良好的Python程序就感受像是在读英语同样,尽管这个英语的要求很是严格!Python的这种伪代码本质是它最大的优势之一。它使你可以专一于解决问题而不是去搞明白语言自己。
 
易学————就如同你即将看到的同样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
 
免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你能够自由地发布这个软件的拷贝、阅读它的源代码、对它作改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为何Python如此优秀的缘由之一——它是由一群但愿看到一个更加优秀的Python的人创造并常常改进着的。
 
高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
 
可移植性————因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工做在不一样平台上)。若是你当心地避免使用依赖于系统的特性,那么你的全部Python程序无需修改就能够在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、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程序更加易于移植。
 
面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其余主要的语言如C++和Java相比,Python以一种很是强大又简单的方式实现面向对象编程。
 
可扩展性————若是你须要你的一段关键代码运行得更快或者但愿某些算法不公开,你能够把你的部分程序用C或C++编写,而后在你的Python程序中使用它们。
 
丰富的库————Python标准库确实很庞大。它能够帮助你处理各类工做,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI (图形用户界面)、Tk和其余与系统有关的操做。记住,只要安装了Python,全部这些功能都是可用的。这被称做Python的“功能齐全”理念。除了标准库之外,还有许多其余高质量的库,如wxPython、Twisted和Python图像库等等。
 
规范的代码————Python采用强制缩进的方式使得代码具备极佳的可读性。
 
缺点
运行速度,有速度要求的话,用C++改写关键部分吧。
国内市场较小(国内以python来作主要开发的,目前只有一些web2.0公司)。但时间推移,目前不少国内软件公司,尤为是游戏公司,也开始规模使用他。
中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容仍是只能看英语版。
构架选择太多(没有像C#这样的官方.net构架,也没有像ruby因为历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另外一个侧面说明,python比较优秀,吸引的人才多,项目也多。
 
 
3. Python应用场景
Web应用开发
 
Python常常被用于Web开发。好比,经过mod_wsgi模块,Apache能够运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通讯。一些Web框架,如Django,TurboGears,web2py,Zope等,可让程序员轻松地开发和管理复杂的Web程序。
 
操做系统管理、服务器运维的自动化脚本
 
在不少操做系统里,Python是标准的系统组件。大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能够在终端下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,好比Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操做系统功能的库。经过pywin32这个第三方软件包,Python可以访问Windows的COM服务及其它Windows API。使用IronPython,Python程序可以直接调用.Net Framework。通常说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。
 
科学计算
 
NumPy,SciPy,Matplotlib可让Python程序员编写科学计算程序。
 
桌面软件
 
PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器。
 
服务器软件(网络软件)
 
Python对于各类网络协议的支持很完善,所以常常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),而且提供了多种工具,被普遍用于编写高性能的服务器软件。
 
游戏
 
不少游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。
 
构思实现,产品早期原型和迭代
 
YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。
 
Python 是一门什么样的语言?(解释性语言)
 
编译和解释的区别是什么?
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的。

pyc 文件:
执行Python代码时,若是导入了其余的 .py 文件,那么,执行过程当中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译以后产生的字节码。
ps:代码通过编译能够产生字节码;字节码经过反编译也能够获得代码。程序员

 

Python环境
安装Python
 
windows:
 
一、下载安装包
二、安装
    默认安装路径:C:\python27
三、配置环境变量
    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
    如:原来的值;C:\python27,切记前面有分号
 
    
linux:
 
无需安装,原装Python环境
ps:若是自带2.6,请更新至2.7
 
 
更新Python
 
windows:
卸载重装便可
 
linux:
 
Linux的yum依赖自带Python,为防止错误,此处更新其实就是再安装一个Python
 
查看默认Python版本
python -V
一、安装gcc,用于编译Python源码
    yum install gcc
二、下载源码包, https://www.python.org/ftp/python/
三、解压并进入源码文件
四、编译安装
    ./configure
    make all
    make install
五、查看版本
    /usr/local/bin/python2.7 -V
六、修改默认Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
七、防止yum执行异常,修改yum使用的Python版本
    vi /usr/bin/yum
    将头部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6

 

内容编码

python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)web

  • ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其余西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,因此,ASCII码最多只能表示 256 个符号。

python3解释器的默认编码为unicode,显然ASCII码没法将世界上的各类文字和符号所有表示,因此,就须要新出一种能够表明全部字符和符号的编码,即:Unicode正则表达式

  • Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每一个字符设定了统一而且惟一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,

注:此处说的的是最少2个字节,可能更多算法

  • UTF-8,是对Unicode编码的压缩和优化,他再也不使用最少使用2个字节,而是将全部的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

因此,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),若是是以下代码的话:shell

报错:ascii码没法表示中文数据库

#!/usr/bin/env python

print "你好,世界" 

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:编程

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

print "你好,世界"

  

执行脚本传入参数与注释

Python有大量的模块,从而使得开发Python程序很是简洁。类库有包括三中:

  • Python内部提供的模块
  • 业内开源的模块
  • 程序员本身开发的模块


Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

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

import sys

print sys.argv

单行注视:# 被注释内容

多行注释:""" 被注释内容 """

 

流程控制

if... elif... elif ...... else

while(break/continue) else 当跳出循环后执行else语句

for(break/continue) else 当跳出循环后执行else语句

 

变量

为了更充分的利用内存空间以及更有效率的管理内存,变量是有不一样的类型的,以下所示:

 

怎样知道一个变量的类型呢?

  • 在python中,只要定义了一个变量,并且它有数据,那么它的类型就已经肯定了,不须要我们开发者主动的去说明它的类型,系统会自动辨别
  • 可使用 type(变量的名字),来查看变量的类型

变量名:由字母下划线数字组成,且数字不能开头

 

三元运算

result = 值1 if 条件 else 值2

若是条件为真:result = 值1
若是条件为假:result = 值2

 

万恶的字符串拼接

python中的字符串在C语言中体现为是一个字符数组,每次建立字符串时候须要在内存中开辟一块连续的空,而且一旦须要修改字符串的话,就须要再次开辟空间,万恶的+号每出现一次就会在内存中从新开辟一块空间

python一切皆对象

好比:经常使用的字符串、数字、列表、字典、元组都是来自于其对应的内置类,对应为字符串类str、数字类int、列表类list、字典类dict、元组类tuple...

 

python2与3的某些区别

  1. python3的 print() 函数;python2为 print
  2. python3字符编码默认为unicode;python2为ascii 码
  3. 某些库更名了:

python2

python3

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

 

输出

字符串的格式化输出:
下面是完整的,它能够与%符号使用列表:

格式符号 转换
%c 字符
%s 经过str() 字符串转换来格式化
%i 有符号十进制整数
%d 有符号十进制整数
%u 无符号十进制整数
%o 八进制整数
%x 十六进制整数(小写字母)
%X 十六进制整数(大写字母)
%e 索引符号(小写'e')
%E 索引符号(大写“E”)
%f 浮点实数
%g %f和%e 的简写
%G %f和%E的简写

 

age = 18
name = "qinglong"

# 几种格式化输出的方式 print("名字是 %s, 年龄是 %d" % (name, age)) print("名字是 {n}, 年龄是 {a}".format(n=name, a=age)) # 可使用format()函数进行格式化输出 print("名字是 {0}, 年龄是 {1}".format(name, age)) print("名字是 {n}, 年龄是 {a}".format_map({"n": name, "a": age})) # format_map()函数传入的参数是一个字典

  

输入

python2中raw_input()

  • raw_input()的小括号中放入的是,提示信息,用来在获取数据以前给用户的一个简单提示
  • raw_input()在从键盘获取了数据之后,会存放到等号右边的变量中
  • raw_input()会把用户输入的任何值都做为字符串来对待

python3版本中,没有raw_input()函数,只有input(),而且python3中的input()与python2中的raw_input()功能同样

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

# 将用户输入的内容赋值给 name 变量
#name = raw_input("请输入用户名:") # python2 name = input("请输入用户名:") # python3 # 打印输入的内容 print(name)

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

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

import getpass

# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")

# 打印输入的内容
print(pwd)

  

运算符

python支持如下几种运算符


1.算术运算符
下面以a=10, b=20为例进行计算

运算符 描述 实例
+ 两个对象相加a + b 输出结果30
- 获得负数或是一个数减去另外一个数a - b 输出结果-10
* 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果200
/ x除以yb / a 输出结果 2
// 取整除 返回商的整数部分9//2 输出结果4 , 9.0//2.0 输出结果4.0
% 取余 返回除法的余数b % a 输出结果 0
** 返回x的y次幂a**b 为10的20次方, 输出结果100000000000000000000

 

>>> 9/2.0
4.5
>>> 9//2.0
4.0

  

2.赋值运算符

运算符 描述 实例
= 赋值运算符 把=号右边的结果给左边的变量num=1+2*3 结果num的值为7

 

>>> a, b = 1, 2
>>> a
1
>>> b
2

  

3.复合赋值运算符

运算符 描述 实例
+= 加法赋值运算符 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

 

4.经常使用的数据类型转换

函数 说明
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 建立一个复数
str(x ) 将对象x 转换为字符串
repr(x ) 将对象x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列s 转换为一个元组
list(s ) 将序列s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串

 

a = '100'  # 此时a的类型是一个字符串,里面存放了100这3个字符
b = int(a) # 此时b的类型是整型,里面存放的是数字100
print("a=%d" % b)

  

5.比较(即关系)运算符

运算符 描述 示例
== 检查两个操做数的值是否相等,若是是则条件变为真。 如a=3,b=3则(a == b) 为true.
!= 检查两个操做数的值是否相等,若是值不相等,则条件变为真。 如a=1,b=3则(a != b) 为true.
<> 检查两个操做数的值是否相等,若是值不相等,则条件变为真。 如a=1,b=3则(a <> b) 为true。这个相似于!= 运算符
> 检查左操做数的值是否大于右操做数的值,若是是,则条件成立。 如a=7,b=3则(a > b) 为true.
< 检查左操做数的值是否小于右操做数的值,若是是,则条件成立。 如a=7,b=3则(a < b) 为false.
>= 检查左操做数的值是否大于或等于右操做数的值,若是是,则条件成立。 如a=3,b=3则(a >= b) 为true.
<= 检查左操做数的值是否小于或等于右操做数的值,若是是,则条件成立。 如a=3,b=3则(a <= b) 为true.

 

6.逻辑运算符

运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 若是x 为False,x and y 返回False,不然它返回y 的计算值。 (a and b) 返回20。
or x or y 布尔"或" - 若是x 是True,它返回True,不然它返回y 的计算值。 (a or b) 返回10。
not not x 布尔"非" - 若是x 为True,返回False 。若是x 为False,它返回True。 not(a and b) 返回False

 

文件操做

  • 打开文件,或者新创建一个文件
  • 读/写数据
  • 关闭文件

1.打开文件
在python,使用open函数,能够打开一个已经存在的文件,或者建立一个新文件
open(文件名,访问模式)

访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。
a 打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。
ab 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。
a+ 打开一个文件用于读写。若是该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。若是该文件不存在,建立新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。
ab+ 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。若是该文件不存在,建立新文件用于读写。

 

2.关闭文件
close( )
示例以下:

f = open('test.txt', 'w')  # 新建一个文件,文件名为:test.txt
f.close()  # 关闭这个文件

  

3.文件的读写
<1>写数据(write)
使用write()能够完成向文件写入数据

示例以下:

f = open('test.txt', 'w')  # 打开文件
f.write('hello world, i am here!')  # 写入数据
f.close()  # 关闭文件

注意:
若是文件不存在那么建立,若是存在那么就先清空,而后写入数据

<2>读数据(read)
使用read(num)能够从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),若是没有传入num,那么就表示读取文件中全部的数据

示例以下:

f = open('test.txt', 'r')  # 以只读方式打开文件
content = f.read(5) # 读取5个字符 print(content) print("-" * 30)
content = f.read() # 读取剩下的全部 print(content)
f.close()

注意:
若是open是打开一个文件,那么能够不用写打开的模式,即只写 open('test.txt'),默认以只读方式打开
若是读了屡次,那么后面读取的数据是从上次读完后的位置开始的

<3>读数据(readlines)
就像read没有参数时同样,readlines能够按照行的方式把整个文件中的内容进行一次性读取,而且返回的是一个列表,其中每一行的数据为一个元素

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

f = open('test.txt', 'r')
contents = f.readlines()
print(type(content))  # 是一个列表,每个元素为一行
i=1 for line in contents: print("%d:%s" % (i, line)) i += 1 f.close()

  

<4>读数据(readline)

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

f = open('test.txt', 'r')
content = f.readline() print("1:%s" % content)
content = f.readline() print("2:%s"%content)
f.close()

  

想想:
若是一个文件很大,好比5G,试想应该怎样把文件的数据读取到内存而后进行处理呢?

制做文件的备份

 1 # -*-coding:utf-8 -*-
 2 
 3 oldFileName = input("请输入要拷贝的文件名字:")
 4 
 5 oldFile = open(oldFileName,'r')
 6 
 7 # 若是打开文件
 8 if oldFile:
 9 
10     # 提取文件的后缀
11     fileFlagNum = oldFileName.rfind('.')
12     if fileFlagNum > 0:
13         fileFlag = oldFileName[fileFlagNum:]
14 
15     # 组织新的文件名字
16     newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag
17 
18     # 建立新文件
19     newFile = open(newFileName, 'w')
20 
21     # 把旧文件中的数据,一行一行的进行复制到新文件中
22     for lineContent in oldFile.readlines():
23         newFile.write(lineContent)
24 
25     # 关闭文件
26     oldFile.close()
27     newFile.close()
相关文章
相关标签/搜索