python具有_1.Python基础知识

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为空

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("\n\r\t ")

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中多参数的处理

276054792c5175827d56c3b5c6102755.png

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)

7fd2af762211e50051f5212faecfeb32.png

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的一个高级用法

bee76245f29ffafd2c72954a7e6ba311.png如果不加\1的话,  c也会被替换掉。

60. python  防止重复import的机制

每一次导入一个模块 ,其都会被加入到sys.modules字典里面,   下一次导入时候会检测这个包是否在sys.modules里面, 如果已经存在就不会导入, 如果不存在就导入

ff190908c8e28888d1d34731aa5b6461.png

61.824adab00e2b11c4e23877eb0767d058.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值