# PythonStudy **Repository Path**: codemg/PythonStudy ## Basic Information - **Project Name**: PythonStudy - **Description**: This is my Python Study Files - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-08 - **Last Updated**: 2021-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python3 # 基础语法 1.编码:#coding=utf-8 2.标识符:第一个字符必须是字母表中字母或下划线 _ ;标识符的其他的部分由字母、数字和下划线组成;标识符对大小写敏感 3.保留字:keyword 模块 4.注释:单行注释以 # 开头;多行注释可以用多个 # 号,还有 ''' 和 """ 5.行与缩进:不需要使用大括号 {},用缩进来表示代码块;缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数 6.多行语句:如果语句很长,可以使用反斜杠(\)来实现多行语句;在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\) 7.数字类型:数字有四种类型 整数、布尔型、浮点数和复数 8.字符串:单引号和双引号使用完全相同;三引号('''或""")可以指定一个多行字符串;反斜杠可以用来转义,使用r可以让反斜杠不发生转义; 以用 + 运算符连接在一起,用 * 运算符重;字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始;字符串不能改变;字符串的截取的语法格式如下:变量[头下标:尾下标:步长] 9.空行:函数之间或类的方法之间用空行分隔,表示一段新的代码的开始;类和函数入口之间也用一行空行分隔,以突出函数入口的开始 同一行中显示多条语句:语句之间使用分号(;)分割 10.Print 输出:print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="" 11.模块的导入:用 import 或者 from...import 来导入相应的模块;将整个模块(somemodule)导入,格式为: import somemodule;从某个模块中导入某个函数,格式为: from somemodule import somefunction;从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc;将某个模块中的全部函数导入,格式为: from somemodule import * # 基本数据类型 1.可为多个变量赋值,用逗号隔开 2.数据类型:不可变--Number(数字)、String(字符串)、Tuple(元组);可变---List(列表)、Dictionary(字典)、Set(集合) 3.Number:Python3 支持 int、float、bool、complex(复数);内置的 type() 函数可以用来查询变量所指的对象类型;isinstance(a, int)判断类型;isinstance 和 type 的区别在于:type()不会认为子类是一种父类类型;isinstance()会认为子类是一种父类类型;del var1[,var2[,var3[....,varN]]] 删除对象引用 4.String:字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符;如果让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串 5.List:列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表;列表是写在方括号 [] 之间、用逗号分隔开的元素列表 6.Tuple:与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开;虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表;可构造包含 0 个或 1 个元素的元组;string、list 和 tuple 都属于 sequence(序列) 7.Set:由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员;基本功能是进行成员关系测试和删除重复元素;可以使用大括号 { } 或者 set() 函数创建集合,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典;parame = {value01,value02,...}或者set(value) 8.Dictionary:列表是有序的对象集合,字典是无序的对象集合,两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取;字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合;键(key)必须使用不可变类型;在同一个字典中,键(key)必须是唯一的 9.数据类型转换函数:int(x [,base]):将x转换为一个整数;float(x),将x转换到一个浮点数;complex(real [,imag]),创建一个复数;str(x),将对象 x 转换为字符串;repr(x),将对象 x 转换为表达式字符串;eval(str),用来计算在字符串中的有效Python表达式,并返回一个对象;tuple(s),将序列 s 转换为一个元组;list(s),将序列 s 转换为一个列表;set(s),转换为可变集合;dict(d),创建一个字典。d 必须是一个序列 (key,value)元组;frozenset(s),转换为不可变集合;chr(x),将一个整数转换为一个字符;ord(x),将一个字符转换为它的整数值;hex(x),将一个整数转换为一个十六进制字符串;oct(x),将一个整数转换为一个八进制字符串 # 运算符 1.算术运算符:+,-,*,/,%,`**`(幂),`//`(取整除 - 返回商的整数部分,向下取整) 2.比较运算符:<>(是否不相等) 3.赋值运算符:=,+=,-=,*=,/=,**=,//=,%= 4.逻辑运算符:and( 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值),or(如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值),not(如果 x 为 True,返回 False 。如果 x 为 False,它返回 True) 5.成员运算符:in(如果在指定的序列中找到值返回 True,否则返回 False),not in(如果在指定的序列中没有找到值返回 True,否则返回 False) 6.身份运算符:is(判断两个标识符是不是引用自一个对象),not is(判断两个标识符是不是引用自不同对象)(ps: id() 函数用于获取对象内存地址)(ps:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等) 7.运算符优先级:( ** )指数 >( ~ + - )按位翻转, 一元加号和减号 > ( * / % // )乘,除,取模和取整除 > ( + - )加法减法 > ( >> << )右移,左移运算符 > ( & )位 'AND' > ( ^ | )位运算符 > ( <= < > >= )比较运算符 > ( <> == != )等于运算符 > ( = %= /= //= -= += *= **= ) 赋值运算符 > ( is is not )身份运算符 > ( in not in )成员运算符 > ( not and or )逻辑运算符 # Number(数字类型) 1.math 模块、cmath 模块: math 模块提供了许多对浮点数的数学运算函数,cmath 模块包含了一些用于复数运算的函数;查看math模块函数:import math dir(math); 2.数学函数:abs(x),返回数字的绝对值,如abs(-10) 返回 10;ceil(x),返回数字的上入整数;cmp(x, y),如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1;exp(x),返回e的x次幂(ex);fabs(x),返回数字的绝对值;floor(x),返回数字的下舍整数;log(x),如math.log(math.e)返回1.0,math.log(100,10)返回2.0; log10(x),返回以10为基数的x的对数;max(x1, x2,...),返回给定参数的最大值,参数可以为序列;min(x1, x2,...),返回给定参数的最小值,参数可以为序列;modf(x),返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示;pow(x, y),x**y 运算后的值;round(x [,n]),返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数;sqrt(x),返回数字x的平方根 3.随机数函数:choice(seq),从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数;randrange,([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1;random(),随机生成下一个实数,它在[0,1)范围内;seed([x]),改变随机数生成器的种子seed;shuffle(lst),将序列的所有元素随机排序;uniform(x, y),随机生成下一个实数,它在[x,y]范围内 4.数学常量:pi,e 5.三角函数: .... # String(字符串) 1.字符串格式化:%c:字符;%s:字符串;%d:整数;... 2.字符串函数:capitalize(),将字符串的第一个字符转换为大写; count(str, beg= 0,end=len(string)),返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数; # List(列表) 1.操作:增加:append;删除:del;修改:直接赋值 2.列表脚本操作符:+ 号用于组合列表,* 号用于重复列表,len()长度; #Tuple 1.创建元组:元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号,列表使用方括号;元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可;元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用 2.访问元组;元组可以使用下标索引来访问元组中的值 3.修改元组:元组中的元素值是不允许修改的,但可以对元组进行连接组合 4.删除元组:元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组 # Dictionary 1.字典是另一种可变容器模型,且可存储任意类型对象;字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如同`d = {key1 : value1, key2 : value2 }`;键必须是唯一的,但值则不必;值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组 2.字典特性:字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行;允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住;键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行 # Set 1.集合(set)是一个无序的不重复元素序列;可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典; 2.添加元素:s.add( x );s.update( x ) 3.移除元素:s.remove( x );s.discard( x );s.pop() 4.其他:len(s)--计算元素个数;s.clear()--清空集合;x in s--判断元素是否存在; # 语句语法 1.条件语句 ` if 判断条件1: 执行语句1…… elif 判断条件2: 执行语句2…… elif 判断条件3: 执行语句3…… else: 执行语句4…… ` 2.循环语句 循环类型:while,for,嵌套(while循环体中嵌套for循环) 循环控制语句:break,continue,pass 2.1.while: ` while 判断条件: 执行语句…… else .... ` 2.2.for循环: ` for iterating_var in sequence: statements(s) else statements ` 2.3.嵌套循环 ` for iterating_var in sequence: for iterating_var in sequence: statements(s) statements(s) ` 或 ` while expression: while expression: statement(s) statement(s) ` 2.4.循环控制: break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句;break语句用在while和for循环中;嵌套循环中,break语句将停止执行最深层的循环,并开始执行下一行代码; continue 跳过当前循环的剩余语句,然后继续进行下一轮循环; pass 不做任何事情,一般用做占位语句 2.5.range()函数 遍历数字序列,可以使用内置range()函数,生成数列;遍历数字序列,可以使用内置range()函数。它会生成数列:range(5,9)-5,6,7,8;range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'): range(0, 10, 3)--0,3,6,9 2.6.迭代器与生成器 迭代器:字符串,列表或元组对象都可用于创建迭代器;迭代器有两个基本的方法:iter() 和 next(); 创建迭代器:把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__(),__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成,__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象; StopIteration:StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代; 生成器:使用了 yield 的函数被称为生成器(generator);生成器是一个返回迭代器的函数,只能用于迭代操作;在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行;调用一个生成器函数,返回的是一个迭代器对象 # 函数 1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ();任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数;函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明;函数内容以冒号起始,并且缩进;return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回 None: ` def 函数名(参数列表): 函数体 ` 2.类型属于对象,变量是没有类型的;函数的参数传递:不可变类型,类似值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身;可变类型,类似引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 3.参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样;关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值(例如str="..."),使用关键字参数允许函数调用时参数的顺序与声明时不一致;使用关键字参数允许函数调用时参数的顺序与声明时不一致;不定长参数:能处理比当初声明时更多的参数,和其他参数不同,声明时不会命名,如果在函数调用时没有指定参数,它就是一个空元组: ` def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression] `;匿名函数:`lambda [arg1 [,arg2,.....argn]]:expression` 4.return:return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None 5.变量作用域:L (Local) 局部作用域;E (Enclosing) 闭包函数外的函数中;G (Global) 全局作用域;B (Built-in) 内置作用域(内置函数所在模块的范围),以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找;内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它;只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问 6.全局变量和布局变量:定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域;局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中; 7.global 和 nonlocal关键字 :当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了;如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了