python总结
① python中类的理解与总结
9. 类
Python 的类机制通过最小的新语法和语义在语言中实现了类。它是 C++ 或者 Mola-3 语言中类机制的混合。就像模块一样,Python 的类并没有在用户和定义之间设立绝对的屏障,而是依赖于用户不去“强行闯入定义”的优雅。另一方面,类的大多数重要特性都被完整的保留下来:类继承机制允许多重继承,派生类可以覆盖(override)基类中的任何方法或类,可以使用相同的方法名称调用基类的方法。对象可以包含任意数量的私有数据。
用 C++ 术语来讲,所有的类成员(包括数据成员)都是公有( public )的(其它情况见下文 私有变量),所有的成员函数都是虚( virtual )的。用 Mola-3 的术语来讲,在成员方法中没有简便的方式引用对象的成员:方法函数在定义时需要以引用的对象做为第一个参数,调用时则会隐式引用对象。像在 Smalltalk 中一个,类也是对象。这就提供了导入和重命名语义。不像 C++ 和 Mola-3 中那样,大多数带有特殊语法的内置操作符(算法运算符、下标等)都可以针对类的需要重新定义。
在讨论类时,没有足够的得到共识的术语,我会偶尔从 Smalltalk 和 C++ 借用一些。我比较喜欢用 Mola-3 的用语,因为比起 C++,Python 的面向对象语法更像它,但是我想很少有读者听过这个。
② 太全了!Python3常用内置函数总结
数学相关
abs(a) : 求取绝对值。abs(-1)
max(list) : 求取list最大值。max([1,2,3])
min(list) : 求取list最小值。min([1,2,3])
sum(list) : 求取list元素的和。 sum([1,2,3]) >>> 6
sorted(list) : 排序,返回排序后的list。
len(list) : list长度,len([1,2,3])
divmod(a,b): 获取商和余数。 divmod(5,2) >>> (2,1)
pow(a,b) : 获取乘方数。pow(2,3) >>> 8
round(a,b) : 获取指定位数的小数。a代表浮点数,b代表要保留的位数。round(3.1415926,2) >>> 3.14
range(a[,b]) : 生成一个a到b的数组,左闭右开。range(1,10) >>> [1,2,3,4,5,6,7,8,9]
类型转换
int(str) : 转换为int型。int('1') >>> 1
float(int/str) : 将int型或字符型转换为浮点型。float('1') >>> 1.0
str(int) : 转换为字符型。str(1) >>> '1'
bool(int) : 转换为布尔类型。 str(0) >>> False str(None) >>> False
bytes(str,code) : 接收一个字符串,与所要编码的格式,返回一个字节流类型。bytes('abc', 'utf-8') >>> b'abc' bytes(u'爬虫', 'utf-8') >>> b'xe7x88xacxe8x99xab'
list(iterable) : 转换为list。 list((1,2,3)) >>> [1,2,3]
iter(iterable): 返回一个可迭代的对象。 iter([1,2,3]) >>> <list_iterator object at 0x0000000003813B00>
dict(iterable) : 转换为dict。 dict([('a', 1), ('b', 2), ('c', 3)]) >>> {'a':1, 'b':2, 'c':3}
enumerate(iterable) : 返回一个枚举对象。
tuple(iterable) : 转换为tuple。 tuple([1,2,3]) >>>(1,2,3)
set(iterable) : 转换为set。 set([1,4,2,4,3,5]) >>> {1,2,3,4,5} set({1:'a',2:'b',3:'c'}) >>> {1,2,3}
hex(int) : 转换为16进制。hex(1024) >>> '0x400'
oct(int) : 转换为8进制。 oct(1024) >>> '0o2000'
bin(int) : 转换为2进制。 bin(1024) >>> '0b10000000000'
chr(int) : 转换数字为相应ASCI码字符。 chr(65) >>> 'A'
ord(str) : 转换ASCI字符为相应的数字。 ord('A') >>> 65
相关操作
eval****() : 执行一个表达式,或字符串作为运算。 eval('1+1') >>> 2
exec() : 执行python语句。 exec('print("Python")') >>> Python
filter(func, iterable) : 通过判断函数fun,筛选符合条件的元素。 filter(lambda x: x>3, [1,2,3,4,5,6]) >>> <filter object at 0x0000000003813828>
map(func, *iterable) : 将func用于每个iterable对象。 map(lambda a,b: a+b, [1,2,3,4], [5,6,7]) >>> [6,8,10]
zip(*iterable) : 将iterable分组合并。返回一个zip对象。 list(zip([1,2,3],[4,5,6])) >>> [(1, 4), (2, 5), (3, 6)]
type():返回一个对象的类型。
id(): 返回一个对象的唯一标识值。
hash(object):返回一个对象的hash值,具有相同值的object具有相同的hash值。 hash('python') >>> 7070808359261009780
help():调用系统内置的帮助系统。
isinstance():判断一个对象是否为该类的一个实例。
issubclass():判断一个类是否为另一个类的子类。
globals() : 返回当前全局变量的字典。
next(iterator[, default]) : 接收一个迭代器,返回迭代器中的数值,如果设置了default,则当迭代器中的元素遍历后,输出default内容。
reversed(sequence) : 生成一个反转序列的迭代器。 reversed('abc') >>> ['c','b','a']
③ 关于python如何实现各进制转换的总结大全
ctf经常遇到进制转换的问题,就正好做一个进制转换总结,分享出来供大家参考学习,下面来一起看看详细的介绍:
字符串与十六进制转换
例如网络ctf 12月的第二场第一个misc
?
1
626536377D
比较简单的一种做法就是直接调用字符串的.decode('hex')解密即可, 但如果不用这个函数你会怎么解呢?
一种思路就是先2个分组,解出每组的ascii值,合并下字符串即可得到,具体代码如下
?
1234567
import res='626536377D's = re.findall(r'.{2}',s)s = map(lambda x:chr(int(x,16)),s)print ''.join(s)>>>flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
前面说了字符串的decode('hex')函数,另外还有两个转16进制的函数,这里都总结一下
内置函数hex()
只能转换10进制整数为十六进制,不能转字符串
binascii库的hexlify()和b2a_hex()
这两个函数的功能是将字符串转换成十六进制,对应的解密函数分别为 unhexlify()和a2b_hex()
进制互转
二进制,八进制,十六进制转10进制比较简单,直接调用
int函数
?
1
int(str,base) //返回十进制整数,但注意此时第一个参数为字符串
对应的解密函数分别是
?
12345
bin() //10进制转二进制 oct() //十进制转八进制 hex() //十进制转十六进制
但二进制直接转16进制就需要多走一步了,先用int转十进制,在用上面提到的hex()函数将十进制转换成十六进制,比较精简的写法是
?
1
map(lambda x:hex(int(x,2)),['0011']) //lambda表达式
或者是
?
1
[hex(int(x,2)) for x in ['0011']] //列表解析
对应的解密函数就是
?
1
map(lambda x:bin(int(x,16)),['ef'])
最后在附上自己用python写的一个进制转换小工具,主要功能是对一组二进制,或者ascii,或十六进制转换成字符串,想必ctf上也经常会遇到这类题型吧
?
041424344
# make by 江sir#coding:utf-8import reimport argparse def bintostr(text): text = text.replace(' ','') text = re.findall(r'.{8}',text) s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制 flag = ''.join(s) return flag def asciitostr(text): if ' ' in text: text = text.split(' ') elif ',' in text: text = text.split(',') s = map(lambda x:chr(int(x)),text) flag = ''.join(s) return flag def hextostr(text): text = re.findall(r'.{2}',text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ''.join(s) return flag if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-b") parser.add_argument("-a") parser.add_argument("-x") argv = parser.parse_args() #print argv if argv.b: res = bintostr(argv.b) elif argv.a: res = asciitostr(argv.a) elif argv.x: res = hextostr(argv.x) print res
用法:
十六进制转字符串:
626536377D
?
12
bintostr.py -x "626536377D"flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
二进制转字符串:
可以有空格,也可以无空格
00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100
?
12
bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"/.txt
ascii转字符串
可以是空格分隔,也可以是,分隔
s='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32'
?
12
bintostr.py -a "45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32"-.-. - ..-. .-.. ... -... ..--.- -... ... .-..
以上实例均来自某些ctf赛题
总结
④ python中方法对象的理解总结
9.3.4. 方法对象
通常,方法通过右绑定方式调用:
x.f()
在 MyClass 示例中,这会返回字符串 'hello world'。然而,也不是一定要直接调用方法。 x.f 是一个方法对象,它可以存储起来以后调用。例如:
xf = x.f
while True:
print(xf())
会不断的打印 hello world。
调用方法时发生了什么?你可能注意到调用 x.f() 时没有引用前面标出的变量,尽管在 f() 的函数定义中指明了一个参数。这个参数怎么了?事实上如果函数调用中缺少参数,Python 会抛出异常--甚至这个参数实际上没什么用……
实际上,你可能已经猜到了答案:方法的特别之处在于实例对象作为函数的第一个参数传给了函数。在我们的例子中,调用 x.f() 相当于 MyClass.f(x) 。通常,以 n 个参数的列表去调用一个方法就相当于将方法的对象插入到参数列表的最前面后,以这个列表去调用相应的函数。
如果你还是不理解方法的工作原理,了解一下它的实现也许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的函数对象类属性,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后函数对象调用这个新的参数列表。
⑤ 总结python 元组和列表的区别
列表
list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的。
元组
元祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号分隔的项目定义。元组通常用在使语句或用户定义的函数能够安全的采用一组值的时候,即被使用的元组的值不会改变。元组可以嵌套。
⑥ python实验总结
#!/usr/bin/env python # Filename: appui.py """ .. moleauthor:: .... .. test mole of Tkinter """ from Tkinter import * import tkMessageBox root = Tk() root.geometry('850x40+80+80') #设置窗体高宽与窗体相对屏幕左上角位置 class...
⑦ 如何学习Python的一些总结
C++、Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性平衡之间做得不错了,但是还是不够的,要不Boo语言之父就不用愤而着Boo了。Python首先是一种动态类型和强类型语言,动态类型意味着你不再需要为每一个变量的类型做无数次的声明,因为编译器会帮你做类型判断,它会跟根据变量的赋值来决定变量的类型。强类型则是意味着你不能将一个string当成一个int来用,除非你显式地转换它。
Python本身是结构紧凑的,因为space在C++、Java、C#是会被忽略的,而且还有"{}"去界定code block,那么如果你喜欢,你就可以将所有代码写在一行上,写得多么让人晕头转向都行。
中是不可能出现的,因为在
中只有一种分隔符,就是冒号":",同时通过缩进来区分code block,或许你一开始会对这样的方式有点不习惯,但是到了后来,你会发现这样的方式会让你获益非浅,因为你养成了一种很好的代码风格。
别以为Python是一种很学院派的语言,尽管很多人认为它十分适合作为学习编程的入门语言。事实上,
Python不仅很适合初学者学习编程,而且还是一种功能强大的语言,你可以用它来做其他语言能够做的任何事情。而Python本身也几乎无处不在,
Python编写的程序可以在各种主流的操作系统中运行,甚至于Palm。哦,差点忘了,Eric Raymond还告诉我们说黑客必须掌握四种语言,首推就是Python了。
,当然如果你一天都不可以离开.NET的话,就从IronPython开始学习Python吧。
与C++、Java乃至C#相比,用Python编写并执行这个经典程序是不是要快得多呢?呵呵~~~如果我现在就下定论说,
Python的生产效率很高的话,你已经会骂我骗人了。
好,稍安毋躁源码天空
,咱们再来点有实际意义的代码吧。不过在此之前,你得先去下载两个十分有名的类库:wxPython和Twisted。下载并安装完了吗?好,我们开始EnjoyPythonwith you in ten minutes之旅吧。
fromwxPython
.wximportwxPySimpleApp,wxFrameapp=wxPySimpleApp()frame=wxFrame(None,-1,"HelloWorld")
⑧ 如何学习Python总结之谈
零基础情况下,想学一门语言。其实python非常适合初学者入门。相比较其他不少主流编程语言,有更好的可读性,因此上手相对容易。那么如何快速掌握python?
设定目标:做 Python 开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通Python Web开发工程师需要掌握的技能包括至少一个Web框架,比如:Django、Flask、Tornado,做业务系统必须熟知一种数据库,还需要对Linux系统的基本操作和常用命令有所了解,因为以后你写到程序基本上都会运行在Linux平台上。
开发工具:工欲善其事必先利其器,Python IDE层出不穷,推荐Pycharm 和Sublime两个工具都是免费的,而且它们的学习成本非常低,网上找一篇教程看了基本就能上手,Vim、Emacs这样的远古神器还是放以后再去了解吧。
Python3:新手开始总纠结学 Python2 还是 Python3,这种纠结完全就是给自己徒增烦恼,因为它们是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在用Python2,但是Python3逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势。
学习框架:对于刚入门的人,最重要的是培养Ta的学习兴趣和信心。有的会担心自己的基础知识都那么薄弱,如何能学好框架呢?其实这个担心倒是不必,大多数大型的框架都把功能封装得很完整,定义了一套在自己的框架下做事的“规则”,学习框架更多的是学习这些“规则”,入门倒不需要很深的理论基础。
⑨ Python字典中几个常用函数总结
1、get() 返回指定键的值,如果值不在字典中返回default值。
语法:dict.get(key,default=None)
参数:
key 字典中要查找的键。
default 如果指定键的值不存在时,返回该默认值值。
例:
dict={'Name':'alex','Age':21}
print("Name is:%s"% dict.get('Name')+"\n"+ "Age is:%d"% dict.get('Age'))
显示结果为:
Name is:alex
Age is:21
2、update() 将一个字典中的值更新到另一个字典中。
语法:dict.update(dict2)
参数:
dict2 添加到指定字典dict里的字典。
例:
dict={'Name':'alex','Age':21}
dict2={'Sex':'female'}
dict.update(dict2)
print("Value is %s" % dict)
显示结果为:
Value is {'Name': 'alex', 'Age': 21, 'Sex': 'female'}