diff --git "a/python\345\237\272\346\234\254\350\257\255\346\263\225.md" "b/python\345\237\272\346\234\254\350\257\255\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..334a038add193539b3a3faeee69dcffe1642a592 --- /dev/null +++ "b/python\345\237\272\346\234\254\350\257\255\346\263\225.md" @@ -0,0 +1,230 @@ +# 一张图认识Python(附基本语法总结) + +![一图搞懂python基本语法.png](https://i.loli.net/2019/08/27/WR1BKbuDmdIV67r.png) + + + +Python基础语法总结: + +## 1.Python标识符 + +在 Python 里,标识符有字母、数字、下划线组成。 + +在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 + +Python 中的标识符是区分大小写的。 + +以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入; + +以双下划线开头的 foo 代表类的私有成员;以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init__() 代表类的构造函数。 + +## 2.Python有五个标准的数据类型 + +Numbers(数字) +String(字符串) +List(列表) +Tuple(元组) +Dictionary(字典) +Python支持四种不同的数字类型: + +int(有符号整型) +long(长整型[也可以代表八进制和十六进制]) +float(浮点型) +complex(复数) +python的字串列表有2种取值顺序: + +从左到右索引默认0开始的,最大范围是字符串长度少1 +从右到左索引默认-1开始的,最大范围是字符串开头 +List(列表) 是 Python 中使用最频繁的数据类型。 + +列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。 +列表用 [ ] 标识,是 python 最通用的复合数据类型。 +列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。 +加号 + 是列表连接运算符,星号 * 是重复操作。 +元组是另一个数据类型,类似于List(列表)。 + +元组用”()”标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。 +字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。 + +列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 +字典用”{ }”标识。字典由索引(key)和它对应的值value组成。 + +## 3.Python数据类型转换 + +有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。 + +以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。 + +函数 描述 +int(x [,base]) + +将x转换为一个整数 + +long(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) + +将一个整数转换为一个字符 + +unichr(x) + +将一个整数转换为Unicode字符 + +ord(x) + +将一个字符转换为它的整数值 + +hex(x) + +将一个整数转换为一个十六进制字符串 + +oct(x) + +将一个整数转换为一个八进制字符串 + +## 4.Python 运算符 + +### 算术运算符 +比较(关系)运算符 +赋值运算符 +逻辑运算符 +位运算符 +成员运算符 +身份运算符 +运算符优先级 +python算术运算符 + +运算符 描述 实例 + +加 - 两个对象相加 a + b 输出结果 30 +减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 +乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200 +/ 除 - x除以y b / a 输出结果 2 +% 取模 - 返回除法的余数 b % a 输出结果 0 +幂 - 返回x的y次幂 ab 为10的20次方, 输出结果 100000000000000000000 +// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 + +### ①:python比较运算符 + +以下假设变量a为10,变量b为20: + +运算符 描述 实例 +== 等于 - 比较对象是否相等 (a == b) 返回 False。 +!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true. +<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。 + +大于 - 返回x是否大于y (a > b) 返回 False。 +< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。 += 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。 +<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。 + +### ②:Python赋值运算符 + +以下假设变量a为10,变量b为20: + +运算符 描述 实例 += 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c ++= 加法赋值运算符 c += a 等效于 c = c + a +-= 减法赋值运算符 c -= a 等效于 c = c - a += 乘法赋值运算符 c = a 等效于 c = c * a +/= 除法赋值运算符 c /= a 等效于 c = c / a +%= 取模赋值运算符 c %= a 等效于 c = c % a += 幂赋值运算符 c = a 等效于 c = c ** a +//= 取整除赋值运算符 c //= a 等效于 c = c // a + +### ③:Python位运算符 + +下表中变量 a 为 60,b 为 13,二进制格式如下: + +a = 0011 1100 +b = 0000 1101 +a&b = 0000 1100 +a|b = 0011 1101 +a^b = 0011 0001 +~a = 1100 0011 +运算符 描述 实例 +& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100 +| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101 +^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 +~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 +<< 左移动运算符:运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000 + +> 右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111 +> + +### ④:Python逻辑运算符 + +Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20: + +运算符 逻辑表达式 描述 实例 +and x and y 布尔”与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。 +or x or y 布尔”或” - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。 +not not x 布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False + +### ⑤:Python成员运算符 + +除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。 + +运算符 描述 实例 +in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 +not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 + +### ⑥:Python身份运算符 + +身份运算符用于比较两个对象的存储单元 + +运算符 描述 实例 +is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False +is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。注:is 与 == 区别: + +is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。 + +学习资料推荐>>> +基于Python的机器学习 +Python高级安全编程 + +Python实战应用开发 + +Python 信息安全工具开发 \ No newline at end of file diff --git "a/python\351\253\230\347\272\247\350\257\255\346\263\225.md" "b/python\351\253\230\347\272\247\350\257\255\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ea276b122b442926a7dba65cdb9197886b326fe --- /dev/null +++ "b/python\351\253\230\347\272\247\350\257\255\346\263\225.md" @@ -0,0 +1,146 @@ +# 高级语法 + +## 函数定义 + + def fun(): + # statement... + [return ] + +## 定义模块 + + 一个python文件就是一个模块 + 一个包含模块的文件夹也是一个模块 +## 导入模块 + + import ${module_name} # module_name 就是模块文件的名称,不加后缀 .py + from ${module_namespace} import ${module_name} #从模块空间导入某个模块 + +## 面向对象 +### 创建类 +使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾: +```python +class ClassName: + '类的帮助信息' #类文档字符串 + class_suite #类体 +``` +**注意** + +类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 + +例子: + +```python +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +class Employee: + '所有员工的基类' + empCount = 0 + + def __init__(self, name, salary): + self.name = name + self.salary = salary + Employee.empCount += 1 + + def displayCount(self): + print "Total Employee %d" % Employee.empCount + + def displayEmployee(self): + print "Name : ", self.name, ", Salary: ", self.salary + +class Test: + def prt(self): + print(self) + print(self.__class__) + +t = Test() +t.prt() +``` +以上实例执行结果为: +> <__main__.Test instance at 0x10d066878> + +> __main__.Test + +### 创建实例对象 + +实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。 + +以下使用类的名称 Employee 来实例化,并通过 __init__ 方法接收参数。 + +```python +"创建 Employee 类的第一个对象" +emp1 = Employee("Zara", 2000) +"创建 Employee 类的第二个对象" +emp2 = Employee("Manni", 5000) +``` + +访问属性 +您可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量: +```python +emp1.displayEmployee() +emp2.displayEmployee() +print "Total Employee %d" % Employee.empCount +``` + +### Python内置类属性 +__dict__ : 类的属性(包含一个字典,由类的数据属性组成) +__doc__ :类的文档字符串 +__name__: 类名 +__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod) +__bases__ : 类的所有父类构成元组(包含了一个由所有父类组成的元组) + + +### python对象销毁(垃圾回收) + +语法 +**del instance** + +Python 使用了引用计数这一简单技术来跟踪和回收垃圾。 + +在 Python 内部记录着所有使用中的对象各有多少引用。 +一个内部跟踪变量,称为一个引用计数器。 + +当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。 + +垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。 + +### 类的继承 +面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。 + +通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。 + +继承语法 +```python +class 派生类名(基类名) + ... +``` +在python中继承中的一些特点: + +1、如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。详细说明可查看:python 子类继承父类构造函数说明。 +2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数 +3、Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。 +如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。 + +语法: + +派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示: +```python +class SubClassName (ParentClass1[, ParentClass2, ...]): + ... + +``` +### 类属性与方法 +#### 类的私有属性 +__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。 + +#### 类的方法 +在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数 + +#### 类的私有方法 +__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods +### 单下划线、双下划线、头尾双下划线说明: +__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。 + +_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * + +__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。 \ No newline at end of file diff --git "a/\345\270\270\347\224\250python\346\250\241\345\235\227.md" "b/\345\270\270\347\224\250python\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..936caa8027cd604b8d7212bebb822ce64ef5c218 --- /dev/null +++ "b/\345\270\270\347\224\250python\346\250\241\345\235\227.md" @@ -0,0 +1,36 @@ +# 常用模块说明 + +os 操作系统模块,文件路径操作等 + +sys 程序系统本身模块,获取参数,导入的模块,输入输出等 + +time timestamp时间戳,struct_time时间元组,format time 格式化时间模块 + +datetime模块 datatime模块重新封装了time模块,提供更多接口 + +hashlib加密 hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 + +logging模块简介 logging模块是Python内置的标准模块,可以设置级别 + +subprocess模块 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程 + +# 总结 +那么我们到底该用哪个模块、哪个函数来执行命令与系统及系统进行交互呢?下面我们来做个总结: + +首先应该知道的是,Python2.4版本引入了subprocess模块用来替换os.system()、os.popen()、os.spawn*()等函数以及commands模块;也就是说如果你使用的是Python 2.4及以上的版本就应该使用subprocess模块了。 +如果你的应用使用的Python 2.4以上,但是是Python 3.5以下的版本,Python官方给出的建议是使用subprocess.call()函数。Python 2.5中新增了一个subprocess.check_call()函数,Python 2.7中新增了一个subprocess.check_output()函数,这两个函数也可以按照需求进行使用。 +如果你的应用使用的是Python 3.5及以上的版本(目前应该还很少),Python官方给出的建议是尽量使用subprocess.run()函数。 +当subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()这些高级函数无法满足需求时,我们可以使用subprocess.Popen类来实现我们需要的复杂功能。 +json ,pickle模块 +JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。 + +在python中,有专门处理json格式的模块—— json 和 picle模块 + + Json 模块提供了四个方法: dumps、dump、loads、load + +pickle 模块也提供了四个功能:dumps、dump、loads、load + +# 参考地址 +常用模块和使用案例 +https://www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html +