python干货_python 基础干货 02

list 与 tuple

list 类似 数组

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

f49cd06992d69f9d89b7291055cc9087.png

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

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

b3bc874d8e659c0da2a5f033945b71f3.png

想内存

0917868cbf5d40e028e5bcd7350defba.png

15a8c8a4b5666fcebc46ddb846f5ceb0.png

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作为输入集合:

a3185ff8e65751137457b4453061a396.png

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

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

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

e3a1d364fb3e26373256b192ec3ec11b.png

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

40040aae336f3f4123022b11a621a057.png

函数

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

默认参数的坑

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

72e5e1cac55ae726e9d409fd86fa91c5.png

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

f5ffaf247138611bc436f24412003308.png

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

6f6ad764573f1ad0ab5631789ab42bf9.png

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

6b7aca9020916ea1fd9de20636d52dc5.png

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

原因解释如下:

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

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

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

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

bd26ad319902303fd4601245f5b02a35.png

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

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

可变参数

2b5d4eccdd87fb2f7db6b5ac5f074afb.png

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

cbb872b8dddd1bcae5b636d4a1f53275.png

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

49406120965ebdf7cc7fef24cf3f996e.png

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

91713fd1258dd7e737ac4eb0c6f3487d.png

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

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

参数组合

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

5750fff44dcb2feb2122a0f92c67166c.png

87cfe6f5a361366c16e5f9c8482c7197.png

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

79504c405dbcd97eea14a1e4729abb1e.png

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

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

*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

c6b8c20a0e5996fd7da8a9e2899babb4.png

第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]。

最后,注意到这两行代码

5eb301175a8c291c6dd198f42f39e110.png

当我们在命令行运行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变量中:

d0846aaa0caaf2f71432db2e9e330696.png

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

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

6132f0ea7b04c10f550992bd3ae9b18e.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql安装目录问题_Windows下MySQL的安装目录问题

今天发现一个MySQL的问题,当把MySQL的文件目录安放在t字母打头的目录下时,比如d:/test目录,mysql服务就起不来了,报告找不到文件:D:/test/mysql>bin/mysqld-nt.exe --console090811 10:09:55 [ERROR] Cant find messagefile D:…

大学考试分数越高学分越多吗_大学的绩点和学分有什么用?影响学生毕业吗

原标题:大学的绩点和学分有什么用?影响学生毕业吗网友一:读大学也要关心成绩,绩点和学分是两个重要指标,到底是什么,怎么计算?有什么用处?为什么很重要?面试官最看重哪些…

pandas输出到excel_python读写excel等数据文件方法汇总

python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv、txt等)、excel文件、数据库文件、api等。下面整理下python有哪些方式可以读取数据文件。1. python内置方法(read、readline、readlines)read()&a…

dijkstra算法_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法

讲在前面的话,图的算法太多,理论知识肯定一篇文章讲不完,关于理论知识大家可以参考教材Sedgewick的《算法》或reference的链接,本文主要还是想在一篇文章中记录六种算法的Python代码。同样想吐槽一下,虽然网上博客很多&#xff0c…

深度学习试题_高中生物:今年高考试题3点显著变化及5个备考建议!不看准吃亏...

新课标下的新高考即将开启,最后一届旧高考模式在不同寻常的2020年七月份已圆满结束。今年全国Ⅰ卷理综生物试题有几个明显变化。1.内容、范围不变,考查理解能力和实践能力加强作为过渡期的高考,全国高考Ⅰ卷理综生物试题题型结构保持不变&…

电脑工具栏怎么调整到下面_雷电模拟器4.0怎么玩召唤与合成 一键下载轻松游玩 - 工具软件...

召唤与合成是一款既不是卡牌,也不是消除,也不算策略的高烧脑解谜手游,很多玩家想要利用雷电模拟器来在电脑上运行手游,却不知道怎么操作,下面就来教教大家如何在雷电模拟器上玩召唤与合成。1、首先要下载游戏&#xff…

ESP8266网络相框采用TFT_eSPI库TJpg_Decoder库mixly库UDP库实现图片传送

用ESP8266和TFT_ESPI模块来显示图片数据。具体来说,我们将使用ILI9431显示器作为显示设备,并通过UDP协议将图片数据从发送端传输到ESP8266。最后,我们将解析这些数据并在TFT屏幕上显示出来。在这个过程中,我们将面临一些编程挑战&…

c++ vector 一部分_为什么现在的手机都采用Type-C接口?它到底好在哪里?看完你就明白了...

