php怎么添加横线,如何快速精通python?
既然是毫无基础,那就简单介绍一下吧,python的入门其实只需要掌握几个关键点就行,新手要先学会安装环境、了解数据结构、函数这些东西,再配合实操进行实践,基本就可以入门了。
提示!!文章内容较长,大约需要半个小时,可以先收藏再慢慢看,目录如下:
一、了解环境
二、了解数据结构
三、了解基本函数
四、了解Nuypm计算包
——————正文警告!!——————
一、环境Python的编写环境,用Anaconda足矣。Anaconda是专业的数据科学计算环境,已经集成绝大部分包和工具,不需要多余的安装和调试。
Python版本建议3.0以上,不要选择2.7的版本,否则你会被无尽的中文编码问题困扰。
Anaconda在官网下载,选择最新版本,约400MB。
完成安装后,Win版本会多出几个程序,Mac版本只有一个Navigator导航。数据分析最常用的程序叫Jupyter,以前被称为IPython Notebook,是一个交互式的笔记本,能快速创建程序,支持实时代码、可视化和Markdown语言。
点击Jupyter进入,它会自动创建一个本地环境localhost。
点击界面右上角的new,创建一个python文件。
开始你的Python
界面上部是工具栏,编辑撤回运行等,下面是快捷操作,大家以后会熟悉的。页面正中便是脚本执行的地方,我们输入自己第一行代码吧:
(我就不用hello world)灰色框是输入程序的地方,回车是换行,shift+回车执行灰色区域的代码,它的结果会直接在下面空白处出现。这就是Jupyter交互式的强大地方,将Python脚本分成片段式运行,尤其适合数据分析的摸索调整工作。
这里的print叫函数,和excel的函数同理,是程序执行的主体,负责将输入转化成输出(函数留在下一篇细讲)。这里将hello qinlu这段文字输出。新手可能会奇怪为什么要加引号,这种用引号括起来的文字在程序中叫字符串。
Python是一门计算机语言,它的逻辑和自然语言不一样,编程语言的目的是执行任务,所以它不能有歧义。为了规避各种歧义,人们创造了语法规则,只有正确的语法,才能被转换成CPU执行的机器码。
先了解Python语法中的数据类型。计算机最开始只被用于数值运算,后来被赋予了各种丰富的数据类型。
上面两个是小学生都会的四则运算,在计算机语言中可没有那么简单。它涉及了两个数值类型,整数int和浮点数float。整数和浮点数在计算机内部存储的方式是不同的,我们不用知道具体原理,明确一点,整数运算是永远精确的,浮点运算则可能有误差。
两种数据类型也可以互换,通过int函数和float函数。
有了数值,必然有文本,程序中叫字符串,用英文引号括起来表示。单引号和双引号没有区别,所以"qinlu"和'qinlu'是等价的,引号是边界,输出的时候不会包含它。当字符串内本身包含引号时,也不影响使用。
需要注意的是,不论单引号还是双引号,一旦混用很容易出现错误。因为程序并不知道它是字符串的边界还是符号。
解决方法有两种,一种是使用三引号,三引号代表整体引用,而且包含换行。第二种是引号前面加\,它是转义字符,表示这个引号就是单纯的字符。
三引号也可以用来注释,通常是大段的文字解释,如果一句话,我们更习惯用#,#后面的内容均不会作为程序执行。
时间是特殊的数值类型,它将结合datetime模块讲解。
还有两个常见的数据类型,布尔值和空值。布尔值是逻辑判断值,只有True和False。
布尔值在IF语句和数据清洗中经常使用,利用其过滤。布尔值能和布尔值运算,不过这里是and、not、or作为运算符,Ttue and True = True,False and True = False,False and False = False,not True = False,True or False = True等。
空值是一个特殊的值,表示为None,None不等于0,0具有数学意义而None没有,None更多表示该值缺失。
整数,浮点数,字符串,布尔值,空值就是Python常见的数据类型。Python3对中文的支持比较友好,所以大家可以用中文作为字符串试一下print。
数据类型构成了变量的基础,变量可以是任意的数据类型。想要用变量,必须先赋予变量一个值,这个过程叫赋值。
我首先给a赋予了一个整数值1,然后改变它为字符串abc,变量在Python中没有固定的数值类型,这是Python最大的优点,所以它在数据分析中很灵活。这也是它被称为动态语言的原因,相对应的叫静态语言。
Python是大小写敏感的语言,所以a和A是有区别的,这点请牢记。另外变量名尽可能使用英文,不要拼音,英文的可读性是优于拼音的。
变量有两种拼写风格,一种叫驼峰,一种叫下划线,以用户ID为例。驼峰命名法为userId,以一串英文词语user和id组成变量,第一个词语的首字母小写,第二个词语开始的首字母均大写。下划线命名法为user_id,全部小写,用_分割单词。
一个变量的值可以被赋予另外一个变量,如果b变量之前有另外一个值,那么会被1覆盖。呈从上而下的执行关系。
初看a = a + 1好像有逻辑问题,其实这涉及到了程序执行的先后顺序,程序是先计算a+1的值得到2,然后将其赋予(覆盖)了a。等号右边的计算先于左边,这是从右到左的逻辑关系。
有变量,自然有常量,常量是固定不变的量,可是在Python中没有真正意义的常量,一切皆可变,它更多是习惯上的叫法,即一旦赋值,就不再改变了。
Python的基础数学运算符号有+,-,*,/,//,%。前面四个就是加减乘除,其中除法的结果一定是浮点数。后面两个符号是除法的特殊形式,//代表除法中取整数,%代表除法中取余数。
到这里,新手部分已经讲解完成。再来讲讲数据结构。
二、数据结构Python一共有三大数据结构,它是Python进行数据分析的基础,分别是tuple元组,list数组以及dict字典。本文通过这三者的学习,打下数据分析的基础。
1、数组
数组是一个有序的集合,他用方括号表示。
num就是一个典型的数组。数组不限定其中的数据类型,可以是整数也可以是字符串,或者是混合型。
数组可以直接用特定的函数,函数名和Excel相近。
sum是求和,len则是统计数组中的元素个数。
上述列举的函数是数组内整体元素的应用,如果我只想针对单一的元素呢?比如查找,这里就要用到数组的特性,索引。索引和SQL中的索引差不多,都是用来指示数据所在位置的逻辑指针。数组的索引便是元素所在的序列位置。
注意,索引位置是从0开始算起,这是编程语言的默认特色了。num[0]指数组的第一个元素,num[1]指数组的第二个元素。
我们用len()计算出了数组元素个数是5,那么它最后一个元素的索引是4。若是数组内的元素特别多呢?此时查找数组最后一位的元素会有点麻烦。Python有一个简易的方法,可以用负数表示,意为从最后一个数字计算索引。
这里的num[4]等价于num[-1],num[-2]则指倒数第二个的元素。
再来一个新问题,如何一次性选择多个元素?例如筛选出数组前三个元素。在Python中,用:表示范围。
num[0:3]筛选了前三个元素,方括号左边是闭区间,右边是开区间,所以这里是num[0],num[1]和num[2],并不包含num[3]。这个方法叫做切片。
上述是索引的特殊用法,[0:]表示从第0个索引开始,直到最后一个元素。[:3]表示从第一个元素开始,直到第3个索引。
负数当然也有特殊用法。[-1:]表示从最后一个元素开始,因为它已经是最后一个元素了,所以只返回它本身。[:-1]表示从第一个元素开始到最后一个元素。num[-2:-1]和num[-3:-1]大同小异。
数组的增删查
我们已经了解数组的基本概念,不过仍旧停留在查找,它不涉及数据的变化。工作中,更多需要操纵数组,对数组的元素进行添加,删除,更改。
数组通过insert函数插入,函数的第一个参数表示插入的索引位置,第二个表示插入的值。
另外一种方式是append,直接在数组末尾添加上元素。它在之后讲到迭代和循环时应用较多。
如果要删除特定位置的元素,用pop函数。如果函数没有选择数值,默认删除最后一个元素,如果有,则删除数值对应索引的元素。
更改元素不需要用到函数,直接选取元素重新赋值即可。
到这里,数组增删改查已经讲完,但这只是一维数组,一维数组之上还有多维数组。如果现在有一份数据是关于学生信息,一共有三个学生,要求包含学生的姓名,年龄,和性别,应该怎么用数组表示呢?
有两种思路,一种是用三个一维数组分别表示学生的姓名,年龄和性别。
学生属性被拆分成多个数组,利用索引来表示其信息,这里的索引有些类似SQL的主键,通过索引查找到信息。但是这种方法并不直观,实际应用会比较麻烦,更好的方法是表示成多维数组。
所谓多维数组,是数组内再嵌套数组,图中表示的是一个宽度为3,高度为3的二维数组。此时student[0]返回的是数组而不是单一值。这种方法将学生信息合并在一起,比第一个案例更容易使用。
如果想选择第一个学生的性别,应该怎么办呢?很简单,后面再加一个索引即可。
现在尝试快速创建一个多维数组。
[0]*3将快速生成3个元素值为0的数组,这是一种快捷操作,而[row]*4则将其扩展成二维数据,因为是4,所以是3*4的结构。
这里有一个注意点,当我们想更改多维数组中的某一个元素而不是数组时,这种方式会错误。
按照正常的想法,martix[1][0]将会改变第二个数组中的第一个值为1,但是结果是所有数组的第一个值都变成1。这是因为在matrix = [row] * 4操作中,只是创建3个指向row的引用,可以简单理解成四个数组是一体的。一旦其中一个改变,所有的都会变。
比较稳妥的方式是直接定义多维数组,或者用循环间接定义。多维数组是一个挺重要的概念,它也能直接表示成矩阵,是后续很多算法和分析的基础(不过在pandas中,它是另外一种形式了)。
2、元组
tuple叫做元组,它和数组非常相似,不过用圆括号表示。但是它最大的特点是不能修改。
当我们想要修改时就会报错。
而选择和数组没有差异。
元组可以作为简化版的数组,因为它不可更改的特性,很多时候可以作为常量使用,防止被篡改。这样会更安全。
3、字典
字典dict全称dictionary,以键值对key-value的形式存储。所谓键值,就是将key作为索引存储。用大括号表示。
图中的'qinlu'是key,18是value值。key是唯一的,value可以对应各种数据类型。key-value的原理不妨想象成查找字典,拼音是key,对应的文字是value(当然字典的拼音不唯一)。
字典和数组的差异在于,因为字典以key的形式存储和查找,所以它的查询速度非常快,毕竟翻字典的时候你只要知道拼音就能快速定位了。对dict数据结构,10个key和10万个key在查找对应的value时速度没有太大差别。
这种查找方式的缺点是占用内存大。数组则相反,查找速度随着元素的增加逐渐下降,这个过程想象成程序在一页页的翻一本没有拼音的字典,直到找到内容。数组的优点是占用的内存空间小。
所以数组和字典的优缺点相反,dict是空间换时间,list是时间换空间,这是编程中一个比较重要的概念。实际中,数据分析师的工作不太涉及工程化,选用数组或者字典没有太严苛的限制。
细心的读者可能已经发现,字典定义时我的输入顺序是qinlu,lulu,qinqin,而打印出来是lulu,qinlu,qinqin,顺序变了。这是因为定义时key的顺序和放在内存的key顺序没有关系,key-value通过hash算法互相确定,甚至不同Python版本的哈希算法也不同。这一点应用中要避免出错。
既然字典通过key-value对匹配查找,那么它自然不能不用数组的数值索引,它只能通过key值。
如果key不存在,会报错。通过in方法,可以返回True或False,避免报错。
dict和list一样,直接通过赋值更改value
能不能更改key的名字?不能,key一旦确定,就无法再修改,好比字典定好后,你能修改字的拼音么?
dict中删除key和list一样,通过pop函数。增加key则是直接赋予一个新的键值对。
dict的keys和values两个函数直接输出所有的key值和value值。如果要转换成数组,则再外面嵌套一个list函数
items函数,将key-value对变成tuple形式,以数组的方式输出。
字典可以通过嵌套应用更复杂的数据格式,和NoSQL与JSON差不多。
基础的数据类型差不多了,更多函数应用大家可以网上自行查阅文档,这块掌握了,在数据清洗过程中将会非常高效,尤其是读取Excel数据时。当然不要求滚瓜烂熟,因为后面将学习更加强大的Numpy和Pandas。
三、基本函数1. 函数是什么
函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用(Calling)函数。
在 Python 中,函数可以通过关键字 def 来定义。这一关键字后跟一个函数的标识符名称,再跟一对圆括号,其中可以包括一些变量的名称,再以冒号结尾,结束这一行。随后而来的语句块是函数的一部分。
在定义函数时给定的名称称作“形参”(Parameters),在调用函数时你所提供给函数的值称作“实参”(Arguments)。
2. 调用函数
要调用一个函数,需要知道函数的名称和参数。函数的参数只是输入到函数之中,以便我们可以传递不同的值给它,并获得相应的结果。
Python 内置的常用函数包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数。用input()读取用户的输入:
因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python 提供了int()函数来完成这件事情:
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
如果函数调用出错,一定要学会看错误信息。
3.定义函数
在 Python 中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
在 Python 交互环境中定义函数时,注意 Python 会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下:
如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python 解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)。
定义一个什么事也不做的空函数,可以用pass语句:
pass语句什么都不做,实际上它可以用作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
pass还可以用在其他语句里,比如:
缺少了pass,代码运行就会有语法错误。
数据类型检查可以用内置函数isinstance()实现。
Python 的函数返回多值其实就是返回一个tuple;Python 函数返回的是单一值时,返回值仍然是一个tuple。但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。函数可以同时返回多个值,但其实就是一个tuple。
函数执行完毕也没有return语句时,自动return None。
4.函数的参数
Python 的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
4.1 位置参数:
power(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。
4.2 默认参数:
对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符=来为参数指定默认参数值。要注意到,默认参数值应该是常数。更确切地说,默认参数值应该是不可变的。
n = 2 是默认参数
定义默认参数要牢记一点:默认参数必须指向不变对象。且只有那些位于参数列表末尾的参数才能被赋予默认参数值,意即在函数的参数列表中拥有默认参数值的参数不能位于没有默认参数值的参数之前。
4.3 可变参数:
有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现。即传入的参数个数是可变的。
我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇集成一个称为param的元组(Tuple)。
类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有关键字参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。
4.4 关键字参数:
如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置来指定函数中的参数。
关键字参数允许你传入 0 个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
举个例子,扩展函数的功能。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
4.5 命名关键字参数:
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义函数并调用:
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python 解释器将无法识别位置参数和命名关键字参数,即缺少 *,city和job被视为位置参数。
4.6 参数组合:
在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这 5 种参数都可以组合使用。
但是参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。虽然可以组合多达 5 种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。
通过一个tuple和dict,你也可以调用函数:
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
5. 递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
通过下面的代码可以查看你的电脑最大算到多少:
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中。Python 标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题
四、了解Mumpy包Python数据分析绝对绕不过的四个包是numpy、scipy、pandas还有matplotlib。
numPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用numPy的数组作为构建基础。专门用来处理矩阵,它的运算效率比列表更高效。
1、NumPy 的 ndarray:多维数组对象
numpy的数据结构是n维的数组对象,叫做ndarray。可以用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
创建并操作多维数组:
"/>这里没写 np.float64 只写了 float,但是NumPy会将 Python 类型映射到等价的dtype上。
数组的dtype的另一个用法:
"/>u4(unit32):无符号的 32 位(4个字节)整型。
调用astype无论如何都会创建出一个新的数组(原始数据的一份拷贝)。
浮点数只能表示近似的分数值,在复杂计算中可能会积累一些浮点错误,因此比较操作只在一定小数位以内有效。
4、数组和标量之间的运算
数组:可对数据执行批量运算(不用编写循环即可)。这通常叫做矢量化(vectorization)。
大小相等的数组之间,它们之间任何的算术运算都会应用到元素级(每个元素都做这个运算了),数组与标量的算术运算也是。不同大小的数组之间的运算叫做广播(broadcasting)。5、索引和切片
数据不会被复制,任何修改都直接改了原数组。
如果仅是要一份副本,则用 .copy()。
对二维数组单个元素的索引:
这两种方式等价。
若arr2d[2],则输出的是一维数组[7,8,9]。
2*2*3的数组(2组2行3列):
6、布尔型索引
需要先引入:from numpy.random import randn
或将代码改成:data = np.random.randn(7, 4)
布尔型数组的长度必须跟被索引的轴长度一致。每个名字对应 data 数组一行。
对条件进行否定的两种方式:
组合应用多个布尔条件,可使用&、|等布尔算术运算符
通过布尔型索引选取数组中的数组,将总是创建数据的副本,即使返回一模一样的数组也是一样。
通过布尔型数组设置值:
通过一维布尔数组设置整行或列的值:
7、花式索引
指利用整数数组进行索引。
np.empty((8,4))
Return a new array of given shape and type, without initializing entries.
for i in range(8):
arr[i] = i
Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step
为了以特定顺序选取行的子集,只需传入一个用于指定顺序的整数列表或 ndarray,使用负数索引会从末尾开始选取行(最后一行是 -1)。
一次传入多个索引组,返回一个一维数组:
取整列的两种方法,相当于给列排了顺序:
花式索引跟切片不一样,总是将数据复制到新数组中。
数组转置和轴对换
转置返回的是源数据的视图,不进行任何复制操作。数组有 transpose 方法,还有一个 T 属性来完成转置:
8、高维数组
Transpose 要一个轴编号:
<img class="capture deal" src="//s3.pstatp.com/wenda/wenda_web/static/style/image/loading_a788ad0.gif" _src="data:image/svg+xml;utf8,<svg xmlns=" http:="" www.w3.org="" 2000="" svg'="" width="640" height="462">"/>arr是 2 组 2 行 4 列的数组,transpose的参数表示shape的形状,对于这个例子来说,即2[0]、2[1]、4[2],transpose(1,0,2)转置后变为2[1]、2[0]、4[2],看起来仍是 2 组 2 行 4 列的形状,但数组内的元素经过转换后索引已经改变,也要遵循(1,0,2)的顺序。如转置前的数组arr[0,1,0]索引值为 4,转置后的数组arr'[1,0,0],索引值才为 4。其它同理。
ndarray 的 swapaxes 方法接受一对轴编号且返回源数据的视图:
"/>np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对。
将条件逻辑表述为数组运算
np.wherea函数是三元表达式x if condition else y的矢量化版本。
np.where的第二个和第三个参数不必是数组,传递给where的数组大小可以不相等,甚至可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。
用where表述出更复杂的逻辑:(where的嵌套)
"/>10、排序
多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort:
顶级方法np.sort返回的数组已排序的副本,就地排序则会修改数组。
唯一化以及其他的集合逻辑
np.unique找出数组中的唯一值并返回已排序的结果
np.in1d用于测试一个数组的值在另一个数组的情况。
实际上却很厉害的软件?
经常搜集各种好用的软件的我,这个问题太有发言权了。
以下推荐的软件,都是既实用,又良心,纯净简洁,无捆绑劫持,无广告弹窗。
为了方便大家查看,附上目录:
1.PotPlayer 视频播放器
2.Everything 文件快速搜索
3.QQ输入法 没有弹窗的输入法
4.QQ影音 纯净的视频播放器
5.calibre 电子书管理阅读器
6.Snipaste 截图贴图神器
7.FScapture 长截图工具
8.Geek 卸载工具
9.微PE工具箱 装机维护工具
10.Quick Startup 软件自启动管理
11.CCleaner 垃圾清理工具
12.ScreenToGif 屏幕录制成GIF
1.PotPlayer 视频播放器
有口皆碑的本地视频播放器
体积小但功能丰富,占内存小,不会给你推送烦人的广告,界面简洁,启动极快,有强大的内置解码器
2.Everything 文件快速搜索
系统文件管理器自带的搜索功能实在是太慢了,找个文件要转半天。
Everything不一样,它的搜索速度可以说是实时的。当你忘记了某个文件放在哪里,你只要在软件中输入文件名称或是关键词,它就能在瞬间检索你的硬盘,帮你找到它。
3.QQ输入法 没有弹窗的输入法
对,QQ输入法,你没有看错。这可能是老马家最良心的软件之一了,别家输入法该有的功能它都有,关键是,它不会没事就给你弹窗。
4.QQ影音 纯净的视频播放器
提到了QQ输入法,就不得不提QQ影音了。
时隔两年,QQ影音悄然更新了4.0版本,界面更加清新,性能全面升级,支持了更多的视频格式。但整体依然还是那么的简洁、纯净,让人简直不敢相信这是腾讯的产品。
5.calibre 电子书管理阅读器
这是一款好用的电子书管理软件,用Kindle的朋友必备。可以方便地导入书籍,转换格式。calibre有一个内置的电子书阅读器,功能丰富,支持所有主流的电子书格式。
6.Snipaste 截图贴图神器
还在用QQ的Ctrl+Alt+A吗?看看这个截屏神器。
这是一款简单好用的截图软件,自动检测界面元素区域,像素级的鼠标移动控制、截图范围控制,截图质量高、画质清晰,也可以让你将截图贴在屏幕上。
除了截图之外,它还支持在截图中添加矩形、椭圆、线条、马赛克、铅笔等标注,有取色器功能。
7.FScapture 长截图工具
功能强大的抓屏工具,可以长截图,编辑图片,屏幕录像,将图像转换为 PDF 文件,屏幕取色,屏幕标尺等等。
更为惊人的是它只有2M。
8.Geek 卸载工具
还在用系统控制面板的程序和功能卸载软件吗?流氓软件卸载不掉?软件卸载总是有垃圾文件残留?
试试Geek吧,不仅能完美解决上述问题,而且软件仅5M,绿色纯净无广告。
9.微PE工具箱 装机维护工具
有时候系统故障需要重装系统,就要用到PE软件。
这是一款清新简洁的PE安装软件。一键安装,极速启动,而且纯净,没有捆绑。
10.Quick Startup 软件自启动管理
电脑里面各种杂七杂八的软件装多了,很多软件开机时就会偷偷自启动,拖累电脑开机速度,造成电脑开机时卡顿。怎么办呢?
Quick Startup这个软件不仅可以禁止软件开机自启动,还可以设置软件自启动的延迟时间,这样就可以错开软件自启动的高峰,电脑开机速度当然会大大提升。
11.CCleaner 垃圾清理工具
电脑用久了总是要清理各种垃圾文件。
清理垃圾,有CCleaner就够了。千万别跟我提什么管家、卫士这类流氓软件。CCleaner 功能强大,不仅可以深度清理注册表,临时文件、缓存,还能查找重复文件、系统还原、驱动器擦除。
12.ScreenToGif 屏幕录制成GIF
如果你需要录制屏幕GIF,那么这款软件我强烈推荐你使用。
它免费开源、功能强大、体积小巧(只有2M),是我用过里面最方便实用的。
软件的界面非常简洁,可以录制屏幕操作、调用摄像头录制、录制手写画板、还自带一个功能强大的GIF编辑器。
大家如果觉得有用的话,记得点个赞哦~
Windows下有什么软件能够极大地提高工作效率?
1.最快的文件夹切换软件,使用场景最多的效率软件:q-dir
2.足够美观的文件夹切换软件:clover3.批量办公文件管理:word批量管理大师4.批量修改文件名:total commander(包含文件管理)5.批量修改文件名:菲菲更名6.excel插件:方方格子7.办公软件标签化,实现快速切换:更多内容见下面的思维导图:
以上软件都是经过反复比较,精挑细选,不断更新。因为软件、网站层出不穷,永远只有更好没有最后。而真正有用的是高效解决实际问题,适合的就是最好的。
拉轰读书持续分享感动人心,博采众长的软件。
特别感谢提供信息和推荐的伙伴,是你们帮我找到好的软件分享,在此一并感谢。
提高效率其实可以很简单。iPhone6日版内置卡贴机?
有锁iPhone黑解和官解的区别详解:一、有锁是指苹果服务器通过IMEI对此机器进行运营商网络锁定。非此运营商的卡是会无服务的。 国行:国行也是有网络锁,不过现在所有国行机器不能上网络锁,所以国行也就成为了全网通。不过每个版本都有部分功能被阉割。国行最惨莫过于iPhone5s A1528和A1533。都是不能4G的。而A1530可以两网4G。从6开始就无限制了,那是因为FDD牌照发下来了。 美版:有锁价格相对于日版有锁贵500-600.因为美版解锁成本非常低。 日版:有锁价格是所有版本最低的。所以日版是目前最主流的版本,性价比较高。刚刚上市的6s,16G。入手价仅仅3800左右。今天讲的最多的其实就是关于日版。二、黑解,就是大多数通过售后暂时更改IMEI的激活策略,让你能够直接使用国内SIM卡通过服务器的认证,让你在一段时间内成为无锁机。 很多人在担心黑解后,会不会哪天突然睡觉起来,手机又是无服务或者不能上网。其实你明白原理就不用担心了。下面详细说明下。 IMEI,就像是你的名字——A,苹果服务器针对你的名字A确定你所拥有的权限。日版有锁,就是针对A锁定网络的。黑解就是蒙蔽苹果服务器,让他对A的权限改变,变成服务器认可的无锁机器。而这种改变很容易被苹果服务器查出来。所以就有一个词语 ,反锁 反锁就是苹果服务器重新对A判定有锁。这时是不会影响你手机的使用情况。除非你再次进入激活状态,连接苹果服务器。这时你就通不过认证了。所以黑解后,需要注意的就是【不要抹除,不要刷机】。三、官解,就是永久的无锁机,除了不保修,其他跟国行机无区别。 美版的T版,S版是运营商支持可以解锁,黑名单也能付费解开。所以真正意义的官解是美版。 日版的三大运营商iPhone6s开始也就是2015.5.30之后的用户在使用90天后可以申请官方解锁。 而iPhone6s之前的不能官解那么很多人都知道AU版商家会告诉你可以官解永久无锁,这是怎么回事呢。其实就是通过售后换机策略,让你的IMEI包装成一台售后换机新iPhone,所以一台官解机就会造就一台黑机。四、黑解注意事项: 1.黑解之前要注意,最好查询GXS激活策略,不要有flex,带了这个的,黑解不会成功。良心商家会退钱给你。不良心的会黑掉你的钱,告诉你因为自己手机原因。 2.黑解之后不要刷机,不要抹除,可以OTA升级(越狱机除外),最后不好越狱,插件白苹果等于黑解废了。 3.官解唯一的就是慢,解开后。随便折腾。跟无锁机无区别。所以日版AU+官解。是性价比最高无锁机。 4.有朋友说黑解之后关机换卡,会导致手机出现新激活状态,如果是已经被反锁的黑解手机,那么黑解就失效了,必须再次黑解。所以建议换卡采用不关机方式。不关机是可以随意换卡的。 5.内置卡贴机,请提前取出卡贴。五、FLEX不能黑解及更新激活策略说明: 很多朋友看不明白激活策略所以放上来,并说下FLEX不能黑解的问题,如何分辨。1.官解 日版au可以官解,官解后激活策略大多数是2305,据说所谓官解是售后换机手段,一台官解就会增加一台黑机。国外解锁基本都是au官解,暂时未找到黑解渠道。价格在99美元到150美元左右。2.日版有锁入手渠道: (1)直接海淘,在日亚,乐天下单通过TENSO或者JS转运到国内,日亚下单价格比国内淘宝便宜一点,加上转运费就相差不大了,这个渠道唯一的好处就是买到的手机比较放心,相比某宝的翻新,二手,换屏,暗病防不胜防。 注意两点 :日亚下单是需要VISA卡或者万事达信用卡,同时购机会有中古、白ロム、赤ロム意思是二手、正常合约、非正常合约(欠费类似) (2)某宝,对此渠道不做评价,国人都懂。入手也简单容易。 (3)信任的话还可以找我 哈哈哈哈哈哈以上。2017 2月 解锁新情况:(这个被我删了哈 因为现在又更新了)2017年11月解锁新情况:Docomo版IMEI查询地址:http://nw-restriction.nttdocomo.co.jp/result.php au版IMEI查询地址:https://au-cs0.kddi.com/FtHome softbank 版IMEI查询地址:https://ct11.my.softbank.jp/WBF/icv 横杠-表示不是他们公司的机,其余标志?△都是 就代表都可以解锁噢2019/06更新:①现在日版只有softbank 能解锁其他三大运营商全都不可以 不要加微信问了哈 ②美版解锁不接单~
自学JAVA难不难?
Java学习需要具备的条件
是否有兴趣学。如果对Java没有兴趣,建议还是不要自学了,不敢兴趣很容易就会放弃的,学到半路就不学了。如果有兴趣,那就太好了,学下去,你会发现自己受益良多!逻辑思维能力。逻辑思维能力决定了你能不能学好Java,不一定要求你的思维能力有多强,但是不要太差了,毕竟学这个还是需要有一点逻辑思维能力的,太差了可能都看不懂!坚定目标信心。学Java是为了什么?工资高?前景好?有兴趣,总之你要有个目标一直督促自己学下去,不然,你发现自己学不下去了,就真的很难再坚持!另外一定要梳理好有计划学习的知识点,可参考下放2019年最新Java学习路线图
这个学习线路图把每个知识点都涵盖进去了,可以查看大图!下面说分阶段的,配合视频学习!
第一阶段:
第二阶段
第三阶段:
第四阶段
第五阶段
在学习Java的时候也要给自己树立目标,是为了就业还是为了兴趣爱好,就业形势中可以看到互联网企业集中的北京、上海、深圳的Java工程师需求量最大。
资均在10K以上,可以说Java工作岗位多,并且工资高,总体来说,市场需求量比较大。