list 与 tuple

list 类似 数组

tuple 跟 list 一样, 只是一旦定义, 里边的内容不可以改变.

这样, 上边的内容就不可以改变了.

"可变的" tuple, 不是说 tuple 是不可以改变的么?

想内存

dict 与 set

dict 是 python内置字典, 其他语言中称为 map, 使用键-值(key-value)存储,具有极快的查找速度.

dict 中是没有顺序先后关系的.

和list比较,dict有以下几个特点:

1. 查找和插入的速度极快,不会随着key的增加而变慢

2. 需要占用大量的内存,内存浪费多

而list相反:

1. 查找和插入的时间随着元素的增加而增加

2. 占用空间小,浪费内存很少

所以,dict是用空间来换取时间的一种方法.

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象.

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key.

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

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

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

b = a.replace('a', 'A')

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

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

函数

可以返回多个值(其实就是一个 tuple)

默认参数的坑

先定义一个函数,传入一个list,添加一个END再返回:

当你正常调用时,结果似乎不错

当你使用默认参数调用时,一开始结果也是对的

但是,再次调用add_end()时,结果就不对了

很多初学者很疑惑,默认参数是[],但是函数似乎每次都“记住了”上次添加了'END'后的list

原因解释如下:

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,

不再是函数定义时的[]了.

所以,定义默认参数要牢记一点:默认参数必须指向不变对象

要修改上面的例子,我们可以用None这个不变对象来实现

为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象

不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

可变参数

在函数内部,参数numbers接收到的是一个tuple, 因此,函数代码完全不变, 但是,调用该函数时,可以传入任意个参数,包括0个参数:

如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做

这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见

关键字参数: **kw, 把参数转变成一个 dict.

参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数.

最神奇的是通过一个tuple和dict,你也可以调用上述函数:

看来参数传递, 还真有点问题.

要注意定义可变参数和关键字参数的语法:

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

模块

模块的好处:

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块.

你也许还想到,如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块

现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz.

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,

因为__init__.py本身就是一个模块,而它的模块名就是mycompany

第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;

第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;

第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;

以上就是Python模块的标准文件模板,当然也可以全部删掉不写,但是,按标准办事肯定没错

导入sys模块后,我们就有了变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能

sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称,例如:

运行python3 hello.py获得的sys.argv就是['hello.py']

运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael]。

最后,注意到这两行代码

当我们在命令行运行hello模块文件(本身)时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块

通过命令行运行时执行一些额外的代码,最常见的就是运行测试。

作用域

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_前缀来实现的

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;

类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等

之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量.

安装第三方库

windows 确保安装python时勾选了pip和Add python.exe to Path.

在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。

注意:Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3

现在,让我们来安装一个第三方库——Python Imaging Library,这是Python下非常强大的处理图像的工具库。不过,PIL目前只支持到Python 2.7,并且有年头没有更新了,因此,基于PIL的

Pillow项目开发非常活跃,并且支持最新的Python 3

一般来说,第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:

pip install Pillow, 耐心等待下载并安装后,就可以使用Pillow了

模块搜索路径

当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错

默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

如果我们要添加自己的搜索目录,有两种方法:

一是直接修改sys.path,添加要搜索的目录:

这种方法是在运行时修改,运行结束后失效.

第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

python干货_python 基础干货 02相关推荐

  1. python正则_Python基础12之Python正则

    上图施工计划,已完成专题: 1.数字专题 2.字符串专题 3.列表专题 4.流程控制专题 5.编程风格专题 6.函数使用专题 7.面向对象编程(上篇) 8.面向对象编程(下篇) 9.Python基础9 ...

  2. python 常见函数_Python基础函数:初学者常用的十个Python函数,非常全面!

    shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查看等方法,还提供了对文件以及目录的路径操作.shutil模块提供了移动.复制. ...

  3. guido正式发布python年份_Python 基础学习笔记.docx

    Python 基础学习笔记 基于<Python语言程序设计基础(第2版)> 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备, ...

  4. python异常处理_Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化...

    推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书购买链接(京东):配 ...

  5. python 与_Python基础 第一个 Python 程序

    目标 第一个 HelloPython 程序 Python 2.x 与 3.x 版本简介 执行 Python 程序的三种方式 解释器 -- python / python3 交互式 -- ipython ...

  6. ppt python 爬虫_python基础教程 PPT-python为什么叫爬虫

    看过了Python基础教程,接下来应该怎么做 看完基础教程代表你已经入门了,接下来就需要你做一下项目,把书本上的知识转化为自己的,活学活用,之后再进行中高级的学习! Python基础教程的介绍 本书包 ...

  7. python 空语句_Python基础语法总结

    学习任何一门编程语言,首先要了解这门编程语言的语法要求,掌握好基础语法是学好一门编程语言的第一步 1.程序组成及标识符 Pyhton程序是由语句和表达式组成的,示例代码如下图所示. 语句一般是使用关键 ...

  8. python多态_Python基础入门18节-第十六节 面向对象如何理解多态

    多态是面向对象的一大特性,Python本身也是一门多态性的语言.在Python中要实现多态,还是得借助于上节提到的继承. 假设有这么一个场景,在夏季我们可以看到荷花.牡丹花.太阳花,夏天一到这些花全都 ...

  9. array python 交集_Python基础(二)——列表和元组

    Python中最基本的数据结构是序列,序列中的每一个元素都有编号,即索引(从左到右第一个索引为0,从右到左第一个索引为-1). python提供的序列类型在所有程序设计语言中是最丰富.最灵活,也是功能 ...

最新文章

  1. runat=server
  2. SpringMVC小结
  3. java ehcahce刷新_Spring整合ehcache 注解实现查询缓存,并实现实时缓存更新或删除...
  4. html css 知识回顾2
  5. windows隐藏python运行时的终端
  6. 前端学习(1637):前端系列实战课程之调试问题和规范
  7. SCPPO(二十):系统统一身份认证的改造之路
  8. wincc怎么做数据库_关于WINCC通过PLCSIM来进行仿真中要怎么设置?
  9. LitePal 数据库使用方法(最新2.0LitePal数据库适用)
  10. JLink下载hex、bin文件
  11. 第十四章 C语言头文件的编写_C语言模块化编程中的头文件
  12. 自动语音呼叫中心系统
  13. 效率神器----WOX
  14. HE4484E芯片资料
  15. Mybatis中 if 语句使用空格问题
  16. CentOS 7安装并启动Google浏览器
  17. mysql-发生系统错误1067
  18. Git使用-git init
  19. 【Node.js】 npm与包
  20. 好程序员web前端教程分享网页设计需要学那些东西?

热门文章

  1. honeywell新风系统控制面板说明_新风系统——不开窗也能清新呼吸
  2. [蓝桥杯][2018年第九届真题]迷宫与陷阱(三维数组标记BFS)
  3. Mind Control CodeForces - 1291C(思维)
  4. Quadratic equation(二次剩余)2019牛客多校第九场
  5. html特效指令,vue2——指令v-text v-html v-bind
  6. android 模拟来电广播,在Android模拟器上模拟来电
  7. 于金刚消息引擎服务器,基于MQTT的安全通信服务器的研究与实现
  8. PAT_B_1090_C++(25分)
  9. java 创建定时器_SpringBoot创建定时任务
  10. python xml et_Python 标准库之 XML(下)