Python 零碎知识点

1. getopt

  • python中用于解析命令行参数的函数。
    通过import getopt导入
    调用:options,args=getopt.getopt(argv, shortopts, longopts = [])
    返回:options,args
  • 一般argv是命令行传入的参数。通过sys.argv获得(记得import sys)。一般写的是sys.argv[1:] (因为0是py文件,不用解析)
  •  shortopts:简写参数列表(也称短格式),为一个字母。其中后面不带冒号的是没有参数的选项,带冒号是有参数的。
     longopts:长参数列表,为一个单词。后面有等号的需要参数,没有的不需要。
  • opts:分析出的(option, value)列表对。格式:[(option1,value1),(option2,value2)…] 。
    args:不属于格式信息的剩余命令行参数列表。
import getopt
import sys

opts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
print(opts)
for opt_name,opt_value in opts:
    if opt_name in ('-h','--help'):
        print("[*] Help info")
        sys.exit()
    if opt_name in ('-v','--version'):
        print("[*] Version is 0.01 ")
        sys.exit()
    if opt_name in ('-f','--filename'):
        fileName = opt_value
        print("[*] Filename is ",fileName)
        # do something
        sys.exit()

 

2. 深浅拷贝

  • =浅拷贝:值相等,地址相等。
  • deepcopy深拷贝:值相等,地址不相等。原有被复制对象 和 已经复制出来的新对象 两者改变不互相影响。 (要 import copy)

3. format

  • format类似于C中的%,但比C更为强大,用的是{}和:。
  • 基本使用:
"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
#'hello world'
 
"{0} {1}".format("hello", "world")  # 设置指定位置
#'hello world'
 
"{1} {0} {1}".format("hello", "world")  # 设置指定位置
#'world hello world'

 

  • 其他用法:
    "网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com")
    
    
    #通过字典的key来填充
    names={'name':'Kevin','name2':'Tom'}
    print 'hello {names[name]}  i am {names[name2]}'.format(names=names)  

     

  • 格式转换:b、d、o、x分别是二进制、十进制、八进制、十六进制。
    数字格式输出描述
    3.1415926{:.2f}3.14保留小数点后两位
    3.1415926{:+.2f}3.14带符号保留小数点后两位
    -1{:+.2f}-1带符号保留小数点后两位
    2.71828{:.0f}3不带小数
    1000000{:,}1,000,000以逗号分隔的数字格式
    0.25{:.2%}25.00%百分比格式
    1000000000{:.2e}1.00E+09指数记法
    25{0:b}11001转换成二进制
    25{0:d}25转换成十进制
    25{0:o}31转换成八进制
    25{0:x}19转换成十六进制
  • 对齐填充
数字格式输出描述
5{:0>2}05数字补零 (填充左边, 宽度为2)
5{:x<4}5xxx数字补x (填充右边, 宽度为4)
10{:x^4}x10x数字补x (填充右边, 宽度为4)
13{:10}        13右对齐 (默认, 宽度为10)
13{:<10}13左对齐 (宽度为10)
13{:^10}    13中间对齐 (宽度为10)

 

4. update

  • Python 的字典通过 update() 函数把字典dict2的键/值对更新到dict里:即字典中没有该键,会插入一个新的;如果有的话就会更新现有的。

5. strptime和strftime

  • strftime可以用来获取当前时间,将时间格式化为字符串等等。需要注意的是获得的时间是服务器时间,要注意时区问题。
#我们可以使用strftime()函数将时间格式化为我们想要的格式
import time
t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
t = time.mktime(t)
print (time.strftime("%b %d %Y %H:%M:%S", time.gmtime(t)))
  • Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。 
  • python中时间日期格式化符号:
    %y 两位数的年份表示(00-99)
    %Y 四位数的年份表示(000-9999)
    %m 月份(01-12)
    %d 月内中的一天(0-31)
    %H 24小时制小时数(0-23)
    %I 12小时制小时数(01-12)
    %M 分钟数(00=59)
    %S 秒(00-59)
    %a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的月份名称
    %B 本地完整的月份名称
    %c 本地相应的日期表示和时间表示
    %j 年内的一天(001-366)
    %p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身
