Python 学习笔记(一):基础与入门

来源:互联网 发布:淘宝直播卖家申请入口 编辑:程序博客网 时间:2024/06/06 01:21

注:因为先前学习过C/C#,Java。故学习Python时只会记录与此前几种语言不同之处

推荐几个学习Python的网站
廖雪峰的教程
菜鸟教程
Python challenge


Python是一种解释型面向对象动态数据类型的高级程序设计语言。

Python简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

Python的优点

Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,用Python开发,许多功能不必从零编写,直接使用现成的即可。
许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
总的来说,Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。

Python的缺点

Python有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。
第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。
第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。

Python安装

这里写图片描述
Python3.5 64位下载

基础语法

命令行模式和Python交互模式

看到类似C:>是在Windows提供的命令行模式
看到>>>是在Python交互式环境下:
在命令行模式下,可以执行python进入Python交互式环境,也可以执行python hello.py运行一个.py文件。
此外,在命令行模式运行.py文件和在Python交互式环境下直接运行Python代码有所不同。Python交互式环境会把每一行Python代码的结果自动打印出来,但是,直接运行Python代码却不会。

使用文本编辑器

Nodepad++,免费使用,有中文界面
但是绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。

Python的交互模式和直接运行.py文件有什么区别呢

直接输入python进入交互模式,相当于启动了Python解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。

直接运行.py文件相当于启动了Python解释器,然后一次性把.py文件的源代码给执行了,你是没有机会以交互的方式输入源代码的。

用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!前提是得有个27’的超大显示器!

输入和输出

输出

print()会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:
这里写图片描述

输入

Python提供了一个input(),可以让用户输入字符串,并存放到一个变量里。

行和缩进(Python用缩进写模块)

学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行

多行语句(新行作为语句的结束符,与;相同)

ython语句中一般以新行作为为语句的结束符

这里写图片描述

这里写图片描述

与;相同作用
这里写图片描述

但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:
这里写图片描述

语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:
这里写图片描述

Python 引号(Python中不特定区分‘’和“”)

Python 接收单引号(’ ),双引号(” ),三引号(”’ “”“) 来表示字符串,引号的开始与结束必须的相同类型的
这里写图片描述

Python注释

python中单行注释采用 # 开头。

python 中多行注释使用三个单引号(”’)或三个双引号(“”“)。
这里写图片描述

动态语言

在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。

变量类型

变量(不需要类型声明)

Python 中的变量赋值不需要类型声明。

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

Python**允许你同时为多个变量赋值**。例如:
a = b = c = 1

您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, “john”

标准数据类型

Python有五个标准的数据类型

  • Numbers(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

Python数字

数字数据类型用于存储数值。

他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。

Python支持四种不同的数字类型:

  • int(有符号整型)
  • long(长整型[也可以代表八进制和十六进制])
  • float(浮点型)
  • complex(复数)

Python字符串

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:

这里写图片描述

Python访问字符串中的值

Python不支持单字符类型,单字符也在Python也是作为一个字符串使用。

Python访问子字符串,可以使用方括号来截取字符串,如下实例:
这里写图片描述

Python字符串更新

你可以对已存在的字符串进行修改,并赋值给另一个变量,如下实例:
这里写图片描述

Python字符串运算符

下表实例变量a值为字符串”Hello”,b变量值为”Python”:
这里写图片描述

bytes型数据

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

Python对bytes类型的数据用带b前缀的单引号或双引号表示

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法

Python List(相当于链表)

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
声明时跟数组相似
这里写图片描述
用索引来访问list中每一个位置的元素,记得索引是从0开始的:
这里写图片描述
当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
这里写图片描述
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
这里写图片描述
也可以把元素插入到指定的位置,比如索引号为1的位置
这里写图片描述
删除list末尾的元素,用pop()方法
要删除指定位置的元素,用pop(i)方法,其中i是索引位置
这里写图片描述
ist里面的元素的数据类型也可以不同
list元素也可以是另一个list,比如:
这里写图片描述
这里写图片描述

Python tuple(元组,不可变的List)

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来

这里写图片描述

Python dict(相当于map)

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list
这里写图片描述
给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。

如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
这里写图片描述

这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
这里写图片描述

如果key不存在,dict就会报错:
要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
这里写图片描述
二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
这里写图片描述
要删除一个key,用pop(key)方法,对应的value也会从dict中删除

List和tuple,dict的比较

列表和元组有几处重要的区别。列表元素用中括号( [ ])包裹,元素的个数及元素的值可以改变。

元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。
元组可以看成是只读的列表。通过切片运算( [ ] 和 [ : ] )可以得到子集

字典元素用大括号({ })包裹,字典是 Python 中的映射数据类型,工作原理类似 Perl 中的关联数组或者哈希表,由键-值(key-value)对构成。几乎所有类型的 Python 对象都可以用作键,不过一般还是以数字或者字符串最为常用。

List和dict的比较

和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。

而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。

Python set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

这里写图片描述
重复元素在set中自动被过滤:
这里写图片描述

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
通过remove(key)方法可以删除元素

set可以看成数学意义上的无序和无重复元素的集合

不可变对象

str是不变对象,而list是可变对象。

对于可变对象,比如list,对list进行操作,list内部的内容是会变化的
这里写图片描述
而对于不可变对象,比如str,对str进行操作呢
这里写图片描述
虽然字符串有个replace()方法,也确实变出了’Abc’,但变量a最后仍是’abc’,应该怎么理解呢?

要始终牢记的是,a是变量,而’abc’才是字符串对象!有些时候,我们经常说,对象a的内容是’abc’,但其实是指,a本身是一个变量,它指向的对象的内容才是’abc’

当我们调用a.replace(‘a’, ‘A’)时,实际上调用方法replace是作用在字符串对象’abc’上的,而这个方法虽然名字叫replace,但却没有改变字符串’abc’的内容。相反,replace方法创建了一个新字符串’Abc’并返回如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串’abc’,但变量b却指向新字符串’Abc’了:
这里写图片描述

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

Python数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
这里写图片描述

Python运算符

Python算术运算符

这里写图片描述

Python赋值运算符

这里写图片描述

Python逻辑运算符(此处有区别)

这里写图片描述

Python成员运算符

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
这里写图片描述

Python身份运算符

身份运算符用于比较两个对象的存储单元
这里写图片描述

条件判断语句(if,else 语法中有:)

elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:
与之前学习的语言语法区别之处,用斜体标注出来了

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

循环

Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来。
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。

for…in循环(相当于forech循环)

这里写图片描述
所以for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句

range()函数,可以生成一个整数序列

再通过list()函数可以转换为list
这里写图片描述

while循环

比如我们要计算100以内所有奇数之和,可以用while循环实现
这里写图片描述

循环使用 else 语句

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
这里写图片描述

没有do-while循环,没有传统意义上的for循环

3 0
原创粉丝点击