Python学习笔记

一、基础语法和函数相关

1.1 len()函数

返回对象(字符、列表、元祖等)的长度或项目个数。

>>>str = "runoob"
>>> len(str)             # 字符串长度
6
>>> l = [1,2,3,4,5]
>>> len(l)               # 列表元素个数
5

1.2 chr()函数

用于将一个范围在range(256)内的整数(也即是 0~255)转换成对应的ASCII码字符。

>>> print chr(0x30)    # 十六进制
0
>>> print chr(1)    # 十进制数,ASCII码1表示start of heading,什么也不输出

>>> chr(1)
'\x01'

与此相对应的有一个函数 ord(),则是返回单个ASCII字符对应的ASCII值或Unicode值。

>>> ord('d')
100
>>> ord('A')
65

1.3 xrange() 函数

xrange()函数用法与range()完全相同,所不同的是 xrange() 生成的不是一个数组,而是一个生成器。使用方法如下:

1 xrange(stop)
2 xrange(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认为0。如xrange(5)等价于xrange(0, 5)
  • stop: 计数到 stop 结束,但不包括 stop。如xrange(0, 5)[0, 1, 2, 3, 4]没有5。
  • step: 步长,默认为1。如xrange(0, 5)等价于xrange(0, 5, 1)

range() 方法返回的是一个list对象,它需要开辟专门的空间保存序列中所有的元素。
xrange() 方法返回的是xrange对象,它是一个序列对象,但并不保存序列中的元素。

根据python官方文档的定义,一个序列对象不必要保存所有的元素。
如果只对序列进行读操作,xrange()方法效率较高;但如果要改变序列的元素,或者需要对序列增删元素,那么只能通过range()方法生成一个list对象。

1.4 with关键字

如果你有两个想做的操作,你想要这两个操作成对执行,中间插入一段其他的代码,那么使用 with 就是一种很方便的方法。
最经典的例子就是打开一个文件,对文件进行操作然后关闭文件。

1 with open('output.txt', 'w') as f:
2     f.write('Hi there!')

上面的with语句会在嵌入的程序运行完后自动关闭文件。好处就是无论嵌套模块如何退出,都可以保证文件被关闭。

如果嵌套模块结束之前有异常发生,系统将在异常被外部异常处理程序捕获之前关闭该文件。
如果嵌套模块中包含有return语句、continue语句或者break语句,with语句一样可以在跳转之前自动关闭文件。

1.5 lambda表达式

相对于def定义的函数而言,lambda表达式则简单很多,因为其主体是一个表达式而非代码块,
并允许在代码内嵌入一个函数定义,不过一般只能封装有限的逻辑。

如下面的例子所示,lambda表达式定义了一个匿名函数,用于筛选100以内3的倍数,并生成一个列表。

list (filter(lambda x:True if x % 3 == 0 else False, range(100)))

当然lambda表达式也可以嵌套在函数体内,使用的时候可以用一个变量来接收,如下:

1 def make_repeat(n):
2     return lambda s : s * n
3 
4 double = make_repeat(2)    # double变量此处是一个函数
5 print (double(8))    # 使用double向lambda表达式里的s传一个参数,并得到表达式的结果

二、数据结构相关

2.1 字典

2.1.1 如何判断字典中是否存在某个key?

在Python 2.x 时可以使用内置函数 has_key(),Python 3.x 以后不再支持该函数,被__contains(‘keyname’)所替代。

推荐使用如下的 in 方法

~ $ python3

>>> d = {'name':{},'age':{},'sex':{}}
>>> print name in d.keys()

True

2.1.2 删除字典内所有元素

clear()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-
dict = {'name': 'blogsite', 'alexa': 10000, 'url': 'http://blog.csdn.net/'}
dict.clear()

2.1.3 删除字典给定键 key 所对应的值,返回值为被删除的值

pop()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-
site= {'name': 'blogsite', 'alexa': 10000, 'url':'http://blog.csdn.net/uuihoo/'}
pop_obj=site.pop('name') # 删除要删除的键值对,如{'name':'blogsite'}
print pop_obj   # blogsite

2.1.4 为字典添加键值对

如果要为 dict 添加键值对,只需为不存在的 key 赋值即可。实现此操作的语法格式如下:

dict[key] = value

2.1.5 计算字典元素个数

可以使用内置函数 len() 来计算字典元素个数,即键的总数。

2.1.6 遍历字典

items()函数将返回键值对列表,keys()函数将返回键列表,values()函数将返回一个值列表。

  • (a) 遍历所有键值对

    dict = {0:'a', 1:'b', 2:'c', 3:'d'}
    
    for key,value in dict.items():
    	print("\nKey:" + key)
    	print("Value:" + str(value))
    
  • (b) 遍历所有键

    dict = {0:'a', 1:'b', 2:'c', 3:'d'}
    
    for key,value in dict.keys():
    	print(key)
    

    其实还有一种更简便的写法,可以把 keys() 方法省略。
    因为遍历字典时,如果你在 for 后面仅声明一个变量,Python会默认遍历所有的键并依次将键赋值给这个变量。

    dict = {0:'a', 1:'b', 2:'c', 3:'d'}
    
    for key,value in dict:
    	print(key)
    
  • (c) 遍历所有值

    dict = {0:'a', 1:'b', 2:'c', 3:'d'}
    
    for key,value in dict.values():
    	print("Value:" + str(value))
    

2.1.7 合并字典

合并字典有两种方法,一种是使用 update() 函数,还有一种是利用 ** 的用法自定义合并。

  • (a) 使用 update() 方法

    使用内置函数,将新的字典合并到当前字典中。函数参数为希望添加到指定字典dict里的字典。该方法没有任何返回值。

    合并过程可能出现以下两种情况:
    (1)有相同的键时:会使用最新的字典中该键对应的值做为最终结果。
    (2)有新的键时:会直接把字典中的键值对加入到当前字典中。

    dict_1 = {'Id001': 1, 'Id002': 2}
    dict_2 = {'Id001': 0, 'Id003': 3, 'Id004': 4}
    
    dict_2.update(dict_1)
    
    print(dict_2)
    

    输出结果如下:{'Id001': 1, 'Id003': 3, 'Id004': 4, 'Id002': 2}

  • (b) 使用 **,函数将参数以字典的形式导入

    def Merge(src_dict_1, src_dict_2):
    	dst_dict = {**src_dict_1, **src_dict_2}
    	return dst_dict
    
    dict_1 = {'Id001': 1, 'Id002': 2}
    dict_2 = {'Id003': 3, 'Id004': 4}
    dict_3 = Merge(dict_1, dict_2)
    print(dict3)
    

    输出结果如下:{'Id001': 1, 'Id002': 2, 'Id003': 3, 'Id004': 4}

2.2 列表

2.2.1 判断元素是否在列表

可以使用 in 方法,也可以使用内置函数 index()。

num = [1,2,3,4,5]
a = 3
if a in num:
    print("a=%d is in list num" % a)

b_idx = num.index(a)
print("The index of a=%d in the list is %d" % (a, b_idx))

三、格式化输入输出相关

3.1 python3设置print输出不换行

函数原型

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

对应参数含义如下

  • objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
  • sep -- 用来间隔多个对象,默认值是一个空格。
  • end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
  • file -- 要写入的文件对象。
  • flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

根据函数定义,默认情况下是每个print打印完成后自动换行的。

如果输出时不想换行,只需要给参数 end 赋值为空。

print (123,end='')
print (456,end='')

# 输出结果如下
123456

四、集成库相关

4.1 使用开源算法库opencv

需要先安装相关的库文件

pip3 install opencv-contrib-python

如果下载速度太慢可以更换下载源,使用如下命令

pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

(全文完)


参考资料

[1] PYTHON中XRANGE和RANGE https://www.cnblogs.com/shixisheng/p/7089930.html

[2] python lambda表达式 https://www.cnblogs.com/jydeng/p/4145188.html

上一篇:1029 两地调度


下一篇:Python中 range 和xrange的区别