import time
struct_time = time.strptime("30 Nov 00", "%d %b %y")
print "returned tuple: %s " % struct_time
  • 字符串转datetime
    dt = datetime.datetime.strptime('2017-04-19 00:42:44','%Y-%m-%d %H:%M:%S')
  • datetime转字符串
    str = dt.strftime("%Y-%m-%d-%H")

 

6. urllib下的request使用

  • urllib.request库是 Python3 自带的用于网页抓取的模块(不需要下载,导入即可使用),简单例子:
# 向指定的url发送请求,并返回服务器响应的类文件对象

response = urllib.request.urlopen("http://admin.bxcker.com")

# 服务器返回的类文件对象支持Python文件对象的操作方法,如read()方法读取文件全部内容,返回字符串

html = response.read()

 

7. datetime和time

  • 在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。
  • datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体如下:
    timedelta     # 主要用于计算时间跨度
    tzinfo        # 时区相关
    time          # 只关注时间
    date          # 只关注日期
    datetime      # 同时有时间和日期
  • datetime的比较:可以直接加减
    diff = dt2 - dt1
    print(diff.days)
    print(diff.seconds)
    print(diff.days*86400+diff.seconds) #真正相差秒数

     

8. 字符串和值之间转换

  • eval:该函数用来执行一个字符串表达式,并返回表达式的值。
  • 字符串→数值 另外两种方式:
    ①import string:(只适用于python2,不适用于python3)
    tt='555'
    ts=string.atoi(tt)
    ②int转换:
    int(tt)
  • 数值→字符串:
    tt=322
    tem='%d' %tt

 

9. Queue

  • Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。
  • 模块中常见方法:
    Queue.qsize() 返回队列的大小
    Queue.empty() 如果队列为空,返回True,反之False
    Queue.full() 如果队列满了,返回True,反之False
    Queue.full 与 maxsize 大小对应
    Queue.get([block[, timeout]])获取队列,timeout等待时间
    Queue.get_nowait() 相当Queue.get(False)
    Queue.put(item) 写入队列,timeout等待时间
    Queue.put_nowait(item) 相当Queue.put(item, False)
    Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
    Queue.join() 实际上意味着等到队列为空,再执行别的操作

10. threading.Thread

  • 例子:
import threading
import time
 
exitFlag = 0
 
class myThread (threading.Thread):   #继承父类threading.Thread
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):                   #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 
        print "Starting " + self.name
        print_time(self.name, self.counter, 5)
        print "Exiting " + self.name
 
def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            (threading.Thread).exit()
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1
 
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
 
# 开启线程
thread1.start()
thread2.start()
 
print "Exiting Main Thread"

 

11. tty

参考:http://www.blog.chinaunix.net/uid-29614976-id-5750663.html

 

12.  isinstance

  • 类似于Java中的instanceof运算符,但这个在python中是个函数。python中类似功能的函数还有type,但type不考虑继承关系,isinstance会考虑继承。
  • isinstance(object, classinfo)
    object -- 实例对象。
    classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
  • 基本类型中classinfo有:int,float,bool,complex,str(字符串),list,dict(字典),set,tuple(元组)

 

13. decode 和 encode

  • python中,我们使用decode()和encode()来进行解码和编码
  • 在python中,使用unicode类型作为编码的基础类型。即
         decode              encode
    str ---------> unicode --------->str

 

14. 语法上多行定义一个字符串

  • 代码:
import os
#①用三引号
tt='''this 
is 
a 
test.'''
print("1:",tt)
#②用反斜杆
tt="this \
is \
another \
test."
print("2:",tt)
#③用小括号
tt=('this '
'is '
'last '
'test.')
print("3:",tt)

os.system("pause")

 

  • 输出为:
1: this 
is 
a 
test.
2: this is another test.
3: this is last test.

 

15. unittest的main函数

  • unittest.main()会自动组织文件里的测试用例,也可以传入相关参数:
arg = sys.argv
    arg.append('-v')
    unittest.main(exit=False,argv=arg)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值