python基础笔记

时间:2019-07-20
本文章向大家介绍python基础笔记,主要包括python基础笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
.计算机程序设计语言:主要有编译型、解释型 
  区别:编译型(编译器):是需要将程序代码进行编译指定格式的文件(字节码文件----->程序员是无法识别该文件,给机器;十六进制);代表型语言:C、Java 
  解释型(解释器):就相当于实现的是边执行脚本边进行解释; 
  在实际开发过程中;编译型语言主要实现的是软件系统复杂业务逻辑的开发;而解释型语言主要适用于脚本的开发(辅助复杂系统业务逻辑的完成或测试的使用) 
误区:一个软件或者一个系统并不是代表着只有一门语言的实现;而是由多门语言共同完成;例如:前端开发、后端开发(java、php、C等)、数据库开发
 
 
2.Python:是一门计算机程序设计语言;解释型;开源(源代码开放----->实现二次开发、模块扩展);胶水型(兼容性极强)、具有丰富的类库;python语言是由于大数据、人工智能所主流;
 
 
大数据:实现大数据容量的共享、存储、处理、解析等一系列操作
 
 
 
3.问题:python2.x版本与python3.x版本能否同时安装在同一台机器?
  是可以同时兼容;python的可执行文件即python.exe文件,将其中一个文件夹中的该文件重命名即可;
4.在控制台中输入一个值:input(提示语);使用input函数其接收的值,无论传入的是字符串还是数字,其结果的类型都是字符串类型;
  如果需要获取对应数字的数据类型的话,则需要进行数据类型强制转换;
5.python中的交互式控制台(Ipython、Jupyter----web类型的页面);在现有的jupyter包中,实际已经将ipython的环境内核直接嵌入到jupyter中;
  所以在实际安装时既可以直接安装ipython也可以安装jupyter; 
  安装命令:pip install ipython | pip install jupyter
6.数据类型: 
  注意:在python中变量名是不存在数据类型的,只有值有对应的数据类型,将值赋值给变量后,其值是什么类型那么变量就是对应的数据类型
例如:变量名 = 值 String a=10
1)数值型:a.整形(int) b.浮点型(float) c.复数型(complex)----->number=4i+5j
问题1:数值型存储的值范围是多少?
分析:在程序中,数值会存在正数、负数;在python中,不存在其他类型语句的等多种数据类型,所有的类型都是归于int类型,所以其最大值范围也是相当于其他语言中的long类型;范围就是2的六十四次方(正负数各一半);在python中之前存在数据类型maxint;python中的2的六十四实际就是基于当前的系统平台
扩展:在底层中最小的数据类型实际应该是byte类型;在计算机中运算执行的最小表示单位是bit;1byte=8bit;1bit只存在两个值:0,1;得到1byte的状态2的八次方(256;其存储值范围是:-128-127) 例如:byte number=129
问题2:浮点数的位数控制?
  a.round函数进行控制位置; b.还可以使用%.f的形式进行表示控制位数
  例如:number1=1.33333333--------------->round(number1,2)----->1.33 或者("%.2f"%number1)------>1.33
  例如:number2=1------->如果需要输出01则如何表示:print("%02d"%number2)
问题3:在python中,其整形的数据默认是十进制数;如果需要表示二进制、八进制、十六进制?
  分析:二进制表示方式:0b二进制数 0o八进制数 0x十六进制
问题4:复数类型无法转换成整形或者浮点型;但是浮点型、整形可以转换成复数类型;实际就是将浮点或者整形值转换成实数部分值,虚数部分使用0j表示
2)容器型:列表、元组、字典、集合
  列表:使用中括号进行表示元素的集合,元素与元素之间使用逗号隔开;列表中的元素可以存放不同的数据类型,但是通常存放相同的数据类型(相同数据类型的集合)
  在针对于多个变量声明时,可以使用一条语句完成;变量名1,变量名2...=值1,值2....;如果多个变量指向同一个值得话,其表示方式可以为:
变量名1=变量名2=变量名3....=值
a.定义语法:变量名=[元素1,元素2....]
b.列表的相关操作:
1.列表中的值是通过索引进行获取的;
问题:列表中的最大索引值等于列表的长度吗?
  不等于:最大索引值+1=列表的长度;因为列表的索引是从0开始的
