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,一经查实,立即删除!

相关文章

在centOS7中装mysql_在 CentOS7 上安装 MySQL5.7

在 CentOS7 上安装 MySQL5.71 通过 SecureCRT 连接到阿里云 CentOS7 服务器;2 进入到目录 /usr/local/ 中:cd /usr/local/3 创建目录 /usr/local/tools,如果有则忽略:mkdir -p tools4 创建 /usr/local/mysql 目录,如果…

asp mysql insert_用asp把表单数据插入数据库的2种常用方法

用asp把表单数据插入数据库的2种常用方法:1.直接使用sql语句的优点:速度快,不耗资源缺点:不能传递太长的字段内容,字段比较多时不易排错.推荐有经验的编程者优先考虑.具体操作:假设表单中有以下字段:username,password,sex,age对应的,在程序中有username,password,s…

mysql min怎么用_MySQL中MIN()函数的使用教程

MySQL的MIN函数是用来找出一个记录集最小值的记录。要了解MIN函数考虑的EMPLOYEE_TBL表具有以下记录:mysql> SELECT * FROM employee_tbl;--------------------------------------------| id | name | work_date | daily_typing_pages |------------------------…

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:…

python pandas 行数_Python Pandas:增加最大行数

我正在处理一个大文本文件(500k行),格式如下:S1_A160.141,0.0093402216497486760.141,4.192618196894668E-50.11,0.014122135626540204S1_A170.188,2.3292323316081486E-60.469,0.0079287068567941380.172,3.726771730573038E-5我正在使用下面的代码返回每个系列的相…

python中rim的用法_Python并发开发简介

Python的并发程序可以使用multiprocessing库、threading库、asyncio库、concurrent.futures库以及selectors库等等协助编写:multiprocessing库可以创建多个进程,由系统协调调度各个任务;threading库则是创建多个线程,由Python解释…

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

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

fedora java 开发环境_在Linux(Fedora)下搭建JAVA开发环境

参考ORACLE的官方文档:https://docs.oracle.com/javase/tutorial/getStarted/cupojava/index.htmlJAVA开发基本上有这三个平台:"Hello World!" for the NetBeans IDE"Hello World!" for Microsoft Windows"Hello World!" …

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…

java 和 区别_java 和 =的区别

java >> 和 >>> 以及 >>> 的区别可能大家都知道java中>> 和 >>> 的区别,那这里我也啰嗦一下,>> 和 >>> 都是右移操作,只不过>>>是无符号右移,也就是右移之后高位…

java exception 二次抛出_java – 如何在scheduleWithFixedDelay抛出异常时重新启动计划?...

你可能应该在一个while(true)循环中包含try块,因为如果第一次运行没有抛出异常,你将退出你的方法,如果第二次调用抛出一个,你将无法捕获它.我还会在自己的线程中运行递归调用,以避免在事情变坏时出现StackOverFlow错误的风险.所以它看起来像这样:private void start…

深度学习试题_高中生物:今年高考试题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提供高级文件搜索,并支…

JAVA vector的遍历_谈谈vector容器的三种遍历方法

说明:本文仅供学习交流。转载请标明出处。欢迎转载!vector容器是最简单的顺序容器,其用法相似于数组。实际上vector的底层实现就是採用动态数组。在编敲代码的过程中。经常会变量容器中的元素,那么怎样遍历这些元素呢?…

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…