不知道你们有没有发现,现如今的安卓手机几乎都使用Type-C接口。前两年还只是大部分手机采用的Micro USB接口,只有很小一部分使用的是Type-C接口。那到底是什么原因导致它,能在那么快的速度几乎在业内通用呢?一、使用方便&#xff…

java listen_Java进阶-IO基础

计算机最重要的功能是处理数据。一个有用的计算机语言需要拥有良好的IO功能,以便让未处理的数据流入程序,让已处理的数据流出。与其他语言相比,Java的IO功能显得复杂。在其他语言中,许多IO功能(比如读取文件),是被封装…

gorm preload 搜索_文件太多忘记了文件放在什么地方?那你可以试试这款文件搜索工具...

忘记了文件放在什么地方?文件太多不能一下子找到?那么你也许可以试试这款软件——ProFind for mac版,这是一款适用于macOS系统的文件搜索工具,它具有强大的功能和出色的性能,可为macOS提供高级文件搜索,并支…

c++ ftp服务端_FTP客户端软件介绍及使用

FTP客户端软件介绍及使用 客户端软件: ftp,lftp,lftpget,wget,curl ftp -A ftpserver port -A 主动模式 –p 被动模式 lftp –u username ftpserver lftp usernameftpserver lftpget ftp://ftpserver/pub/file gftp&am…

java中怎么使用json数据_JAVA中使用JSON进行数据传递

1.是不是只有xml传递数据的技术才是webservice?可以这么理解。webservice是基于SOAP协议,SOAP协议是基于XML的文本协议。所以webservice可以简单理解为是基于XML的传输技术,好比HTML是基于文本的传输协议。2.servlet是服务端的java程序的统称…

java 限制参数类型_java定义受限制的类型参数操作

有时您可能想限制可以在参数化类型中用作类型参数的类型。 例如,对数字进行操作的方法可能只希望接受Number或其子类的实例。 这就是有界类型参数的用途。受限制参数类型的方法示例要声明有界类型参数,请列出类型参数的名称,后跟extends关键字…

安卓手机运行ios教程_英雄联盟手游傻瓜安装教程,IOS/安卓双端可用!

软件/资料获取方式在文末正文:前几天发哥预告了一下LOL手游上线的事,本来以为国服也会同步上线,结果也是意料之中的跳票了,让我不禁想起当年玩魔兽世界时国服万年的TBC,不过据说LOL推迟上线是怕影响王者荣耀5周年庆典&…

easy excel date 类型解析报错_ptarchiver原理解析

pt-archiver原理解析作为MySQL DBA,可以说应该没有不知道pt-archiver了,作为pt-toolkit套件中的重要成员,往往能够轻松帮助DBA解决数据归档的问题。例如线上一个流水表,业务仅仅只需要存放最近3个月的流水数据,三个月前…

设计师电脑推荐笔记本_笔记本电脑选购推荐全攻略

笔记本电脑现如今在我们的生活中出镜率如此之高,不论是学生党查阅资料还是上班族的忙碌办公,抑或是电竞爱好者的游戏体验,都要依靠笔记本电脑来完成,但对于它的选购方法你了解多少?一千个人就有一千种不同的标准&#…

python内循环只执行一次_如何1分钟内从3600只股种选出黑马股,仅分享这一次(太透彻了)...

“1234”操盘定理中,1是指如何持牛股,2是指观念要正确,3是指看破十个现象,4是指抓热点。具体讲解下选股步骤盘后我们怎么去快速选出超短线需要密切关注的票呢?其实选股方法少说也有几千种,我想没有人统计过&#xff0…

java 运行时类型_Java基础之RTTI 运行时类型识别

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。Class类Class类是"类的类"(class of classes)。如果…

指定的服务已经标记为删除_你的电话号码被标记过吗?你知道这件事情还能赚钱吗?...

今天闲来无事和大家唠唠赚钱的小副业。“电话标记”,我被这事困惑了很多年,最近解决了,同时还发现,这个信息差能挣钱,文末还给到方法,执行力强的伙伴原样照做,0成本,马上开搞&#x…

mplab x ide 中文使用手册_SCI必备利器:翻译又快又准,强推这款超牛X的神器!...

随手转发给好友和朋友圈 编辑:科研小通再分享一款翻译神器,不用调用Google服务器,速度超快。实时翻译,服务器速度杠杠的。今天给大家安利一款超牛X的翻译神器:Mate Translate。官网首页https://gikken.co/mate-transla…