三、字典的基本操作

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

python杂货的更多相关文章

  1. Python算法应用实战之队列详解

    队列是一种先进先出(First-In-First-Out,FIFO)的数据结构.队列被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客.下 ...

  2. 机器学习算法的基本知识(使用Python和R代码)

    本篇文章是原文的译文,然后自己对其中做了一些修改和添加内容(随机森林和降维算法).文章简洁地介绍了机器学习的主要算法和一些伪代码,对于初学者有很大帮助,是一篇不错的总结文章,后期可以通过文中提到的算法 ...

  3. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  4. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  5. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  6. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  7. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  8. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  9. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

随机推荐

  1. 理解Thread.sleep()函数

    转载自:http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间 ...

  2. linux设置python虚拟环境的环境变量

    针对 linux系统中 python虚拟环境 设置环境变量 2种方法: 1.在建好的虚拟环境的 venv/bin/active 文件中,写入需要的环境变量,再进入虚拟环境: 如 配置文件路径 JERR ...

  3. 微信小程序(14)--上传图片公用组件(父子传参)

    这周整理了一下做微信小程序页面时遇到的一些问题,先说说常见的上传图片吧. 上传图片公用组件 首先要了解的是父子传参. 1.A组件为父组件,B组件为子组件,以下是A组件向B组件传参: 在A组件的json ...

  4. 二 shell 基础

    一   文件的 权限基础 文件有三类权限   user,group,other, 权限分为 r w x  代表数字分别为 4 2 1 修改权限命令 chmod 权限还有特殊权限,在执行的时候代表某一身 ...

  5. mysql数据库进阶

    一.索引 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 分类: 普通索引 唯一索引 全文索引 组合 ...

  6. [BZOJ1018][SHOI2008]堵塞的交通traffic 时间分治线段树

    题面 介绍一种比较慢的但是好想的做法. 网上漫天的线段树维护联通性,然后想起来费很大周折也很麻烦.我的做法也是要用线段树的,不过用法完全不同. 这个东西叫做时间分治线段树. 首先我们建一个\(1..m ...

  7. gulp为css,js添加版本号

    由于cdn缓存,更改样式后会有一段时间不生效,解决方法就是给css,js加上版本号效果如下: 1.安装gulp插件 npm install --save-dev gulp-rev (version:9 ...

  8. Linux网络栈

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11394930.html OSI模型 OSI 模型把网络互联的框架分为应用层.表示层.会话层.传输层.网 ...

  9. visual studio 中gitflow使用

    vs中已集成了git,但是如果想使用gitflow,要去扩展包里面下载 装完后,在右侧面板的"团队资源管理"就会出现gitflow 进行git flow实始化 后就可以进行 各分支 ...

  10. SpringBoot编程思想

    Spring Boot的特性 1).创建独立的Spring应用 2).直接嵌入Tomcat.Jetty或Undertow等Web容器(不需要部署WAR文件) 3).提供固化的starter依赖,简化构 ...