2.在列表中增加一个元素:
  使用append方法:表示的在列表的最后追加元素;直接在append函数中传入元素即可
  使用insert方法:指定位置进行插入元素;需要传入两个参数,第一个参数是需要插入的位置索引,第二个是需要插入的元素;该元素是会插入到指定位置的前面
  使用extend方法:如果有两个列表list1,list2;list1.extend(list2);相当于list1+=list2;与+拼接列表不同;+是返回一个拼接后的新列表;而extend在原有列表上进行拼接
问题1:如果是两个列表中的元素需要进行拼接的话,如何操作?
  直接使用+进行两个列表元素的拼接;例如:list1=[1,2,3] list2=[80,90]------->list1+list2------>[1,2,3,80,90]
  如果使用list1.append(list2)-------->[1,2,3,[80,90]];此时相当于变成二维列表;在实际工作中,声明的列表其维度越高复杂度越高;一般情况列表维度不会超过三维
问题2:list1=[1,10,20,40] list2=[60,80,70] ------->需要完成你知道在list1这个列表的第一个20元素后面拼接list2
  分析:首先只知道元素20,需要获取20元素的索引;在通过索引进行截取后再拼接
 list1[:list1.index(20)+1]+list2+list1[list1.index(20)+1:]
问题3:list1=[1,10,20,40,20,100,200,400,20,50] list2=[60,80,70] ;再第二个20后面添加list2,再倒数第一个20的前面添加list2
  分析:先获取第一个20的索引,然后通过索引指定范围获取第二个20的索引
  print(list1.index(20,list1.index(20)+1))
  倒数第一个20,先取反,取出取反的第一个20的索引,然后通过最大索引减去第一次出现20的索引
   print(len(list1)-1-list1[::-1].index(20))
问题4:在list1中的第一个20和第二个20之间查找40元素的个数并且追加在list1追后,最后排序
  分析:先获取第一个20的索引,在获取第二个20的索引,在两个索引之间查找40
  (list1[list1.index(20):list1.index(20,list1.index(20)+1)]).count(40)
  list1.sort()
问题5: number4=3.333333333------->要求使用字符串完成整数部分两位,小数部分两位的拼接操作
  注意:如果直接调用format的话则表示调用的是python中的内置函数;如果是通过字符串进行调用的话则表示的是字符串模块中的方法  
问题6:针对一个数值需要对整数位和小数位同时取位操作的话:
  1.通过字符串截取的操作(格式符/format函数/字符串自带的format函数)
  2.优先取小数位,然后整数位通过字符串的zfill方法进行左侧进行补0操作
  例如:str1=3.33333
  formart(str1,".2f").zfill(5)
3.在列表中通过元素找索引:
  使用index方法:需要传递三个参数,其中第一个为必填参数,需要查找的元素;第二个、第三个参数表示查找范围初始值和结束值
4.列表的截取操作:
  截取的语法:列表名[初始值:结束值:步进]
  注意:a.在python中;截取操作:其初始值如果超过列表的最大长度值时,返回的结果是空列表;不会抛出索引越界异常;
  b.在python中,截取的索引值时左闭右开区间
c.在python中,截取的索引值方式如果是负数的话,也必须遵循从左往右截取的规则;
  例如:list1=[1,10,20,40] ------------>list1[-3:-1]-------->[10,20]
5.列表的反转:
  a.第一种方法:[::-1]
  b.第二种方法:调用列表所带的方法reverse()
  两者区别:[::-1]针对原有列表操作后会返回一个新列表,并开辟空间存储该新列表;而reverse()方法针对原列表操作后返回值是None,是基于原列表上进行元素的反转,没有再次开辟新的内存空 
6.删除列表中的元素:
  pop方法:如果没有指定索引,则直接删除列表中的最后一个元素,如果指定索引则删除指定索引的元素
  remove方法:携带的参数是元素值,表示的是移除指定元素的第一次出现
  del 列表名[索引初始值:索引结束值]
  元组(tuple):使用小括号进行表示一组元素,其元素与元素之间使用逗号隔开;
 其特点:元组不可改
元组的元素增加/删除/修改等操作:
元组中的单个元素的添加没有对应的方法,但是存在元组之间的拼接使用+
元组中是不能够直接使用del进行删除元素,只能够使用索引进行截取然后再次拼接
元组与列表之间是可以相互转换的;元组相当于间接可以操作列表的相关方法;通过list函数
注意:当元组中只有一个元素时,其元素后必须携带逗号,如果没有逗号则不表示元组,而表示的是对应数据的数据类型
例如:tuple1=("hello")---------->这是一个字符串 tuple2=(2,)------------->这才是一个元组
问题1:有列表为啥还需要元组?
  a.可以实现对数据进行保护 b.在操作不定长参数函数时,其参数的类型就是一个元组,所以可以直接将元组进行传入 c.在函数或者方法中返回值可以返回多个值,则可以通过元组进行表示
