随手笔记(二) ps: ubuntu python相关

1、hasattr()getattr()setattr()函数使用详解?

hasattr(object,name)函数:判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False。注意:name要使用引号括起来。

classfunction_demo(object):
    name='demo'
    def run(self):
        return"hellofunction"
functiondemo=function_demo()
res=hasattr(functiondemo,'name')#判断对象是否有name属性,True
res=hasattr(functiondemo,"run")#判断对象是否有run方法,True
res=hasattr(functiondemo,"age")#判断对象是否有age属性,Falsw9.print(res)

getattr(object,name[,default])函数:

获取对象object的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面添加括号()。

1.functiondemo=function_demo()
2.getattr(functiondemo,'name')#获取name属性,存在就打印出来---demo
3.getattr(functiondemo,"run")#获取run方法,存在打印出方法的内存地址---<boundmethodfunction_demo.runof<__main__.function_demoobjectat0x10244f320>>
4.getattr(functiondemo,"age")#获取不存在的属性,报错如下:
5.Traceback(mostrecentcalllast):
6.File"/Users/liuhuiling/Desktop/MT_code/OpAPIDemo/conf/OPCommUtil.py",line39,in<module>
7.res=getattr(functiondemo,"age")
8.AttributeError:'function_demo'objecthasnoattribute'age'
9.getattr(functiondemo,"age",18)#获取不存在的属性,返回一个默认值

setattr(object,name,values)函数:

给对象的属性赋值,若属性不存在,先创建再赋值

1.classfunction_demo(object):
2.    name='demo'
3.    def run(self):
4.        return"hellofunction"
5.functiondemo=function_demo()
6.res=hasattr(functiondemo,'age')#判断age属性是否存在,False
7.print(res)
8.setattr(functiondemo,'age',18)#对age属性进行赋值,无返回值9.res1=hasattr(functiondemo,'age')#再次判断属性是否存在,True

综合使用:

1.classfunction_demo(object):
2.    name='demo'
3.    def run(self):
4.        return"hellofunction"
5.functiondemo=function_demo()
6.res=hasattr(functiondemo,'addr')#先判断是否存在ifres:
7.addr=getattr(functiondemo,'addr')
8.print(addr)else:
9.addr=getattr(functiondemo,'addr',setattr(functiondemo,'addr','北京首都'))
10.#addr=getattr(functiondemo,'addr','美国纽约')
11.print(addr)

2、lambda函数的使用

lambda函数是匿名函数;使用lambda函数能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤;

m = lambda i:[x*i for x in range(5)]
print(m(2))

[0, 2, 4, 6, 8]

以下结果是什么?

def multipliers():
    return[lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])

上面代码输出的结果是[6,6,6,6](不是我们想的[0,2,4,6])。

你如何修改上面的multipliers的定义产生想要的结果?

上述问题产生的原因是Python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。因此,当任何由multipliers()返回的函数被调用时,i的值将在附近的范围进行查找。那时,不管返回的函数是否被调用,for循环已经完成,i被赋予了最终的值3。

下面是解决这一问题的一些方法。一种解决方法就是用Python生成器。

def multipliers():
    for i in range(4):
        yield lambda x:i*x
print([m(2) for m in multipliers()])

另外一个解决方案就是创造个闭包,利用默认函数立即绑定

def multipliers():
    return [lambda x,i=i:i*x for i in range(4)]
print([m(2) for m in multipliers()])

3、单例

class A(object):
    __instance = None
    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

单例模式的应用场景:

(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。

(2)控制资源的情况下,方便资源之间的互相通信。如线程池等。1.网站的计数器2.应用配置3.多线程池4.数据库配置,数据库连接池5.应用程序的日志应用...

4、装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景。比如:插入日志、性能测试、事务处理、缓存、权限的校验等场景有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用。

import time

def timeit(func):
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print('used:%s'%(end-start))
    return wrapper

@timeit
def foo():
    a=0
    for i in range(20000000):
        a+=i
    print(a)
    return a

foo()

5、python numpy 中ndarry转成string后怎么转回来

>>> import numpy as np
>>> a = np.arange(12).reshape(3, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> s = a.tostring()
>>> aa = np.fromstring(a)
>>> aa
array([  0.00000000e+000,   4.94065646e-324,   9.88131292e-324,
         1.48219694e-323,   1.97626258e-323,   2.47032823e-323,
         2.96439388e-323,   3.45845952e-323,   3.95252517e-323,
         4.44659081e-323,   4.94065646e-323,   5.43472210e-323])
>>> aa = np.fromstring(a, dtype=int)
>>> aa
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> aa = np.fromstring(a, dtype=int).reshape(3, 4) #dtype:uint8,reshape:(480, 640, 3)
>>> aa
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

6、python字符串自动填充

zfill()则用于向数值的字符串表达式左侧填充0, 该函数可以正确理解正负号:
>>> '12'.zfill(5)
'00012’
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'
=====================================
在Python中打印字符串时可以调用ljust(左对齐),rjust(右对齐),center(中间对齐)来输出整齐美观的字符串
python实现指定字符串补全空格的方法:
如果希望字符串的长度固定,给定的字符串又不够长度,我们可以通过rjust,ljust和center三个方法来给字符串补全空格
rjust,向右对其,在左边补空格
s = "123".rjust(5) assert s == " 123"

ljust,向左对其,在右边补空格
s = "123".ljust(5) assert s == "123 "

center,让字符串居中,在左右补空格
s = "123".center(5) assert s == " 123 "

7、python输出指定格式的日期

一、参考解法:

1

2

3

4

5

6

7

8

9

import time

print('当前时间戳:',time.time())

    #当前时间戳: 1529908783.3990765

print('获取当前本地时间:',time.localtime())

    #获取当前本地时间: time.struct_time(tm_year=2018, tm_mon=6, tm_mday=25, tm_hour=14, tm_min=39, tm_sec=43, tm_wday=0, tm_yday=176, tm_isdst=0)

print('格式化可读时间模式:',time.asctime())

    #格式化可读时间模式: Mon Jun 25 14:39:43 2018

print('格式化日期:',time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))

    #格式化日期: 2018-06-25 14:39:43

一、参考解法:

1

2

3

4

5

6

7

import datetime

print('当前年月日:',datetime.date.today())

    #当前年月日: 2018-06-25

print('格式化日期:',datetime.date.today().strftime('%d/%m/%Y'))

    #格式化日期: 25/06/2018

print(datetime.date(1941,1,5))

    #1941-01-05

把字符串格式的日期转成datetime, datetime.datetime.strptime("2014/11/13 22:00:00",'%Y/%m/%d %H:%M:%S')

8、ubuntu屏幕截图

Alt+Pr Scrn

9、python里输入sql语句操作mysql

import pymysql

db = pymysql.connect(host='localhost', user='root', passwd='root', db="db", charset="utf8")
cur = db.cursor()
cur.execute("SELECT * FROM t_user_info limit 10 ")
print(cur.fetchall())

10、mysql sql语句

https://www.cnblogs.com/bchjazh/p/5997728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blog_1103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值