Python
2019-12-31 09:48:38 2 举报
AI智能生成
登录查看完整内容
Python
作者其他创作
大纲/内容
单词
print
打印
Defined(define)
定义
synataxError
语法错误
NameErrror
名字错误
Invalid
无效的
Character
字符
python安装的目录
DLLs
库文件
Doc
文档
include
包含所对应的一些依赖
Lib
libs
本身解释器运行需要的一些东西
Scripts
pip
包管理器
tcl
Tools
解释器python.exe+Lib(内置库)+pip(包管理器:pip.exe)
转义符
换行符:linux:\"\\" windows:\"\\\" mac:\"\\" python:\"\\"制表符:python:\"\\t\"转义符:python:\"\\\"原义符\"python:r\" \" #raw原始字符串反斜杠转义字符表: \\(在行尾时)\t续行符 \\\\\t反斜杠符号 \\'\t单引号 \\\
其他
pass 语句
填充语法空白
系统位数取值范围
32位 2**31-1 64位 2**63-1
缩进 区分代码块 官方规定四个空格
Python
python基础初识。
1. 运行python代码。
在d盘下创建一个t1.py文件内容是:print('hello world')打开windows命令行输入cmd,确定后 写入代码python d:t1.py 您已经运行了第一个python程序, 即:终端---->cmd-----> python 文件路径。 回车搞定~
2. 解释器
上一步中执行 python d:t1.py 时,明确的指出 t1.py 脚本由 python 解释器来执行。如果想要类似于执行shell脚本一样执行python脚本,例: ./t1.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:#!/usr/bin/env pythonprint \
3. 注释。
当行注释:# 被注释内容多行注释:'''被注释内容''',或者\"\"\"被注释内容\"\"\"
4. 变量
变量是什么? 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。4.1、声明变量lux = '鲁迅本人'上述代码声明了一个变量,变量名为: lux,变量name的值为:\"鲁迅本人\
5. 常量
6. 基础数据类型(初始)。
什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型
6.1、整数类型(int)。
int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
6.2、字符串类型(str)。
6.3、布尔值(True,False)。
7. 程序交互
#!/usr/bin/env python# -*- coding: utf-8 -*- # 将用户输入的内容赋值给 name 变量name = input(\"请输入用户名:\") # 打印输入的内容print(name)执行脚本就会发现,程序会等待你输入姓名后再往下继续走。可以让用户输入多个信息,如下#!/usr/bin/env python# -*- coding: utf-8 -*-name = input(\"What is your name?\")age = input(\"How old are you?\")hometown = input(\"Where is your hometown?\")print(\"Hello \
8. 流程控制之--if。
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样的判断怎么办? 很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。if...else 语句单分支if 条件: 满足条件后要执行的代码双分支\"\"\"if 条件: 满足条件执行代码else:if条件不满足就走这段\"\"\"AgeOfOldboy = 48if AgeOfOldboy > 50 : print(\
什么是表达式?
python环境
Python介绍
1. python的出生与应用
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 (龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到现在,依然掌握着Python发展的核心方向,被称为仁慈的独裁者)。2017年7月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
目前Python主要应用领域:
Python在一些公司的应用:
谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发CIA: 美国中情局网站就是用Python开发的NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算YouTube:世界上最大的视频网站YouTube就是用Python开发的Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发Facebook:大量的基础库均通过Python实现的Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的豆瓣: 公司几乎所有的业务均是通过Python开发的知乎: 国内最大的问答社区,通过Python开发(国外Quora)春雨医生:国内知名的在线医疗网站是用Python开发的除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。
python发展史
2. python是什么编程语言。
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
2.1 编译型与解释型。
2.2动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
2.3强类型定义语言和弱类型定义语言
3. python的优缺点。
4. python的种类。
CPython当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。IPythonIPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。PyPyPyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。JythonJython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。IronPythonIronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。小结: Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
变量
变量的命名规则
见明知义
1. 要具有描述性
3. 不能以中文为变量名
4. 不能以数字开头
7. 严格区分大小写
变量:声明变量实际上就是给内存空间
变量能存放类型:字符串,整型,浮点数,布尔类型,列表list,字典dict set列表
常量
常量 :不变的量 命名时,名字是大写的 例如:NAME=\"JACK\" pie=3.141592653....
格式化输出
%s 输出字符串
'%s' %('hello')
%d 输出数字
'%d' %(10)
%f
浮点数
%r
原形毕露
流程控制之--if
if....else
if... elif..else
条件表达式:
流程控制之--while循环
break。终止循环
continue(终止本次循环)。
while...else
while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
运算符
成员运算符: not in 、in (判断某个单词里是不是有某个字母)
身份运算符: is、is not
优先级:
Python的学习交流QQ群:1003571914
编码
ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。
GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。这一版的GBK规范为1.0版。GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,是前者向后者过渡过程中的一个承上启下的产物。ISO 10646 是国际标准化组织 ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与 Unicode 组织的 Unicode 编码完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国 1993 年以 GB 13000.1 国家标准的形式予以认可(即 GB 13000.1 等同于 ISO 10646.1)。GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。知识链接:我们经常使用各种编码标准的汉字,编码到底是什么呢?所谓编码,是以固定的顺序排列字符,并以此做为记录、存贮、传递、交换的统一内部特征,这个字符排列顺序被称为“编码”。和中文字库有关的编码标准有:国标GB码、GBK码、港台BIG-5码等,不同编码的汉字字库都与汉字的应用有密切关系。很多人在使用过程中,发现字不够用,因为目前大家使用的主要是GB编码字库,此编码标准只收录了6763个常用汉字,而GB字库以外大量汉字,只能通过方正女娲补字软件拼字或其它造字程序补字。尽管补出的汉字在字形上满足需要,但在字体风格、大小、结构方面难以协调统一,而采用手工贴图的方式补字,更不雅观。进而言之,如果用户建立信息系统,或需要查询新闻、出版内容时,靠补字是无法实现的。方正开发的GBK字库,将极大地缓解缺字现象。从GB字库扩充到GBK字库,增加了1万4千多字。北大方正从1996年投入大量人力,开始做黑、宋、仿、楷GBK字库,并于1998年4月成为第一家通过国家权威部门组织的GBK字库鉴定的专业厂商。到现在为止,北大方正已将全部字体转换成GBK字库,共46款,其中18款字数达21003个,是拥有GBK字库款数最多的厂商。ISO 10646 是一个包括世界上各种语言的书面形式以及附加符号的编码体系。其中的汉字部分称为“CJK 统一汉字”(C 指中国,J 指日本,K 指朝鲜)。而其中的中国部分,包括了源自中国大陆的 GB 2312、GB 12345、《现代汉语通用字表》等法定标准的汉字和符号,以及源自台湾的 CNS 11643 标准中第 1、2 字面(基本等同于 BIG-5 编码)、第 14 字面的汉字和符号。
经实际测试和查阅文档,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
Unicode: 包含全世界所有的文字与二进制0101001的对应关系。
起初:Unicode规定一个字符用两个字节表示: 英文: a b c 六个字节 一个英文2个字节 中文 中国 四个字节 一个中文用2个字节
UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
单位之间的转换
8bit = 1byte1024byte = 1KB1024KB = 1MB1024MB = 1GB1024GB = 1TB1024TB = 1PB1024TB = 1EB1024EB = 1ZB1024ZB = 1YB1024YB = 1NB1024NB = 1DB常⽤到TB就够了
笔记
基础数据类型
一.什么是数据类型?
二.基础数据类型。
2.1数字int。
2.2布尔值bool
真 1 True。假 0 False。
2.3字符串str。
*** string.capitalize()
把字符串的第一个字符大写
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.casefold()
返回适合无大小写比较的字符串版本
以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
string.expandtabs(tabsize=8)
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
* string.format()
格式化字符串
msg = \
跟find()方法一样,只不过如果str不在 string中会报一个异常.
*****string.isalnum()
*****string.isalpha()
string.isdecimal()
如果 string 只包含十进制数字则返回 True 否则返回 False.
*****string.isdigit()
如果 string 只包含数字则返回 True 否则返回 False.
string.islower()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric()
如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()
如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()
如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
!****string.join(seq)
string.ljust(width)
*****string.lower()
转换 string 中所有大写字符为小写.
string.lstrip()
截掉 string 左边的空格
maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str)
返回字符串 str 中最大的字母。
min(str)
返回字符串 str 中最小的字母。
string.partition(str)
类似于 find()函数,不过是从右边开始查找.
类似于 index(),不过是从右边开始.
string.rjust(width)
string.rpartition(str)
*****string.rstrip()
删除 string 字符串末尾的空格.
*****string.split(str=\"\
string.splitlines([keepends])
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
*****string.strip([obj])
** string.swapcase()
翻转 string 中的大小写
** string.title()
*****string.upper()
转换 string 中的小写字母为大写
string.zfill(width)
返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
2.4列表list
列表的索引切片
lis[起始值:结束值:步长]
增
append 追加,给列表的最后面追加一个元素
insert 插入在列表的任意位置插入元素
extend 迭代着追加,在列表的最后面迭代着追加一组数据
删
pop 通过索引删除列表中对应的元素,该方法有返回值,返回值为删除的元素
remove 通过元素删除列表中该元素
clear 清空列表
del
按照索引删除该元素
切片删除该元素
切片(步长)删除该元素
改
按照索引改值
按照切片改值(迭代着增加)
按照切片(步长)改值(必须一一对应)
查
切片去查,或者循环去查
其他操作
count(数)(方法统计某个元素在列表中出现的次数)
index(方法用于从列表中找出某个值第一个匹配项的索引位置)
sort (方法用于在原位置对列表进行排序)
reverse (方法将列表中的元素反向存放)
列表也可以相加与整数相乘
2.5元组tuple
2.5.1 元组的索引切片
2.5.2 元组其他操作方法
因为元组的特性,直接从属于元组的元素不能更改,所以元组只能查看
index:通过元素找索引(可切片),找到第一个元素就返回,找不到该元素即报错
`count: 获取某元素在列表中出现的次数
2.5.3 len
2.6字典dict。
2.6.1 字典的初识
Why:咱们目前已经学习到的容器型数据类型只有list,那么list够用?他有什么缺点呢? 1. 列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢。 2. 列表只能按照顺序存储,数据与数据之间关联性不强。所以针对于上的缺点,说咱们需要引入另一种容器型的数据类型,解决上面的问题,这就需要dict字典。what: 数据类型可以按照多种角度进行分类,就跟咱们人一样,人按照地域可以划分分为亚洲人,欧洲人,美洲人等,但是按照肤色又可以分为白种人,黄种人,黑种人,等等,数据类型可以按照不同的角度进行分类,先给大家按照可变与不可变的数据类型的分类: 不可变(可哈希)的数据类型:int,str,bool,tuple。 可变(不可哈希)的数据类型:list,dict,set。字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。 Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。 在Python3.5版本(包括此版本)之前,字典是无序的。 在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)。 当然,字典也有缺点:他的缺点就是内存消耗巨大。
字典查询之所以快的解释
详细解释
# 此段解释来源于《流畅的python》.这一节笼统地描述了 Python 如何用散列表来实现 dict 类型,有些细节只是一笔带过,像CPython 里的一些优化技巧 就没有提到。但是总体来说描述是准确的。Python 源码 dictobject.c 模块(http://hg.python.org/cpython/file/tip/Objects/dictobject.c)里有丰富的注释,另外延伸阅读中有对《代码之美》一书的引用。为了简单起见,这里先集中讨论 dict 的内部结构,然后再延伸到集合上面。散列表其实是一个稀疏数组(总是有空白元素的数组称为稀疏数组)。在一般的数据结构教材中,散列表里的单元通常叫作表元(bucket)。在 dict 的散列表当中,每个键值对都占用一个表元,每个表元都有两个部分,一个是对键的引用,另一个是对值的引用。因为所有表元的大小一致,所以可以通过偏移量来读取某个表元。因为 Python 会设法保证大概还有三分之一的表元是空的,所以在快要达到这个阈值的时候,原有的散列表会被复制到一个更大的空间里面。如果要把一个对象放入散列表,那么首先要计算这个元素键的散列值。Python 中可以用hash() 方法来做这件事情,接下来会介绍这一点。01. 散列值和相等性内置的 hash() 方法可以用于所有的内置类型对象。如果是自定义对象调用 hash()的话,实际上运行的是自定义的 __hash__。如果两个对象在比较的时候是相等的,那它们的散列值必须相等,否则散列表就不能正常运行了。例如,如果 1 == 1.0 为88真,那么 hash(1) == hash(1.0) 也必须为真,但其实这两个数字(整型和浮点)的内部结构是完全不一样的。为了让散列值能够胜任散列表索引这一角色,它们必须在索引空间中尽量分散开来。这意味着在最理想的状况下,越是相似但不相等的对象,它们散列值的差别应该越大。示例 3-16 是一段代码输出,这段代码被用来比较散列值的二进制表达的不同。注意其中 1 和 1.0 的散列值是相同的,而 1.0001、1.0002 和 1.0003 的散列值则非常不同。示例 3-16 在32 位的 Python 中,1、1.0001、1.0002 和 1.0003 这几个数的散列值的二进制表达对比(上下两个二进制间不同的位被 ! 高亮出来,表格的最右列显示了有多少位不相同)32-bit Python build1 00000000000000000000000000000001!= 01.0 00000000000000000000000000000001------------------------------------------------1.0 00000000000000000000000000000001! !!! ! !! ! ! ! ! !! !!! != 161.0001 00101110101101010000101011011101------------------------------------------------1.0001 00101110101101010000101011011101!!! !!!! !!!!! !!!!! !! ! != 201.0002 01011101011010100001010110111001------------------------------------------------1.0002 01011101011010100001010110111001! ! ! !!! ! ! !! ! ! ! !!!! != 171.0003 00001100000111110010000010010110------------------------------------------------用来计算示例 3-16 的程序见于附录 A。尽管程序里大部分代码都是用来整理输出格式的,考虑到完整性,我还是把全部的代码放在示例 A-3 中了。从 Python 3.3 开始,str、bytes 和 datetime 对象的散列值计算过程中多了随机的“加盐”这一步。所加盐值是 Python 进程内的一个常量,但是每次启动Python 解释器都会生成一个不同的盐值。随机盐值的加入是为了防止 DOS 攻击而采取的一种安全措施。在 __hash__ 特殊方法的文档(https://docs.python.org/3/reference/datamodel.html#object.__hash__) 里有相关的详细信息。了解对象散列值相关的基本概念之后,我们可以深入到散列表工作原理背后的算法了。02. 散列表算法为了获取 my_dict[search_key] 背后的值,Python 首先会调用 hash(search_key)来计算 search_key 的散列值,把这个值最低的几位数字当作偏移量,在散列表里查找表元(具体取几位,得看当前散列表的大小)。若找到的表元是空的,则抛出KeyError 异常。若不是空的,则表元里会有一对 found_key:found_value。这时候 Python 会检验 search_key == found_key 是否为真,如果它们相等的话,就会返回 found_value。如果 search_key 和 found_key 不匹配的话,这种情况称为散列冲突。发生这种情况是因为,散列表所做的其实是把随机的元素映射到只有几位的数字上,而散列表本身的索引又只依赖于这个数字的一部分。为了解决散列冲突,算法会在散列值中另外再取几位,然后用特殊的方法处理一下,把新得到的数字再当作索引来寻找表元。若这次找到的表元是空的,则同样抛出 KeyError;若非空,或者键匹配,则返回这个值;或者又发现了散列冲突,则重复以上的步骤。图 3-3 展示了这个算法的示意图。图 3-3:从字典中取值的算法流程图;给定一个键,这个算法要么返回一个值,要么抛出 KeyError 异常添加新元素和更新现有键值的操作几乎跟上面一样。只不过对于前者,在发现空表元的时候会放入一个新元素;对于后者,在找到相对应的表元后,原表里的值对象会被替换成新值。另外在插入新值时,Python 可能会按照散列表的拥挤程度来决定是否要重新分配内存为它扩容。如果增加了散列表的大小,那散列值所占的位数和用作索引的位数都会随之增加,这样做的目的是为了减少发生散列冲突的概率。表面上看,这个算法似乎很费事,而实际上就算 dict 里有数百万个元素,多数的搜索过程中并不会有冲突发生,平均下来每次搜索可能会有一到两次冲突。在正常情况下,就算是最不走运的键所遇到的冲突的次数用一只手也能数过来。了解 dict 的工作原理能让我们知道它的所长和所短,以及从它衍生而来的数据类型
解释:字典内存开销巨大(了解)
由于字典使用了散列表,而散列表又必须是稀疏的,这导致它在空间上的效率低下。举例而言,如果你需要存放数量巨大的记录,那么放在由元组或是具名元组构成的列表中会是比较好的选择;最好不要根据 JSON 的风格,用由字典组成的列表来存放这些记录。用元组取代字典就能节省空间的原因有两个:其一是避免了散列表所耗费的空间,其二是无需把记录中字段的名字在每个元素里都存一遍。记住我们现在讨论的是空间优化。如果你手头有几百万个对象,而你的机器有几个GB 的内存,那么空间的优化工作可以等到真正需要的时候再开始计划,因为优化往往是可维护性的对立面。
2.6.2 创建字典的几种方式
2.6.4 字典的常用操作方法
通过键值对直接增加
setdefault
删
pop 通过key删除字典的键值对,有返回值,可设置返回值。
popitem 3.5版本之前,popitem为随机删除,3.6之后为删除最后一个,有返回值
clear 清空字典
通过键删除键值对
删除整个字典
通过键值对直接改
update
通过键查询# 直接dic[key](没有此键会报错)
get
keys()
返回字典中所有的键
values()
返回字典中所有的值
items()
返回字典中所有的键值对
2.7集合set
1,集合的创建
2,集合的增
set1.add('hello')
update:迭代着增加
3,集合的删
set1.remove('hello') # 删除一个元素
set1.pop() # 随机删除一个元素
set1.clear() # 清空集合
del set1 # 删除集合
4,集合的其他操作
4.1 交集。(& 或者 intersection)
4.2 并集。(| 或者 union)
4.3 差集。(- 或者 difference)
4.4反交集。 (^ 或者 symmetric_difference)
4.5子集与超集
5,frozenset不可变集合,让集合变成不可变类型。
数据类型转换
将x转换为一个整数
将x转换为一个长整数
float(x)
将x转换到一个浮点数
创建一个复数
str(x)
将对象 x 转换为字符串
repr(x)
将对象 x 转换为表达式字符串
eval(str)
tuple(s)
将序列 s 转换为一个元组
list(s)
将序列 s 转换为一个列表
set(s)
转换为可变集合
dict(d)
frozenset(s)
转换为不可变集合
chr(x)
将一个整数转换为一个字符
unichr(x)
将一个整数转换为Unicode字符
ord(x)
将一个字符转换为它的整数值
hex(x)
将一个整数转换为一个十六进制字符串
oct(x)
将一个整数转换为一个八进制字符串
for循环
enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
range:指定范围,生成指定数字。
小数据池,代码块的最详细、深入剖析
一,id,is,==
在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是有一个唯一标识的,就好比是身份证号,标识这个空间的叫做内存地址,也就是这个数据(对象)的id,那么你可以利用id()去获取这个数据的内存地址:那么 is 是什么? == 又是什么?== 是比较的两边的数值是否相等,而 is 是比较的两边的内存地址是否相等。 如果内存地址相等,那么这两边其实是指向同一个内存地址。
二,代码块。
上面的主要意思是:Python程序是由代码块构造的。块是一个python程序的文本,他是作为一个单元执行的。代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。而作为交互方式输入的每个命令都是一个代码块。什么叫交互方式?就是咱们在cmd中进入Python解释器里面,每一行代码都是一个代码块,例如:而对于一个文件中的两个函数,也分别是两个不同的代码块: 那么,可能有的同学还有一些不理解代码块,可以这样解释:我们都上过学对吧,你们在初中的时候,有没有过值周?就以一个班的学生用一星期的时间打扫整个学校,再比如有没有运动会,无论是值周,还是运动会,还是组织什么活动,都是以什么为单位呢?对,都是以班级为单位,那么咱们学生就好比是代码,班级就好比是代码块,我们想让代码运行起来,必须依靠班级去执行,也就是代码块。
代码块的缓存机制
三,小数据池
四,小结。
如果在同一代码块下,则采用同一代码块下的换缓存机制。 如果是不同代码块,则采用小数据池的驻留机制。# pycharm 通过运行文件的方式执行下列代码: 这是在同一个文件下也就是同一代码块下,采用同一代码块下的缓存机制。i1 = 1000i2 = 1000print(i1 is i2) # 结果为True 因为代码块下的缓存机制适用于所有数字通过交互方式中执行下面代码: # 这是不同代码块下,则采用小数据池的驻留机制。>>> i1 = 1000>>> i2 = 1000>>> print(i1 is i2)False # 不同代码块下的小数据池驻留机制 数字的范围只是-5~256.更多验证:# 虽然在同一个文件中,但是函数本身就是代码块,所以这是在两个不同的代码块下,不满足小数据池(驻存机制),则指向两个不同的地址。def func(): i1 = 1000 print(id(i1)) # 2288555806672def func2(): i1 = 1000 print(id(i1)) # 2288557317392func()func2()
深浅copy
文件操作
小结
函数
\"*\"号
聚合
打散
函数初识
函数名的应用
1.函数名(不加()的)就是函数的内存地址 2.函数名可以赋值给其他变量 函数名可以作为变量 3.函数名可以当做容器类类型的元素 4.函数名可以当做函数的参数 5.函数名可以作为函数的返回值 函数名是一个特殊的变量,他除了具有变量的功能,还有最主要一个特点就是加上() 就执行,其实他还有一个学名叫第一类对象。
闭包
闭包的定义: 1. 闭包是嵌套在函数中的函数。 2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。 闭包的作用:保存局部信息不被销毁,保证数据的安全性。 闭包的应用: 可以保存一些非全局变量但是不易被销毁、改变的数据。 装饰器。
迭代器
生成器vs列表推导式
列表推导式
生成器表达式
将列表推导式的[]换成()即可
g =(i for i in range(150))print(g)print(g.__next__())
列表推导式与生成器表达式的不同
内置函数
变量名加()
执行时输入的是: 变量(变量)
作用域相关*****
globals()
返回一个字典:包含全部的全局变量
locals()
返回一个字典:包含的是当前作用域所有的变量。
eval()
执行字符串类型的代码,并返回最终结果。
eval('2 + 2') # 4n=81eval(\"n + 4\") # 85eval('print(666)') # 666
exec()
complie()
输入输出相关*****
input()
print()
打印输出
sep
打印多个内容 分隔符默认是空格
end
默认换行
内存相关****
hash
只能哈希不可变的数据类型
获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
id()
获取该对象的内存地址
字典:会将你的所有的key在内存中转化成id
文件操作相关
open() *****
模块相关
__import__ ***
函数用于动态加载类和函数
type(变量名)
变量是什么类型
序列常用函数
len(x)
返回字符个数
max(x)
返回序列最大值元素
min(x)
返回序列最小值元素
字符串编码转换函数
ord('x')
返回字符的Unicode值
ord('张') #24352
chr(i)
返回x(整型数)这个数值所对应的字符
chr(24352) #'张'
整数转进制字符串
bin(i)
将整数转换为二进制字符串
oct(i)
将整数转换为八进制字符串
hex(i)
将整数转换为十六进制字符串
字符串构造函数
str(obj='')
将对象转换为字符串
帮助
help( ) **
函数用于查看函数或模块用途的详细说明。
print(help(list))print(help(str.split))
调用相关
callable( ) ***
函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
name = 'alex'def func(): passprint(callable(name)) # Falseprint(callable(func)) # True
查看内置属性 ***
dir( )
name = 'alex' print(dir(name))
range( )
next( )
iter( )
数据类型
bool( ) ***
int( ) ***
函数用于将一个字符串或数字转换为整型。
fioat( ) ***
函数用于将整数和字符串转换成浮点数。
complex( )
数学运算
abs() ****
函数返回数字的绝对值
divmod ****
round(x) ***
保留浮点数的小数位数,默认保留整数。数字四舍五入
pow **
求x**y次幂。(三个参数为x**y的结果对z取余)
sum() *****
对可迭代对象进行求和计算(可设置初始值)
min() *****
max() *****
和数据结构相关
list
tuple
reversed() *****
slice ***
format **
bytes() ****
把字符串转换成bytes类型
bytearry
memoryview
ord **
输入字符找该字符编码 unicode的位置
print(ord('a'))print(ord('中'))
chx **
输入位置数字找出其对应的字符 unicode
print(chr(97))print(chr(20013))
ascii **
print( ascii('a'))print(ascii('中')) # '\\u4e2d'
repr *****
返回一个对象的 string形式(原形毕露)。
sorted *****
对所有可迭代的对象进行排序操作。
enumerate
枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
all ***
可迭代对象中,全都是True才是True 多做条件判断
any ***
可迭代对象中,有一个True 就是True 多做条件判断
zip() *****
拉链方法。将多个iter 纵向组成一个个元祖
filter *****
筛选过滤
map
会根据提供的函数对指定序列做映射。循环模式
重点
print sum reversed含key: min max map sorted filter zip
匿名函数
可以放三元运算
lambda x: x if x>2 else x * 2
递归函数
Python3.8
经测试最大递归深度是996
i = 0def fun(): global i i += 1 print(i) if i == 996: return fun()fun()
默认递归深度:998
可修改递归深度
import syssys.setrecursionlimit(10000)i = 0def fun(): global i i += 1 print(i) fun()fun()
测试:3806
根据电脑性能得出的结果
函数的内部自己调用自己
0 条评论
回复 删除
下一页