问题2:元组与列表的区别?
  a.定义方式不同 b.元组数据不可改 c.元组与列表之间可以相互转换
思考:需求: tuple1=(1,2,333,223,4) 需要在元组中333后面添加555,返回的还是tuple1变量
分析:可以通过两种方式进行完成:一种拼接,一种转换成列表
 
 
 
字典(dict):由大括号进行描述一组键值对,其键值对之间使用冒号隔开,键值对与键值对之间使用逗号隔开
问题1:声明的字典中键名是否可以重名? 可以重名,会进行覆盖
问题2:声明的字典其键名是否可以是数字? 可以为数字,因为字典本身就是通过键名查找键值,键名只要是唯一标识即可
增加一个键值对:语法:字典名[需要添加的键名]=键值
注意:只要添加的键值对在字典中不存在,则会追加在末尾,如果存在该键名的话,则会对该键名的键值进行修改操作
问题:在指定的键值对前面添加一个键值对 例如:在dict1={'name': 'zhangsan', 'age': 10, 'sex': 'nan'}的age前面添加一个键值对height:110
  分析:没有直接方法可以实现,因为没有对应的索引,但是可以通过外界的其他方式实现
  dict2={}
  for key in dict1.keys():
  if key=="age":
  dict2["height"]=110 
  dict2[key]=dict1[key] ---------->dict2["name"]="zhangsan"
如果需要增加多个键值对,或者拼接一个字典的话则可以使用update方法;
例如:dict1={'name': 'zhangsan', 'age': 10, 'sex': 'nan'} dict2={'height':110}
dict1.update(dict2)----------->{'name': 'zhangsan', 'age': 10, 'sex': 'nan','height':110} 
同样还可以传入赋值形式的键值对;例如:dict1.update(stu="hello")------>{'name': 'zhangsan', 'age': 10, 'sex': 'nan','stu':'hello'}
取键值:键值是通过键名进行获取的;同样还可以通过values获取一组键值,然后再通过索引进行获取指定的键值
问题:要取键名不能够通过键值;只能够通过keys()进行获取一组键名,然后再通过索引进行获取指定的键名
  注意:通过字典中自带的方法进行获取键名或者键值的话返回的是对应的view_object对象(dict_keys/dict_values/dict_items);返回的不是一个纯列表对象
  例如:dict1={'name': 'zhangsan', 'age': 10, 'sex': 'nan'} ------>dict1['name']------------>zhangsan
  通过get方法进行获取键值:dict1.get(键名)
  上面两种方法的区别:第一种如果在字典中不存在该键名会直接抛出KeyError异常,第二种如果在字典中不存在的话则不会抛出任何异常
  删除键值对:
 直接使用del 字典名[键名];
 可以通过pop方法进行删除键值对;
  两者区别点:del 删除键值对返回值是None,而pop删除是返回指定键名的键值
  如果删除需要返回整个删除的键值对的话,则可以通过popitem方法完成,但是只会返回字典中的最后一个键值对
