python杂货

三、字典的基本操作

1、如何访问字典中的值?

adict[key] 形式返回键key对应的值value,如果key不在字典中会引发一个KeyError。

adict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None);

2、如何检查key是否在字典中?

a、has_key()方法 形如:adict.haskey(‘name') 有–>True,无–>False //3.0中变成了in

b、in 、not in 形如:'name' in adict 有–>True,无–>False


3、如何更新字典?

a、添加一个数据项(新元素)或键值对

adict[new_key] = value 形式添加一个项

b、更新一个数据项(元素)或键值对

adict[old_key] = new_value

c、删除一个数据项(元素)或键值对

del adict[key] 删除键key的项 / del adict 删除整个字典

adict.pop(key) 删除键key的项并返回key对应的 value值
adict.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;

1、adict.keys() 返回一个包含字典所有KEY的列表;

dic = {'lilei': 90, 'lily': 100, 'sam': 57, 'tom': 90}
for key in dic:
print dic[key]

序列的循环操作,元组 列表用的下标,字典用的是key
访问形式一样,故for对应的就是dict的key。

2、adict.values() 返回一个包含字典所有value的列表;

3、adict.items() 返回一个包含所有(键,值)元祖的列表;

4、adict.clear() 删除字典中的所有项或元素;

5、adict.copy() 返回一个字典浅拷贝的副本;

6、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key键,由 adict[key] = default 为它赋值;

7、adict.update(bdict) 将字典bdict的键值对添加到字典adict中,更新的会覆盖相同key


tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

sequence

基本样式[下限:上限:步长]

s1[0:5:2] # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)

字符串可以看成是特殊元素的tuple

str = "abcdef"

str[2:4]

range(start, stop[, step]) -> range object

continue # 在循环的某一次执行中,如果遇到continue, 那么跳过这一次执行,进行下一次的操作

break # 停止执行整个循环


for i in range(10):
if i == 2:
continue
print i


dir()用来查询一个类或者对象所有属性。你可以尝试一下

>>>print dir(list)

help()用来查询的说明文档。你可以尝试一下

>>>print help(list)

'r' open for reading (default)

'w' open for writing, truncating the file first //文件不存在会创建,存在会从开始写入,原有数据丢失

'x' create a new file and open it for writing //文件存在会报错

'a' open for writing, appending to the end of the file if it exists//文件不存在会创建文件

'b' binary mode

't' text mode (default)

'+' open a disk file for updating (reading and writing) //必须要r/w/a在前面


f = open(r'C:\Program Files\Tongbu\Tongbu.exe.config','r',encoding= 'utf-8') //3.5版本

print('a',end='') //print 不换行


关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:

包裹传递

在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。

下面是包裹位置传递的例子:

def func(*name):
print type(name)
print name

func(1,4,6)
func(5,6,7,1,2,3)

两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。


为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。


下面是包裹关键字传递的例子:

def func(**dict):
print type(dict)
print dict

func(a=1,b=9)
func(m=2,n=1,c=11)

与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。

解包裹
*和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:

def func(a,b,c):
print a,b,c

args = (1,3,4)
func(*args)

在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)

相应的,也存在对词典的解包裹,使用相同的func定义,然后:

dict = {'a':1,'b':2,'c':3}
func(**dict)
在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。

python声明编码格式

#coding: utf-8 //没有此声明 是无法使用中文的 加u都没用
import sys
print(sys.getdefaultencoding()) #2.7 ascii >3.0:utf-8

import sys

from sys import argv #单独功能

from sys import * #所有功能,不用sys.xx,但是不建议用,避免命名冲突,也让代码可读性不好

import multiprocessing as multi #别名

tt=os.popen('mem').read() #os.popen 打开系统命令

tt=commands.getstatusoutput('mem') #得到系统命令输出 win没用 linux有用 返回状态和执行结果元组

raw_input(...)
raw_input([prompt]) -> string

Read a string from standard input.

raw_input() 与 input() __ Python

这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子。

1 >>> raw_input_A = raw_input("raw_input: ")

2 raw_input: abc

3 >>> input_A = input("Input: ")

4 Input: abc

5
6 Traceback (most recent call last):

7 File "<pyshell#1>", line 1, in <module>

8 input_A = input("Input: ")

9 File "<string>", line 1, in <module>

10 NameError: name 'abc' is not defined

11 >>> input_A = input("Input: ")

12 Input: "abc"

13 >>>


1 >>> raw_input_B = raw_input("raw_input: ")

2 raw_input: 123

3 >>> type(raw_input_B)

4 <type 'str'>

5 >>> input_B = input("input: ")

6 input: 123

7 >>> type(input_B)

8 <type 'int'>

9 >>>

例子 1 可以看到:这两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。

例子 2 可以看到:raw_input() 将所有输入作为字符串看待,返回字符串类型。而 input() 在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型( int, float );同时在例子 1 知道,input() 可接受合法的 python 表达式,举例:input( 1 + 3 ) 会返回 int 型的 4 。


格式化输出%d %f等可以限制输入的类型,得到自己想要的类型。

python中while也可以使用else
count =0
while count <5:
print count," is less than 5"
count = count +1
else:
print count," is not less than 5"


file.closed 是否关闭
file.encoding 3.0以上可以open参数设置


fd.tell()
从0开始 一直到最后一个字符的后一个的位置

truncate(size) 会填充和截取到size大小 byte

truncate需要有在写模式下

w w+模式打开会清空文件内容
r r+ a a+不会

index 找不到报错
find 找不到-1
lower upper swapcase
capitalize首字母大写

index(...)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.


>>> range(10)[::2]
seq[start:end:step]

 


dict.get(key,defaultvalue) //没有key的时候返回默认值

dict.has_key(key) //测试是否存在key

dict.update(dict2) 合并并更新dict

dict.popitem() 随意删除一个

cmp(dict1,dict2)
比较字典 优先级 元素个数,键大小 键值大小
第一个大 1 小-1 ==0


eclipse中
在工程中新建package与folder的区别
package自带__init__.py ,如此就可以导出

通过from package import func

先按住ctrl在点击函数可以追击到函数定义的地方。

__init__.py 其他功效
http://www.cnpythoner.com/post/2.html

print __file__ #输出当前文件路径
print __name__
#谁作为主文件被执行,谁的值就是__name__,常见用法
if __name__ == '__name__': #当前文件是主文件则执行
dosomething

print __doc__ 输出文件开始处的注释
print func__doc__ 输出函数注释

只接受''' 扩起来的注释


函数参数从左到右匹配 设置默认值的参数只能在后面
关键字参数优先匹配,剩下的从左到右依次匹配

可变参数
*args 接受列表
**kargs接受字典

def Foo(arg,*args):
pass
Foo('alex','kelly','tom')

def Foo(**kargs):
pass
Foo(k1='sb',k2='alex') #此时key不加引号
dict = {}
Foo(**dict) #如此才能调用

 


三目和lambda
result = 'gt' if 1>3 else 'lt'
print result

a = lambda x,y:x+y
print a(4,10)


getattr(...)
getattr(object, name[, default]) -> value

Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
When a default argument is given, it is returned when the attribute doesn't
exist; without it, an exception is raised in that case.

getattr(x, 'y', 'default') #如果有属性y则返回x.y,否则返回default

 

posted @ 2016-12-26 11:00  十年闷油瓶  阅读(138)  评论(0编辑  收藏  举报