• 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 FilesTongbuTongbu.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

  • 相关阅读:
    正则表达式(通用篇)
    Ubantu server部署django/flask项目
    Ubantu环境下安装mysql方法
    使用阿里大于发短信(简单版)
    SQLALchemy学习笔记(mysql+python环境)
    windows 安装使用 Memcached
    pycharm2019版本可用破解
    SVN使用教程
    Jquery学习
    css兼容问题
  • 原文地址:https://www.cnblogs.com/newpython/p/6221589.html
Copyright © 2020-2023  润新知