集合(set):集合是一个无序的序列,集合中的元素可以是任意数据类型;表现形式可以是set(集合的元素),能够实现自动去重;集合中的值必须是hashable类型的值(不能存储对应的字典值);并且创建集合的时候还不能够这样表示set1={},这个表示不是空集合,这表示的是空字典
例如:set("ancdef")---------->{'a','n','c','d','e','f'}
set1={'1',1,'2',2,(1,)}
集合的运算关系:
a.交集:取两个集合的相同元素构成一个新集合
例如:set1={1,3,4,2} set2={3,6,77,4}-------------->set1 & set2 ------------->{3,4}
set1.intersection(set2)---------------->{3,4}
b.并集:取两个集合的所有元素构成一个新集合去除相同元素
例如:set1={1,3,4,2} set2={3,6,77,4}---------------->set1 | set2-------------->{1,3,4,2,6,77}
set1.union(set2)-------------->{1,3,4,2,6,77}
c.差集:由A集合-B集合,去掉A集合中元素在B集合中,只取A集合中元素不在B集合中的,并生成一个新集合
例如:set1={1,3,4,2} set2={3,6,77,4}--------------->set1-set2----------------->{1,2}
set1.difference(set2)--------->{1,2}
d.非集合:取两个集合的交集,然后根据交集取两个集合的补集,最后将补集取并集
例如:set1={1,3,4,2} set2={3,6,77,4}--------------->set1^set2----------------->{1,2,6,77}
set1.symmetric_difference(set2)-------------->{1,2,6,77}
还存在两个父子集判断的方法:issubset(<=)、issuperset(>=)
3)字符串:在python中:如果定义的值是一个字符串,字符串需要使用单引号或者双引号;字符串实际就是由一系列字符所构成;
例如:str1="hello"------------->h e l l o
a.字符串的切片操作与列表相同;
b.字符串中的常用方法:
capitalize():表示的是一个字符串的首字母大写,其他字母小写
title():表示的将每个单词的首字母进行变成大写,单词与单词之间必须要有相应的分隔符
encode():可以指定字符串的编码格式
format():可以传入不定长参数和关键字参数,如果传递多个参数的话,其值对应{}表示的索引位置
例如:"today is {0} day".format("good") "today is {0} day and tom is {1} day".format("good","sunday")
"today {name} day".format(name="sunday")
字符串方法中如果带有is的则都是表示字符串中值类型的判断
replace:需要传入三个参数,其中两个为必填参数(一个旧值,一个新值),一个为可选参数;如果没有声明可选参数则表示的替换所有;
例如:str2="hello"------------->第二个l替换成w
 str2[:str2.index("l",str2.index("l")+1)]+"w"+str2[str2.index("l",str2.index("l")+1)+1:]
split():传入的参数两个都是默认参数,如果都不传递,则将整个字符串当做一个元素声明在列表中;
第一个参数:可以声明字符串中的任意字符进行分隔;
第二个参数:默认值-1表示的是根据指定的第一个分隔符进行将整个字符串最大分隔;即可以自定义指定分隔的段数
find()/index():都是获取指定字符、字符串的索引值返回(字符串的话如果存在则返回第一个字符的索引);
  两者最大的区别:find()如果在指定字符中没有找到则返回-1;而index则会抛出valueError异常
join():传入的参数是迭代器;此迭代器中的元素或者值必须是字符串;实际是与split方法对应
list1=[1,2,3] "".join(list1)-------->'123' X
c.字符串内存存储的机制(驻留机制);字符串在python中具有动态内存存储机制;字符串的驻留机制基于字符串定义的复杂程度(基于字符的类型;就算是较长的字符串,但是如果是单一的字符类型,其存储会使用驻留机制);
例如:str1="abcdefgh" str2="abcdefgh" str1 is str2----------->True
str1="hello world" str2="hello world"------->False
pycharm对python解释器进行内存存储机制的优化;所以在实现字符串比较时其内存存储地址与在实际python解释器中不一致;
例如:pycharm : str1="hello world" str2="hello world"------->True
python解释器: str1="hello world" str2="hello world"------->False
注意:==永远表示的内容的比较;is表示的是对象内存存储地址的比较
4)布尔类型:bool;其值只能够是True和False;实际二进制中0、1就是对应False和True
常用的False常量值有:0、()、[]、{}、""、None
5)None:与任何其他非空的数据类型进行比较时,其值用于返回False;
表示的空值;
问题:None、Null、""有什么区别?
a.三者的数据类型不同;None属于python中的特殊数据类型;Null在python中等价的是pass语句,表示的是不执行任何操作;""属于字符串数据类型
b.None数据类型属于单例模式,None赋值给变量后是具有内存存储地址,该类型是可以与测试对象地址所比较;""开辟了空间,但是值是空白;Null表示的是不执行任何操作的事件;
7.变量:命名规则:a.必须是英文的字母、下划线开头,但是不能够以数字开头,可以以数字结尾;b.不能够使用python中所存在的关键字、保留字等(是在keyword模块下)
命名规范:a.在实际编程中,每个模块、每个类、每个方法、每个函数、每个属性、每个变量都必须使用对应的英文语义表示(提高代码的走读性) b.符合大驼峰(类名、模块)、小驼峰(方法、函数、属性、变量)的命名要求
思考:1.变量名命名能否重名?
分析:在python中,因为声明与赋值是同时实现的;存在相同的变量名的话实际就是将前面的变量进行值得覆盖;因为在其他语言中,需要先声明变量,然后再对变量进行赋值

原文地址:https://www.cnblogs.com/1308test/p/11218138.html