本篇文章记录的是Python函数对象和嵌套的知识。一、函数对象精髓:可以把函数名当成变量名去用函数名和变量名一样,都是指向的是内存地址二、函数名的用途1、可以赋值把一个函数名赋值给另一个变量名# func=函数的内存地址 def func(): pass f=func print(func) # <function func at 0x000001E78F9B3EA0> print(f) # <function func at 0x000001E78F9B3EA0>2、当参数函数名也可以当做参数传给另一个函数def func(): pass def foo(x): # × = func的内存地址# print(x) x() foo(func) # foo( func的内存地址)3、当返回值函数名也可以当函数的返回值def func(): pass def foo(x): return x res = foo(func) print(res)4、当元素函数名
本篇文章记录的是Python名称空间和作用域的知识。一、名称空间名称空间,名称即名字,空间就是存放东西的地方,那么名称空间你可以理解为就是放名字的地方,变量名是放在栈区的,变量值是放在堆区的,实际上名称空间是对栈区的划分,有了名称空间我们就可以在栈区中存放相同的名字了,名称空间让他们相互隔离开来,进而也实现了资源隔离,名称空间是一种虚拟化的划分,栈区是真实存在的。==我们讲名称空间只考虑名字 , 是不考虑值的 , 因为名字太重要了 , 通过名字可以引用到值==二、三种名称空间1、 内置名称空间存放python解释器内置的名字 , 比如 print input等>>> print <built-in function print> >>> input <built-in function input>存活周期 :python解释器启动则产生,python解释器关闭则销毁2、 全局名称空间只要不是函数内定义、也不是内置的,剩下的都是全局名称空间的名字import os # os是存放在全局名称空间的名字 x = 123
本篇文章记录的是Python函数参数的知识。一、形参和实参1、形参形参:在定义函数阶段定义的参数叫做形式参数,简称形参,相当于变量名。==函数在定义阶段括号内指定的变量名==def func(x): # x就是形参 print(x)2、实参实参:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值,值可以是常量,变量、表达式或三者的组合。==函数在调用阶段括号内传入的值。==def func(name): print(f'我的名字是{name}') func('tom') # 'tom'就是实参 3、形参和实参的关系在调用阶段,实参(变量值)会绑定给形参(变量名),绑定不是目的,目的是在函数体中使用,函数调用结束后,这种绑定关系就会解除,所以无法再函数体外使用。二、三种参数1、位置参数位置参数:按照从左到右的顺序依次定义的参数称之为位置参数。位置形参:在函数定义阶段,按照从左到右的顺序直接定义的变量名。特点:必须传值,多一个不行,少一个也不行。def func(x,y,z): # x,y,z 三个位置形参 return x + y + z位
本篇文章记录的是Python函数的基本使用的知识。一、函数介绍1、什么是函数函数就相当于具备某一功能的工具,就像爆米花机,给玉米就会造出爆米花。2、为什么要用函数组织结构清晰,可读性强代码精简可维护性强,扩展性强3、如何使用函数先定义后调用返回值二、函数定义1、函数定义函数的使用必须遵循先定义,后调用的原则,函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的,没有事先定义函数而直接调用,就相当于在引用一个不存在的变量名,同时函数名的命名规范也和变量名一样的,字母数字下划线组成。定义函数的语法:def 函数名(参数1,参数2,...): """文档描述""" 函数体 return 值 # def是关键字,return是返回值定义函数会发生的事情:申请内存空间保存函数体代码将上述内存地址绑定给域名定义函数不会执行函数体代码,但是会检测函数体语法def func(): x print('hello word') # 运行
本篇文章记录的是Python字符编码的知识。字符编码谈字符编码,首先谈谈和字符相关的知识一、预备知识1、 python的字符相关(1)字符串我们之前就了解并学习过字符串就是由一串字符组合形成的,毋庸置疑谈字符编码肯定和字符串有关(2) 文本文件在我们没有接触python之前,你可能就已经接触了word文件,尤其是在学生时代,各种通知,作业都是wordword文件本质上就是文本文件,由很多字符组成,只不过当初的你把它叫做汉字或者英文字母。2、 三大核心硬件首先所有的软件都是运行在硬件之上的,与运行软件相关的三大核心硬件分别为cpu,内存,硬盘。首先明确:软件运行之前,软件的代码以及相关的数据都是保存在硬盘上的任何软件的运行都是把数据从硬盘中读入到内存,然后cpu从内存中取出指令执行软件运行过程中产生的数据都是先保存在内存中的,如果想要永久保存数据,则需要将数据由内存写入到硬盘中2、 文本编辑器读取文件内容的流程#阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word) #阶段2、文件编辑器会将文件内容从硬盘读入内存 #阶段3、文本编辑器会将刚刚读入内存中
==声明:本篇文章仅用于学习笔记记录,不得用于其他用途。==一、Fastjson1、1.2.24反序列化_rce(1)漏洞介绍fastjson在解析json字符串的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。(2)漏洞产生的原因通俗理解就是:漏洞是利用fastjson autotype在处理json字符串的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类(com.sun.rowset.JdbcRowSetImpl)连接远程rmi服务器,通过rmi服务器加载恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的权限,对服务器造成巨大的影响补充:rmi 是一种协议,你可以简单的理解为 一台机器执行另一台机器给的命令(3)影响版本Fastjson <= 1.2.24(4)环境搭建cd vulhub-master/fastjson/1.2.24-rcedocker-compose up -ddocker-compose dow
本篇文章记录的是Python文件操作的知识。一、学前三问1、什么是文件?文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口用户/应用程序 操作系统(文件) 操作系统会把对用户/应用程序文件功能的调用转成具体的硬盘操作 计算机硬件(硬盘)2、为何要用文件用户/应用程序可以通过文件将数据永久保存的硬盘中,即操作文件就是操作硬盘。用户/应用程序直接操作的是文件,对文件进行的所有操作,都是在向操作系统发送系统调用,然后再由操作将其转换成具体的硬盘操作。3、如何用文件:open()(1)控制文件读写内容的模式:t和b强调:t和b不能单独使用,必须和r/w/a连用,默认就是t,t代表text,通常不写后面的话,只有一个光秃秃的r w a这种实际上指的就是rt wt att文本(默认的模式)1、读写都以str(unicode)为单位2、文本文件3、必须指定encoding=’utf-8‘b二进制/bytes一般是一些音频文件或者视频文件(2)控制文件读写操作的模式r 只读模式w 只写模式a 只追加写模式+:r+,w+,a+ 在原来模式的基础上只读的变可读可写,可写的变可写可读二、文件
本篇文章记录的是Python基础数据类型补充以及内置方法的知识。一、引入之前我们已经对python基础数据类型有了一个简单的认识,比如有字符串,布尔值,列表,元组,集合,字典等,但是那些都是基础的了解,对于基础数据类型我们还要进一步的学习他们,以及他们常用的内置方法。二、数字类型1、定义age = 18 # 实际上这是python的字面量语法,内部调用的是age=int(10) # 先是在堆区中申请一块内存空间,把10存进去,然后把内存地址绑定给栈区的变量名.2、类型转换(1)字符串转数字int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号,则会报错。s = '1234' ret = int(s) print(ret,type(ret)) # 1234 <class 'int'> int('13.14') # 错误演示:字符串内包含了非整数符号. Traceback (most recent call last): File "<stdin>", line 1, in <module> Value
本篇文章记录的是Python流程控制的知识。一、if判断1、条件在讲if判断之前简单说一下什么是条件。条件的意思是事物存在、发展的影响因素,所具备或处于的状况。(1)什么可以当做条件上面是我们对条件的解释,不懂也可以,重要的是python中什么可以当做条件,以及从条件中最终得到什么,所有条件最终都会返回一个布尔值,就是我们常说的真和假,那么只要能返回布尔值,就可以当做条件。a、显式布尔值条件可以是:比较运算/逻辑运算等3 > 2 # 返回的布尔值是True age = 18 gender = "女" age == 18 and gender == "女"条件可以直接是True/Falseb、隐式布尔值所有的数据类型的值都可以当做条件去用,要和if连用1,0 1.0 "1" , [1] , {"k1":"v1"}其中0,None,空(空字符串,空字典,空列表。。)代表的布尔值都是False,其余的都是True补充:在Python查看一个值对应的bool值,可以通过bool
本篇文章记录的是Python运算符知识。一、算术运算符1、什么是算数运算符就是做加减乘除四则运算以及其他的复杂运算的, 让计算机能像人一样可以做计算符号含义+相加-相减*相乘/相除 (有小数部分,结果全是float类型)//地板除 (只保留整数部分)%取余/取模 (只保留余数)**幂运算print(10/2) # 5.0 float类型重点提一嘴10 // 3 ==> 3 10 % 3 ==> 1 2 ** 3 ==> 8二、 比较运算符1、 什么是比较运算符就是做比较运算的, 让计算机能像人一样可以做比较符号含义>大于<小于>=大于等于<=小于等于==等于!=不等于三、 赋值运算符1、 什么是赋值运算符就是做赋值操作的, 让计算机能像人一样给一个事物附上一个值, 记录下来(1) 增量赋值符号含义=变量的赋值+=加等于-=减等于*=乘等于/=除等于//=取整等于%=取余等于**=幂等于提一嘴 , 你在python会经常见到x += 1 等价于 x = x +1(2)交叉赋值x = 10 y = 20 x,y = y,x(3)
易水哲
一个什么都会一点的白帽子