概述
1.查看某个变量或者对象占用空间的大小
import sys
v=1
print sys.getsizeof(v)
2.排序
ipinfo=sorted(ipinfo.iteritems(),key= lambda abs:abs[1],reverse=True)
sorted用于字典或者列表的排序。
key: 函数, 传入第一个元素, 返回比较的key。
cmp: 函数,传入两个参数, 如果第一个参数大于第二个参数, 返回一个正数, 如果第一个参数小于第二个参数,返回一个负数。 如果等于的话,返回O。 ,一般此函数不用自己制定,默认为None即可。
3.python2.6交互模式中退格键乱码问题:
在SSH连接CENTOS中 python2.6的交互模式中使用退格键乱码。 主要是因为所安装的Python缺少了readline模块所导致,具体的解决办法如下:
解决办法:
1.按退格键的时候按住crtl键。 (稍显不便)
2.先 yum install readline yum install readline-devel 然后
easy_install readline
4.Python多进程访问文件
python中文件操作往往会涉及到多个进程向同一个文件write的情况,这时要想保证同时只有一个进程写文件,可以采用如下方法:
使用fcntl.flock.
view plain
#coding:utf-8
"""
文件锁测试
"""
import fcntl
import time
fp = open('hello.txt','w')
fcntl.flock(fp, fcntl.LOCK_EX)
print '文件锁开始执行'
time.sleep(100)
fcntl.flock(fp, fcntl.LOCK_UN)
fp.close()
5.python for else:
如果for循环没有被break中断那么for执行完之后执行器对于的else语句
for i in "123":
print i
else:
print "for cycle have run without break"
6.python中的apply函数和*args **args的应用
def test(*args):
print args
test(1,2,3)
输出为(1,2,3)
def test(**args):
print args
test(a=1,b=2,c=3)
输出为{“a”:1,"b":2,"c":3}
对于test这种类型的函数可以通过如下的形式进行调用:
test(**{'a':1})
apply函数的应用。
apply(func,argstuple)
例如apply(test,(1,2,3)),参数必须为tuple,不能为列表或者是字典。
7.对于Python类的理解
class test:
def __init__(self):
pass
def use(self,a,b):
return test_1().add(a,b)
class test_1:
def add(self,a,b):
return a+b
类是对函数的封装,具有更高级的特性,类的方法,及方法内的操作在对象被建立的环境中执行。例如:
class test:
def __init__(self):
pass
def use(self,b):
return test_1().add(b)
class test_1:
def add(self,b):
return a+b
a=123
b=test()
b.use(123)
8.python 正则非贪婪模式
9.关于类的特殊代码
class test:
def __init__(self):
a[1]=2
print a[1]
a={}
b=test()
可以正常运行。!
10.关于类的方法~
class test:
def a():
print 007
b=test()
b.a()
同下:
b=test()
c=b.a
c()
11.在python的函数中一定要注意:
def test(a,b,c):
print a+b+c
test(a=1,b=2,3) 是错误的, 3不能出现在a=1,b=2的后面。
非关键字的必须要放在关键字的后面。!
12.对于函数内不能对全局变量是只读,之后在使用了global之后才是可写的理解。
在函数内想要通过=改变全局变量的值,必须要使用global进行修饰此变量。
如果在函数内通过函数或者方法修改全局变量的值,不必通过global进行修饰。直接进行即可
虽然在函数内对于形式参数是只读的,但是不代表在函数内不能改变形式参数的值。 在未用global修饰之前,不能使用=改变一个形式参数的值,但是可以通过此形参的方法修改形参的内容。
13.共享引用
a=[]
b=a
b.append(123)
print a
print b
结果均为[123]
14.使用列表的一个技巧
a=[4,5,6]
a.index(4) 返回其索引, 如果出现重复,则会返回第一个索引
15.python连接mysql时,如果已经设置mysql为autocommit了,如果是innodb的引擎在用Mysqldb连接的时候要这样:
conn=MySQLdb.connect()
cursor=conn.cursor()
cursor.execute()
conn.commit()
cursor.close()
conn.close()
最后已经要commit, 如果是用的myiaim引擎,则无需进行commit
15. python中一个常常遇见的一个问题
a=[]
def test(a):
b=a
b.append(123)
return b
b=test(a)
print a,b
结果是[123], 我们的本意是想b=[123],而不改变a的值。 但是事与愿违。想要避免这样,可以按照如下:
a=[]
def test(a):
import copy
b=copy.deepcopy(a)
b.append(123)
return b
b=test(a)
print a,b
这样就是我们想要的结果了,python中一切皆是引用。 b=a会直接让其共享引用, 对于不可变对象,共享引用一般不会带来什么麻烦问题。 但是对于可变对象,如果一个地方的对象被改变了,那么
对齐其他的引用他的变量来说说,会直接感受到的。
16。python 时间字符串转时间戳
如a="20150320"
import time
a=time.strptime(a,"%Y-%m-%d") #生成时间结构体
b=time.mktime(a) #根据时间结构体返回时间戳
时间戳转时间:
a=time.time()
b=time.localtime(a) #根据时间戳生成相应的时间结构体
c=time.strftime("%Y-%m-%d",b) #根据时间tuple生成对应的字符串
17.set的作用
a=[1,2,1]
b=set(a) #b为[1,2] set自动去重 ,还可用于字符串等其他类型、
18.sum可以对所有可以迭代的对象进行求和,但是可迭代对象必须为迭代值必须int
19. urllib 和pycurl常常用于post get提交数据。
如果提t交的是Json数据, 其常常会以post方式进行提交, 在用Pos方式提交json数据的时候,和平常的Post有所不同, 平常的Post一般是key-value型的, 这种post 是吧json数据当作key,value为空。
def post_json_by_urllib(url,jsondata):
request=urllib2.Request(url,jsondata)
request.add_header("Content-type","application/json")
request.get_method=lambda :"POST"
request=urllib2.urlopen(request)
return request.read()
#data=post_json_by_urllib("http://192.168.8.223:8080/solr/clientinfo/update",json.dumps({"add":{"doc":{"cid":9999996}}}))
data=post_json_by_urllib("http://192.168.2.254:8009/pointgold/url_test/",json.dumps({"add":{"doc":{"cid":99999995}}}))
print data
这就是一个例子,POST json数据的时候就相当于, 传递的Key为json数据, value为空
<QueryDict: {u'{"add": {"doc": {"cid": 99999995}}}': [u'']}>
20.python 操作hbase需要的模块:
thrift hbase .
使用例子:
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
from hbase.ttypes import *
transport = TSocket.TSocket('192.168.3.152',9090)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Hbase.Client(protocol)
transport.open()
21. python 中的字符串‘aaa’.rfind方法:
b='tttbc'.rfind('b') 意思是在tttbc字符串中寻找b第一次出现的地方,返回其索引!
22. urllib中有一个urllib.quote函数,其用于对url进行编码。
在url中对于中文=号等需要进行转义才成作为一个参数的value进行GET传输。
这个时候就可以公国quote进行编码。网上也有网页版的编码工具
a=urllib.quote('digger.gongchang.com/?cid=123&uid=456')
b="digger.gongchang.com/?next=%s"%a
这就是个很好的例子。
23. python try except else finanly 异常捕获。 不发生异常就执行else内的 finanly是无论异常是否发生都执行。
24. Pycharm快捷键:
TAB 缩进选中行。 shift+TAB 取消对选中行的缩进
Ctrl+ / 注释/取消注释选中行~
25. python mysql cursor对象在使用时:
cursor.execute("select * from teset where username = %s",param=("abc",))
第二个参数,param 如果是int会自动填充到sql, 如果是str也会自动填充到SQL,而且会自动添加引号。!
26. type 和isinstance的用法区别:
对于旧类 如class a():
pass
type(a()) 结果是instance 而不是我们想要的a, 对于新类 如a(object)形式的类, 可以用type进行判断。
isinstance 可以对新类和旧类同时进行判断, 而且能够支持对继承关系的识别。
27. 优先级顺序 not and or
28. python中str.strip方法的作用:
a="abc"
b=a.strip("ac")
print b
b结果为b。 strip方法的作用: 如果self的开头或者结尾元素在参数(通常为序列)内则删除之, 删除之后继续进行判断:、、、 直到结束。
a.strip() ==a.strip("nrt ")
lstrip :如果self的开头元素在参数(通常为序列)内则删除之,删除之后继续进行判断,直到结束。
rstrip: 同上,只不过是从结尾元素
29. os.path.join(*args) 用户把多个分离的路径组成一个路径。
os.path.join("a","b","c")
30. str.join join方法的作用, 把self放到 参数之间~~~
a="-"
b=a.join("abc")
print b
b为 “a-b-c”
31 。 sys.argv的使用
python test.py init
sys.argv 是一个列表。 sys.argv[0]是 test.py sys.argv[1]是init
31. python 元组不可变加深离家
a=(1,[])
a[1].append(2)
是可以正常执行的。执行之后
a=(1,[2])
32. python 中实现字典相加的简便方法:
a={"1":2,"3":1}
b={"1":3,"2":3}
c=dict(a,**b)
c的结果为{"1":3,"2":3,"3":1}
dict还可以用于生成字典:
a=dict([(1,2)])
a={1:2}
min_date=datetime.datetime.strptime(min_date,"%Y%m%d")
max_date=datetime.datetime.strptime(max_date,"%Y%m%d")
date_step=datetime.timedelta(days=1) #步进为1
33. python的map 和filter用法
map:
a=map(lambda i:i ,(1,2,3))
a=[1,2,3]
map总是返回一个列表。
filter:
a=filter(lambda i:i,[0,1,2,3])
a=[1,2,3]
fiter利用第一个函数对对二个可迭代对象进行筛选,返回筛选函数返回值为真的一个可迭代对象。
map中多参数的处理
34. python MySQLdb 中一个用法:
conn=connect(**)
cursor=conn.cursor()
cursor.execute("select * from test where name in %s"%(("小李","小王"),)) 这样执行肯定会出错。 正确的用法如下:
cursor.execute("select * from test where name in %s",(("小李","小王"),))
35. python 元类的理解:
1.类的理解:
def __init__(self,a):
self.a=a
def __del__(self):
print self.a
print "have del the object"
class test(object):
pass
test.__init__=__init__
test.__del__=__del__
a=test(123)
常用type 和isinstance用来判断一个对象是不是属于一个类。 type对于新式类 isinstance可用于新类和旧类
type是类的工厂! 可以用来产生类
下面是通过type创建类的一个例子:
def __init__(self,a):
self.a=a
def __del__(self):
print self.a
print "have del the object"
@classmethod
def test(cls):
print cls.version
testclass=type("testclass",(),{"test":test,"version":456,"__init__":__init__,"__del__":__del__})
testclass.test()
静态方法可以直接通过类 对象 调用。 类方法可以通过类 对象 调用。 对象方法可以通过对象调用!
元类就是创建类的一个东西, 可以称作为类的工厂, type就是一个内置的默认的一个元类! object.__class__正是type!!! 关于元类的一个例子:
def upper_attr(future_class_name, future_class_parents, future_class_attr):
print future_class_attr
# 选择所有不以'__'开头的属性
attrs = ((name, value) for name, value in future_class_attr.items() if not name.startswith('__'))
# 将它们转为大写形式
uppercase_attr = dict((name.upper(), value) for name, value in attrs)
print upper_attr
# 通过'type'来做类对象的创建
return type(future_class_name, future_class_parents, uppercase_attr)
__metaclass__ = upper_attr # 这会作用到这个模块中的所有类
class Foo(object):
# 我们也可以只在这里定义__metaclass__,这样就只会作用于这个类中
bar = 'bip'
__metaclass__ = upper_attr
print hasattr(Foo,"bar")
print type(Foo)
print Foo.__module__
在一个模块中定义一个元类之后, 如果是新式类, 显式对__metaclass__属性指定一下,对于旧类,则无需指定。 会自动生效。
36. python模块具有封装型
testfile.py
def test():
print a
a=123
test.py
from testfile import test
a=456
test() #运行结果还是123
testfile.py
def test():
print a
test.py
from testfile import test
a=123
test() #运行会报错!
37. python中单下划线和双下划线的使用
_a 不能通过 from testfile import *导入
__a 是类里的私有变量。
__a__是内置方法
38. 通过字符串创建变量。
globals["test"]=123 等价于 test=123
locals["test"]=345 等价于 test=345
39. 通过字符串导入一个模块
__import__("enapps.enrpc.deploy"%i,fromlist=["deploy"])
等效于 import enapps.enrpc.deploy as deploy40. 判断一个函数是否是函数:
可以通过 hasattr(a,"__call__")
41. datatime对象和时间戳之间的相互转换
time.mktime(_date.timetuple())
42. python 中的字典的键 一定要具有__hash__属性。
常用 数字 字符串 元组 作为其键(元组中要是含有字典也是不行的!), 具有__hash__属性的对象可以利用hash()函数操作这个对象,会得到一个int值。
43.python 对象中的一个陷阱。
44. python中nametuple的使用。
nametuple是collcetions模块中比较好用的一种数据类型
a=collections.namedtuple("a","name age")
b=a(name="zhou",age=23)
json.dumps(b) -----------------------'['zhou',23]'
namedtuple更像是一种用来建立可序列化类的一种工具。
45.dir 和vars
二者比较相似, dir()返回一个对象属性值的一个列表。 vars()返回一个对象属性的一个字典。
46. python 中对两个对象执行 == != >...操作符实际上是调用其相应的内建函数。
47. python 可以利用类属性 __slots__限制随意的添加实例属性。
48. python续行字符的使用, 但是如果对于字符串进行续行,可以按照如下的方式:
“123345"
"123"
49. python中分割字符串
"123".split("1",1) 从左边用1分割字符串,最多分割一次
“123".rsplit("1",1) 从右边用1分割字符串,最多分割一次。
50. __new__方法返回一个类的实例,__init__初始化一个类的实例。
class Test(object):
def __init__(self,a):
print 007
def __new__(cls):
#print args,kwargs
return object.__new__(cls)
Test(123)
这样是不行的, 当用这个类创建一个对象的时候 会首先电泳 __new__(123)结果new不能接受多余的参数。故报错。
__new__和 __init__不必具有相同的参数结构,但是在新建实例时,只有参数同时能够穿个两个函数才有可能成功。
__new__必须能够要返回一个对象的实例。 可以通过object.__new__()实现。 也可以通过父类的__new__实现。
如果其不返回一个对象的实例, __init__就不会执行。
class Test(object):
def __init__(self,a):
print 007
def __new__(cls,a):
#print args,kwargs
#return object.__new__(cls)
pass
print Test(123)
51.python中的切片
python支持索引切片。 步进切片。 多维切片。 省略切片。
a[1:10:1] start end setup
a[::-1] 快速逆序一个序列
52. python中有时候安装包的时候distribute报递归过身的错误。 pip --upgrade distribute即可
53.python中的and or妙用
and 返回最后一个真值, 第一个假值
or 返回第一个真值, 最后一个假值。
(bool and [a] or [b])[0] 可以实现 bool? a:b的三元操作符。
54. random模块和列表在一起的使用。
random.choice
random.sample(list,5) 从列表中随机取出5个元素
my_dict={i:i*iforiinxrange(100)}
my_set={i*15foriinxrange(100)}
55. sum(i for i in [1,2,3])可以正确执行, 其内部会生成一个生成器。
56.python中的位运算符:
优先级顺序: 从高到低
~
<<
>>
&
^
|
位运算原则:其总是先把位数对其,位数相同,然后进行位运算。 右移的时候左边补符号位。
57.json dumps中去空格处理:
json.dumps(siteConfig,separators=(",",":"))
59. python中 正则替换函数re.sub的一个高级用法
如果不加1的话, c也会被替换掉。
60. python 防止重复import的机制
每一次导入一个模块 ,其都会被加入到sys.modules字典里面, 下一次导入时候会检测这个包是否在sys.modules里面, 如果已经存在就不会导入, 如果不存在就导入
61.
转载于:https://www.cnblogs.com/wolover/p/5534859.html
最后
以上就是震动纸飞机为你收集整理的1.Python基础知识的全部内容,希望文章能够帮你解决1.Python基础知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复