语言本身简洁,优美,功能超级强大 跨平台 非常火爆的社区 很多有名的大公司在用
培训机构 + 自学
C,它是现代编程语言的祖师爷,所以非常古老了,在现代应用中使用不多。但由于C是祖师爷,所以绝大部分语言,写法都和C语言差不多。。。常常用作学习其他语言的基础。。而C语言也有其他语言不可替代的用途,现在最主要的应用就是单片机。。。单片机是啥?就是用C语言控制一些简单的电子元件。。。比如电视用的遥控器,其实就是一个单片机。
PHP是用来做网站的,其实从技术角度,属于第一代的后端技术(植入式脚本技术),现在最新的后端技术,已经发展到第三代了(MVC架构),因此从技术上讲,PHP早该过时了,但由于市场需求的存在,所以它依然是做网站后台的主流之一。。就类似于WindowsXP一样,技术上太淘汰了,但市场却依然是主流,普及度依然很高。缺点一大堆,但又个最主要的优势,就是简单。。。MVC虽好,但学习难度远比PHP要高的多。
C++是面向对象的C语言,由于偏底层,所以性能非常高,仅次于C语言,主要用在一个要求高性能的领域。。。这个不好说,因为实际需求上,用处挺杂的,而且也确实不太好学。。因为它把C语言面向过程的那套东西,和JAVA面向对象的那些东西,堆砌到了一起。。也就同时把两种完全不同的思想揉在了一起。。个人的理解是,它就像周星驰电影里的那个“要你命3000”,把苍蝇拍,杀虫剂,手枪,手榴弹,灭鼠灵,用一根麻绳串在一起。。。杀虫可以,灭鼠可以,杀人也可以,堪称无所不能。。。但用起来,真是麻烦死了。。所以对于很多人来说,认可它的地位,承认它的功能,但敬而远之。
JAVA是今天真正意义上的大道正宗,名门正派。。。。丐帮有降龙十八掌,华山派有独孤九剑。。但你却很难说出,少林派有什么武功特别强。。而它又是公认的名门正宗。。。这其实就已经说明问题了,JAVA没有什么特别强的方面,但每个方面都不弱。。整体平均值,便非常高。。JAVA还有一个比较突出的优势,就是它是安卓系统的官方开发语言。。既然说到了少林,就不得不提一下武当。。。那就是微软的官方语言C#。。。.C#和JAVA相比,其实80%都是一样的。。几乎等于学一门,会两门,C#比JAVA稍微简单一些,IDE也好一些,其实比JAVA更适合新手,但由于之前不能跨平台,所以流行度比JAVA低,但确是游戏开发行业的第一大语言。。JAVA与C#基本可以看成一门语言的两种方言。。英式英语和美式英语的差别一样。。说到底还是半斤八两。。。一个是传统应用和安卓系统的第一大语言,一个是WINDOWS系统和游戏开发的第一大语言。。而且学一门会两门,你还要求啥?
Python也是个很有历史的语言,诞生时间和JAVA,C#差不多,但今天却依然非常时髦。。因为它的语法,简洁,优雅,风骚到了极致。。像写信一样写代码。。而又无所不能,JAVA和C#能做到的,Python几乎一样都不少。。。简单易学,尤其受到初学者喜爱。。但Python更像一把双刃剑,优点特别突出,缺点也特别明显,就是特别慢。。。一般认为,Python比JAVA慢25倍到50倍。。还有一门语言叫Ruby,和Python相似,也是语法特别简洁。。但比Python更慢,用途也不如Python。。。基本可以看作华山,丐帮,在某些情况下,可以胜过少林武当。。但整体上比较,还是要差一截。。但即便如此,它的前景也是非常好的。。由于语法简单,更容易被机器解析,所以在人工智能领域非常有前途。比如那个下围棋的Alpha Go,以及中国的北斗卫星定位系统。。都有大量的Python代码在里面。
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!python是一门解释型语言
Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的种Python解释器:
CPython: 当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫 CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。
IPython: IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的
PyPy: PyPy是另一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。
位(bit),数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位,是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
1 B = 8b (8个bit/ 位) 一个字节(byte)等于8位(bit) 1 kB = 1024 B (kB - kilobajt) 1 MB = 1024 kB (MB - megabajt) 1 GB = 1024 MB (GB - gigabajt)
1 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
4 不要在一句import中多个库,比如import os, sys不推荐。 5 避免不必要的空格。
二进制转换成十进制:v = “0b1111011”
>>> int('0b1111011',2) 123十进制转换成二进制:v = 18
>>> bin(18) '0b10010'八进制转换成十进制:v = “011”
>>> int('011',8) 9十进制转换成八进制:v = 30
>>> oct(30) '0o36'十六进制转换成十进制:v = “0x12”
>>> int('0x12',16) 18十进制转换成十六进制:v = 87
>>> hex(87) '0x57'如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
def ip(value): res = value.split('.') s='' for i in res: i = (bin(int(i)).strip('0b')) if len(i) != 8: i = i.zfill(8) s+=i return int(s,2)python默认递归最大的层数是998 不过这个值是可以通过sys.setrecursionlimit(1000)来设置
v1 = 1or3
1v2 = 1and3
3v3 = 0and2and1
0v4 = 0and2or1
1v5 = 0and2or1or4
1v6 = 0orFlase and1
FalseASCII码使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。 在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文为 Basic Multilingual Plane,简写 BMP。它又简称为“零号平面”, plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。旧版的Unicode标准使用相近的标记方法,但却有些微的差异:在Unicode 3.0里使用“U-”然后紧接着八位数,而“U+”则必须随后紧接着四位数。
Unicode能够表示全世界所有的字节
GBK是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。 字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值 格式:
[on_true] if [expression] else [on_false] res = 值1 if 条件 else 值2https://blog.csdn.net/qq_37275405/article/details/80906906
int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数
long(长整数):无限大小的整数,这样写整数和一个大写或小写的L。
1.range和xrange都是在循环中使用,输出结果一样。
2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。
注意:Python 3.x已经去掉xrange,全部用range代替。
二者使用时相同,但返回类型不同,xreadlines返回的是一个生成器,readlines返回的是list
0 , [ ] , ” ” , ( ) , { }
字符串:
words = ‘today is a wonderfulday‘ print(words.strip(‘today‘))#如果strip方法指定一个值的话,那么会去掉这两个值 print(words.count(‘a‘))#统计字符串出现的次数 print(words.index(‘is‘))#找下标 print(words.index(‘z‘))#找下标如果元素不找不到的话,会报错 print(words.find(‘z‘))#找下标,如果元素找不到的话,返回-1列表:
sample_list = [‘a‘,1,(‘a‘,‘b‘)] #创建列表 sample_list = [‘a‘,‘b‘,0,1,3] # Python 列表操作 value_start = sample_list[0] #得到列表中的某一个值 end_value = sample_list[-1] #得到列表中的某一个值 del sample_list[0] #删除列表的第一个值 sample_list[0:0] = [‘sample value‘] #在列表中插入一个值元祖:
#元组也是一个list,他和list的区别是元组的元素无法修改 tuple1 = (2,3,4,5,6,4,7) print(type(tuple1)) print(tuple1[:7]) print(tuple1[:5:-1])字典:
dict = {‘ob1‘:‘computer‘, ‘ob2‘:‘mouse‘, ‘ob3‘:‘printer‘} #每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。键是唯一的,字典只认最后一个赋的键值。 D.get(key, 0) #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常 D.has_key(key) #有该键返回TRUE,否则FALSE D.keys() #返回字典键的列表 D.values() D.items()lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。
lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:
# 需求:将列表中的元素按照绝对值大小进行升序排列 list1 = [3,5,-4,-1,0,-2,-6] print(sorted(list1, key=lambda x: abs(x))) #[0, -1, -2, 3, -4, 5, -6]==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。所以对于只有一层的数据集合来说深浅拷贝的意义是一样的,比如字符串,数字,还有仅仅一层的字典、列表、元祖等.
应用场景:比如在CMDB系统中,我们定义了一个报警模版call给所有的服务器使用,此时有一批特殊应用的服务器需要不通的报警参数,我们既不想单独新建模版来一个一个添加报警参数,又不想修改默认模版而影响其他机器的报警阈值。此时我们就需要用深拷贝来完成。
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。没有变量引用及回收。
可变:列表、字典
对于可变类型,无论创建多少个可变类型,只要值相同,都不指向同个内存地址(除非进行复制操作,那么他们将会指向同一个地址)。
不可变:数字、字符串、元祖
对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
结果为:
<<<{'k1': [666], 'k2': [666]}结果为:
[6, 6, 6, 6]https://mp.csdn.net/postedit/80946751
map() 会根据提供的函数对指定序列做映射。 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
In [11]: for i in map(lambda x:x*x,[1,2,3,4]): ...: print(i) ...: 1 4 9 16filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
In [12]: def is_odd(n): ...: return n % 2 == 1 In [15]: for i in filter(is_odd,[1,2,3]): ...: print(i) ...: 1 3reduce() 函数会对参数序列中元素进行累积。 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数
In [19]: from functools import reduce In [20]: def add(x,y): ...: return x+y ...: reduce(add,range(1,101)) ...: Out[20]: 5050在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。 如果你正在使用Windows,确保安装时勾选了pip和Add python.exe to Path。 在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。 现在,让我们来安装一个第三方库——bs4 pip install bs4 用过的第三方模块 bs4/pymysql/redis/lxml/tkinter/urllib/requests等
Django Flask Scrapy Tkinter Pygame numpy pillow-python pymysql pip
match只找字符串的开始位置,而search是全盘查找
1、贪婪匹配 总是尝试匹配尽可能多的字符 2、非贪婪匹配 是尝试匹配尽可能少的字符
详情请看https://blog.csdn.net/qq_37275405/article/details/80945446
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。
a = [1,2,3] 和 b = [(1),(2),(3) ] 都是列表 b = [(1,),(2,),(3,) ] 是列表里面套元组
可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息; print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;
第一种:
In [88]: "hello %s"%('word') Out[88]: 'hello word'第二种:
In [89]: 'hellow {}'.format('word') Out[89]: 'hellow word'https://blog.csdn.net/qq_37275405/article/details/80945446
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
def outer(a): b = 10 def inner(): print(a+b) return innersys模块主要是用于提供对python解释器相关的操作 OS模块是Python标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问
random模块 如:random.random()
os.remove(path)
面向对象就是将一些零散的具有相同功能的属性方法通过类封装起来,实现模块化 https://blog.csdn.net/qq_37275405/article/details/80979592
pass
functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。
__init__初始化魔术对象,当一个对象被实例化是自动触发 __new__ 当一个对象被实例化前自动触发,通过传递参数判断对象是否被创建或其他 __del__当一个对象没有任何引用是被触发,回收内存 __call__将对象当作函数调用时触发
函数: 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用。 方法: 方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法。
实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)。
三种方法从不同层次上来对方法进行了描述:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数。
魔术方法 用于在某一时刻调用时
本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动! 具体请参考:https://www.cnblogs.com/yooma/p/8004788.html
元类就是创建类这种对象的东西
装饰器是一个工厂函数,接受一个函数作为参数,然后返回一个新函数,其闭包中包含被装饰的函数。有了装饰器,可以提取大量函数中与本身功能无关的类似代码 ( 这块在Flask中用于定义路由的@app.route,就是一个很好的例子),达到代码重用的目的。可应用于插入日志、性能测试、事务处理等方面。
def deco(func): def warpper(*args, **kwargs): print(‘start‘) func(*args, **kwargs) print(‘end‘) return warpper @deco def myfunc(parameter): print("run with %s" % parameter) myfunc("something")通过raise 异常对象主动抛出异常
Method Realtion Order 用来制作一个继承关系的列表 MRO列表的制作原则: 1.子类永远在父类的前面 2.如果继承了多个父类,那么按照()中的顺序在列表中摆放 3.如果多个类同时继承了一个父类,孙子类中只会选取第一个父类中的父类的该方法
检测一个数据是否由指定的类型创建
给定一个由编码器组成的数组,返回两个数字的索引,使它们加起来成为一个特定的目标。你可以假设每一个输入都会 只有一个解决方案,您可能不会使用相同的元素两次。 例子: 给定nums =[2,7,11,15],目标= 9, 因为nums[0] + nums[1] = 2+ 7= 9, 返回[0,1]
In [102]: def nums(lists,n):^M ...: if isinstance(lists,list):^M ...: for i in range(len(lists)):^M ...: for v in lists:^M ...: if lists[i]+v == n:^M ...: print(i,lists.index(v))^M ...: break ...: nums([1,2,3,4,5],9) ...: 3 4 4 3可以处理数组、对象 定制datetime类型
In [107]: import json In [108]: class ComplexEncoder(json.JSONEncoder): ...: def default(self, obj): ...: if isinstance(obj, datetime): ...: return obj.strftime('%Y-%m-%d %H:%M:%S') ...: elif isinstance(obj, date): ...: return obj.strftime('%Y-%m-%d') ...: else: ...: return json.JSONEncoder.default(self, obj) ...: In [109]: json.dumps({'now':datetime.now()},cls=ComplexEncoder) Out[109]: '{"now": "2018-07-10 18:12:31"}'json.dumps(jsonData,ensure_ascii=False);
在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助
python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
with语句的作用是通过某种方式简化异常处理 自动管理文件关闭
yield 的作用就是把一个函数变成一个生成器, 带有yield的函数不再是一个普通的函数。python解释器会将其视为一个generator