2。1数据类型 和其他编程语言相比,Python语言中的变量不需要显示数据类型的声明,Python的变量类型是根据变量的赋值内容而自动生成的。 Python六大数据类型:数字:包含int(整型)、long(长整型,但python3中已经没有了,python3中只有int)、complex(复数)、float(浮点型)、bool(布尔型)字符串(String):比如:helloworld,python列表(List):比如:〔1,2,3,4〕,〔’a‘,b,c,d〕字典(Dictionary):例如:{name:poge,age:30}元组(Tuple):例如:(1,hello,3)集合(Set):例如:{’a‘,’b‘,’c‘,’d‘} 以上是Python最基本的6种数据类型,本节先说数字类型,其他5大类型后续再讲。 数字类型: 表示数字或数值的数据类型称为数字类型。 数字类型有哪些?整型(int)浮点型(float)复数类型(complex)布尔类型(bool) tips:Python中使用type()函数可以查看变量的类型2。1。1整数 Python3中整型已经不分int和long了,只有int型! 整型表示形式:二进制:以0B或0b开头(比如0b101)八进制:以0o或0O开头(比如0o510)十进制:比如10、29、40十六进制:以0x或0X开头(比如0xA7A) 整型不同形式的转换bin():十进制转换为二进制,输出形式是字符串oct():十进制转换为八进制,输出形式是字符串hex():十进制转换为十六进制,输出形式是字符串int():接收一个符合整型规范的字符串,并将字符串转换为整型 tips1:Python中当多个变量的值相同时,这个值在内存中并没有被保存多次,只是多个变量都指向了同一内存,举例如下: a6 b6 ca print(id(a),id(b),id(c)) 输出: 164314646416431464641643146464 id()可以取出变量的内存地址,从结果可以看出,a,b,c三个变量都指向了同一内存。但如果修改了a的值,那a的内存地址和b,c的内存地址及值有什么变化呢?举例如下: a6 b6 ca print(id(a),id(b),id(c)) a8 print(id(a),id(b),id(c)) 结果: 164314646416431464641643146464 164314652816431464641643146464 从上面可以看出,a的地址变了,b,c的地址没有变。 数字时Python中的不可变对象,当改变它的值时,并不是真的修改内存中变量的值,而是把新的值放入内存中,然后修改变量,使得变量指向新值的内存地址。浮点数、复数等其他数字类型及其他类型的变量具有同样的特点。 tips:Python具有自动内存管理功能,如果一个值没有任何变量指向,则Python自动将其删除,因此,一般Python程序员不需要太多考虑内存管理的问题(这就是Python与C语言最大的区别,自动内存回收机制!),但显式使用del命令删除不再使用的值,仍然是一个优秀程序员需要具备的基本素养!2。1。2浮点数 所谓浮点数就是数学中的小数Python中浮点型一般以十进制表示,由整数和小数部分(可以是0)组成。对于很大或者很小的浮点型,可以使用科学计数法表示。Python中的浮点型是双精度的,每个浮点型数据占8个字节(即64位)。 科学计数法就是用字母e或E作为幂的符号,以10为基础,格式:xey表示的就是x乘以10的y次幂,例如: 1。2e2:1。2乘以10的2次幂0。012 2e3:2乘以10的3次幂2000 例如: a1。2 print(type(a)) b1e2 print(type(b)) c2e3 print(c) 输出: 2000。02。1。3复数复数由实部和虚部两部分组成;实数部分和虚数部分都是浮点型;虚数部分后面必须有j或J Python中表示复数的两种方法:abjcomplex(a,b) 其中a表示实部,b表示虚部 举例: a26j print(type(a)) bcomplex(2,6) print(type(b)) print(id(a),id(b)) 结果: 27184713727522718437554352 获取复数的实部、虚部、共轭复数等 a26j print(a。imag)。imag可以获取复数的虚部 print(a。real)。real可以获取复数的虚部 print(a。conjugate())。conjugate()方法可以获取复数的共轭复数 结果: 6。0 2。0 (26j)2。1。4布尔类型Python中的布尔类型只有True和False两个取值;True对应整数1,False对应整数0。常用的布尔运算包括and、or、not三种 等同于False的值:None;False;任何为0的数字类型,如0、0。0、0j;任何空序列,如、()、〔〕;空字典,如{};用户定义的类实例,如类中定义了bool()或者len()方法,并且该方法返回0或者布尔值False。 等同于True的值:非零数值非空字符串 and和or运算有一条重要的法则:短路法则 and举例: aandb,如果a是False,则整个结果必定为False,因此返回a的值,如果a是True,则表达式的结果取决于b,因此返回b a0 b2 print(aandb) a1 b0 print(aandb) a1 b3 print(aandb) 结果: 0hr0hr3hror举例: aorb,如果a是True,则整个结果必定为True,因此返回a的值,如果a是False,则表达式的结果取决于b,因此返回b a0 b2 print(aorb) a1 b0 print(aorb) aTrue print(aandzTorzF) 2hr1hrzT2。1。5数值运算 常见的数值运算有:加、减、乘、除、取余、指数运算等 例如:a2,b8 例如: a3 b6 ab加法 Out〔4〕:9 ab减法 Out〔5〕:3 ab乘法 Out〔6〕:18 a2指数运算a的2次方 Out〔7〕:9 ab取余 Out〔8〕:3 Python有两种除法:和 :真除法 :整除法,向下取整 例如: a6 b4 print(ab) print(ab) b4 print(ab) print(ab) 结果: 1。5 1hr1。5 22。1。6数值计算函数库 Python内置了很多实用的数值函数,例如: 另外,还有随机数函数用途也是有很多的:random模块 importrandom print(random。random())random。random()作用是生成一个〔01〕范围内的随机数 print(random。randint(1,2000))random。randint(a,b)作用是生成一个〔ab〕范围内的随机整数 0。48771584654043476 582。1。7type函数 type的用途是,当你不知道变量的数据类型时,可通过它来查询,type时内置函数,可以直接使用,不需要导包。 a2 b1。1 cabc d〔a,b〕 print(type(a)) print(type(b)) print(type(c)) print(type(d)) 2。2标识符2。2。1什么是标识符 在编程语言中,标识符就是程序猿自己规定的具有特定含义的名称和符号,比如:变量名、属性名、类名等。 python中以下划线开头的标识符有特殊含义,这里我们简单了解以下,后续遇到会重点讲解的,看不懂的也可直接跳过,不影响后续的学习。以单下划线开头的标识符:不能直接访问的类属性,需要通过类提供的接口访问。比如:foo以双划线开头的标识符:代表类的私有成员,比如:foo以双划线开头和结尾的标识符:代表的是python中的特殊方法,比如:init代表类的构造函数 一切变量在使用之前必须定义,需注意:python可以对多个变量同时赋值一个变量可通过赋值指向不同类型的对象 举例: abcd5 print(a) print(type(a)) print(b) print(c) print(d) aabcd print(type(a)) 5hr5hr5hr5hr2。2。2标识符的命名规则使用字母、数字、下划线()及其组合作为标识符名称,但不允许以数字开头。见名知意。标识符中不能有空格或标点符号(括号、引号、逗号等等)python语言区分大小写,比如:myname和Myname是两个不同的标识符。标识符不能与python关键字、内置函数、内置数据类型等重名 标识符的命名方法:统一命名方式: (1)单个小写字母,如a,b (2)单个大写字母,如A,B (3)多个小写字母,如ftpserver (4)多个大写字母,如FTPCLIENT (5)下划线分隔多个单词如myname MYHEIGHT (6)大写词(驼峰命名),如MyAge (7)大小写词(小驼峰命名),如myAge建议:myname这种写法,我个人非常喜欢的写法,而且越来越多的人采用这种写法,编写代码更加高效!2。2。3Python关键字 所谓关键字就是编程语言中,内置的具有特殊功能的标识符。 python中查看所有关键字的方法: importkeyword print(keyword。kwlist) 结果: 〔False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with,yield〕2。2。4Python的BIF BIF(buildinfunction)顾名思义,就是内置函数的意思,也就是python自带的一些函数功能,对于这些函数,可以不用导包,直接使用。比如:abs、oct、open等等 那怎么查看python中都有哪些内置函数呢? print(dir(builtins)) 输出: 〔ArithmeticError,AssertionError,AttributeError,BaseException,BlockingIOError,BrokenPipeError,BufferError,BytesWarning,ChildProcessError,ConnectionAbortedError,ConnectionError,ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,False,FileExistsError,FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,ImportWarning,IndentationError,IndexError,InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,ModuleNotFoundError,NameError,None,NotADirectoryError,NotImplemented,NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,PermissionError,ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,RuntimeError,RuntimeWarning,StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,TabError,TimeoutError,True,TypeError,UnboundLocalError,UnicodeDecodeError,UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,WindowsError,ZeroDivisionError,buildclass,debug,doc,import,loader,name,package,spec,abs,all,any,ascii,bin,bool,bytearray,bytes,callable,chr,classmethod,compile,complex,copyright,credits,delattr,dict,dir,pmod,enumerate,eval,exec,exit,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,isinstance,issubclass,iter,len,license,list,locals,map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,quit,range,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,vars,zip〕2。2。5专有标识符 python中有些标识符是具有特殊含义的 python中可以用下划线作为变量的前缀和后缀来指定特殊变量xxx不通过import导入,一般被看作私有的变量,在模块或类的外面不可使用xxx类中的私有变量xxx由系统定义 比如: name表示符就是用来判断当前模块是被导入还是被直接调用执行 如果模块被导入,那name的值为模块的名称,如果模块是被直接执行,那name的值为main 举例如下: name的值为:main 那如果用另外一个模块去导入它呢? name的值为:abcd 所以我们一般写python程序的时候,就要用下面这个基本框架来写 deffunc(): print(name的值为:,name) ifnamemain: func()2。3变量的作用域 在python中变量的作用域也叫做命名空间,也叫做名称空间,就是变量的的创建、修改、查找,都是在作用域中进行的。2。3。1Python作用域类型 python中作用域有四种类型:全局作用域局部作用域闭包函数的嵌套作用域内置作用域 1全局作用域 在模块文件的顶部声明的变量具有全局作用域。 从模块外部看,模块中的全局变量就是模块对象的属性。 全局作用域的作用范围仅限于本模块内部 如果你再函数内修改了全局变量的值,但是这个修改的值仅在函数内部有效,函数外部全局变量的值不会发生改变,例如: a1 deffunc(): a4 print(a) ifnamemain: print(a) func() print(a) 1hr4hr1hrtips:如果你真的想在函数内部修改全局变量的值,可使用global关键字在函数内声明该变量,例如: a1 deffunc(): globala a4 print(a) ifnamemain: print(a) func() print(a) 结果 1hr4hr4hr可以看出再打印全局变量a时,他的值已经改变为4了 2局部作用域 局部变量是在def定义的函数内的,每次函数被调用都会创建一个新的局部作用域,在函数内部的变量,除非特别声明为全局变量,否则默认为局部变量,只能在函数内使用。 deffunc(): globala a4 print(a) ifnamemain: print(a) 输出的结果为报错了: 但有时候,需要在函数内定义全局变量,这就可以用global关键字来提升变量的作用域为全局作用域,例如: deffunc(): globala a4 print(a) ifnamemain: func() print(a) 结果: 4hr4hr一般我们建议尽量少定义全局变量,因为在程序运行期间,全局变量会一直占用内存空间,内存是非常珍贵的资源,有的时候做的项目比较大,需要加载大量数据到内存中,就会明显感觉到吃力,甚至发生内存溢出的错误。 3。闭包函数的嵌套作用域 在嵌套函数中,如果引用了外层函数中的变量,则称之为闭包。 例如: deffunc(): a3 deffunc2(): print(a) func2() ifnamemain: func() 3hr但是这里需要注意一点,内嵌函数中的变量a,你可以在内嵌函数中引用,但是不可以修改它的值,否则会报错! 如果真想改,可以用nonlocal关键字,在内嵌函数中强制生命a这个变量不是局部变量,或者用列表list也可以 4内置作用域 系统内固定模块里定义的变量拥有内置作用域。 变量作用域的优先级顺序: 局部变量嵌套作用域全局作用域内置作用域。 python中只有模块、类、函数才能引入新的作用域,其他语法结构都不可以2。3。2赋值操作符 python中赋值操作符为: 等号运算符的左边是变量名,右边是存储在变量中的值 tips:python中对变量赋值,不是直接将值付给变量,而是将变量的引用赋值给变量。引用就是指的地址2。3。3增量赋值 python不支持C语言中的x,x这种自增自减运算 但python支持、之类的增量运算符 比如: a1表示的就是aa1 常见的增量运算符还有: 用法与完全一样2。3。4多元赋值python语言允许同时对多个变量赋值: 例如: abc8python语言也可以为多种变量指定不同类型的数据: a,b,c1,0。98,hello print(a) print(b) print(c) 1hr0。98 hello2。4语法规则 任何一种语言都有自己的语法规则,汉语、英语、编程语言中的python、cc、Java等等,每种语言的规则都不太一样。 Python语言的语法规则很简单,本节将从注释、代码块、同行书写多条语句以及空行和缩进等方面进行介绍。2。4。1注释 注释:注释用于在程序指定位置添加说明性信息注释不参与程序运行,仅起说明作用 注释分类:单行注释:以号开头多行注释:三个单引号注释的内容‘’‘,或三个双引号注释的内容 例如: 2。4。2代码块 缩进相同的一组语句构成一个代码块,也称为代码组。 像if、while、def、class这样的复合语句,首行是以关键字开始,以冒号:结束,首行和之后的代码构成一个代码块。 下面例子中,每个红框就是一个代码组 2。4。3同行书写多条语句 正规的写法是一行只写一条语句,但是如果一条语句太长,长度超出屏幕上的编辑框了,可以用反斜杠来实验多行语句。 例如: 这里我们就可以把一条语句用两行甚至更多行来写,用反斜杠就可以实现。 但是需要注意的是,〔〕、{}、()中的多行语句,不需要使用反斜杠,直接换行就行,例如: 2。4。4空行与缩进 函数之间或类的方法之间,一般会用一行空行进行分割,这只是让代码更加清晰好看,有利于后期代码的维护,但空行并不是python的语法,因此并不是强制要求的。 以下面代码为例:func1和func2两个函数之间用空行进行分割。 但是缩进却是python语言的语法规则,python是靠缩进来表示代码块的,类比C语言中的大括号:{} 缩进的空格数是可以变的,但是同一块代码块的缩进空格数是一致的。 缩进的话建议用空格,而不是table键,因为移植到有些平台上,table表示的缩进不是四个空格,就会让代码缩进发生变化,但是用空格缩进,就不会出错。2。5IO操作 IO:InputOuput(输入输出的意思) 输入和输出是相对计算机内存而言的2。5。1输出操作 因为现在基本没有再用python2。x版本的了,所以我们后续只讲python3。x版本的内容。 python中输出用的是print()函数 举例如下: print(helloworld!)直接打印一个字符串 a3 print(a)打印一个变量 b4 print(ab)print()的参数可以是一个表达式 print(ab,ab)print()多个参数,用逗号隔开 c〔1,2,3,4〕 foriinc: print(i,end)print()end参数指的是输出多个参数时,中间用什么符号连接,这里可以是任意字符,也可以是空格 helloworld! 3hr7hrab7 12342。5。2输入操作 input()函数用来接收用户键盘的输入。 不管用户输入的是什么数据,input函数的返回值都是字符串,如果需要转换成对应的数据类型,可以进行类型转换,也可以使用eval函数,把输入的数据还原成原有的数据类型。 举例如下: ainput() binput(请输入一个整数:) print(type(a)) print(type(b)) deval(input(请输入一个浮点数:)) print(type(d)) 输出: 67hr请输入一个整数:12 请输入一个浮点数:0。89 2。6Python模块 大家想象一下,如果你把所有的代码都放在一个文件里面,加入说你的工程项目有10万行代码,你把10万行代码都放在一个文件里面,那你后期想要维护代码,是不是就要付出很大的代价! 那我们一般都是怎么解决这个问题呢,就是将功能比较相近的函数,放到一个文件中,假如我们10万行代码分别放到了10个文件中,那每个文件平均下来就1万行代码,是不是好维护一些。 在python中,一个。py文件就是一个模块(Module) 使用模块可以提高代码的可维护性,使用模块也可以避免函数名和变量名的冲突。2。6。1模块的分类 python中有三种模块内置标准模块(其他语言中叫标准库),执行help(modules)可查看所有的python自带模块第三方开源模块,可通过pipinstall模块名联网进行安装自定义模块,你自己创建一个。py文件就可以称为模块,可在另一个程序中导入。2。6。2使用pip管理Python扩展库 pip是python官方推荐的安装和管理python扩展库(第三方库) pip的功能有:安装、升级、卸载第三方库 安装: pipisntall模块名称 离线安装。whl文件 pipinstall。whl 升级: pipinstallupgrade模块名 卸载: pipuninstall模块名2。6。3模块导入和使用 直接导入模块: import模块名 给导入的模块起一个别名(当本身模块名太长时): import模块名as模块名的别名 只需要使用模块中某个对象时: from模块名import对象名 只需要使用模块中某个对象时,且给这个对像起一个新的名字: from模块名import对象名as对象别名 一次性导入模块中的全部对象(强烈不建议这么做): from模块名import2。6。4模块的导入顺序 当需要导入的模块较多时,一般的导入顺序如下:导入python标准模块,比如:sys、time、os、date、math等等导入第三方开源模块,比如:Numpy、Pandas、matplotlib等等导入自己开发的模块 这个导入顺序只是约定成俗的东西,并没有强制要求,你可以按照任意的顺序导入,但是最好大家都按照这个标准来,这样代码也会比较清晰,别人更好读懂你的代码。2。7Python对象 python是一种面向对象的编程语言 玩python的人都知道一句非常经典的话: 在python中一切皆对象 就像玩Linux的人都知道:在Linux中一切皆文件 我们python中的变量、函数、容器、类等等皆是对象。 那什么是对象呢? 实际生活中,我们每个人都是一个对象,每一本数也都是一个对象,每个动植物也都是一个对象。 那每个人都有自己的名字,每本书都有自己的书名,每个动植物都有自己的编号,那这些呢,我们称之为对象的属性 人会说话,会写字,书可供人阅读,动植物也各有其功能,那这些对象所具有的功能,我们称之为对象的方法 那python中怎么定义对象呢 这里有个关键字class 用来定义类的,通过类的实例化就可以得到类的对象。类的详细的知识,后面会讲,这里我们只做简单的了解 classCat(object): nameTom定义属性 defmaospeak(self):定义方法 print(喵喵喵) ifnamemain: objCat() print(obj。name) obj。maospeak() 结果: Tom 喵喵喵 除了上述自定义的类之外,python还有很多可直接使用的对象类型,称为python内置对象,例如: 列表、集合、元组、字典等等2。8小结 本章先是讲解了python的六大数据类型、标识符和变量作用域,然后是python的语法规则、IO操作和python模块,最后是python对象的简述。 PS: 写一篇文章真的很费劲,会占用大量的时间,希望大家能认真的学习,跟着案例进行好好的研究,尽快入门python,这样后续我们才能去实际做一些有用的项目。 现在是打基础阶段,打基础本就是不见成效的,这就跟盖楼一个道理,地基都在地下,外人跟本看不到,只有当一层层楼拔地而起的时候,才能看到成效。 也就是说,只有开始做项目你才能看到效果,但是楼到底能建多高,是取决于你的地基有多深有多牢固的。 我很喜欢白岩松说的一句话:多去做一些看似无用的事情 我发现很多人,眼睛里只能看到当下对自己有好处的事情,什么事能及时反馈好处,就做什么,眼前看不到好处的事情,就不去做。 能长久获得的快乐,都是经过一番艰难困苦之后得到的 推荐大家看一下这个视频: 到底什么是学霸最牛的核武器?内啡肽居然有如此神奇力量!?