python基础3

发布时间:2019-09-24 08:29:48编辑:auto阅读(1563)

    python基础3


     交换:
    a,b=b,a

    相当于定义了一个元组t=(b,a)
    然后将t[0]的值给了a,t[1]的值给了b





    ####字典####

    定义用花括号

    集合定义若为空的话,会默认为字典,所以集合不能为空




    子典只能通过关键字来查找值,因为字典是key-value(关键字-值),因此不能通过值来查找关键字
    In [1]: dic = {"user1":"123","user2":"234","user3":"789"}
    In [3]: dic["234"]
    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-3-2845b64d96b1> in <module>()
    ----> 1 dic["234"]

    KeyError: '234'




    字典是一个无序的数据类型,因此也不能进行索引和切片等操作。
    In [1]: dic = {"user1":"123","user2":"234","user3":"789"}

    In [2]: dic["user1"]
    Out[2]: '123'

    In [5]: dic["user2"]
    Out[5]: '234'



    In [7]: user = ['user1','user2','user3']

    In [8]: passwd = ['123','234','456']

    In [9]: zip(user,passwd)
    Out[9]: [('user1', '123'), ('user2', '234'), ('user3', '456')]

    In [10]:

    当你有一个用户名单和密码,若使用列表的类型,判断用户是否和密码一致时,就比较麻烦,而使用字典时,只需通过关键子就可以返回相对应的值,(如上例子:当定义一个子典当你搜索user1时,字典类型就会返回该关键字对应的密码,此时只需判断该密码是否匹配即可)



    ####字典的基本操作###

    In [17]: dic.
    dic.clear       dic.items       dic.pop         dic.viewitems
    dic.copy        dic.iteritems   dic.popitem     dic.viewkeys
    dic.fromkeys    dic.iterkeys    dic.setdefault  dic.viewvalues
    dic.get         dic.itervalues  dic.update      
    dic.has_key     dic.keys        dic.values



    字典添加

    In [12]: dic
    Out[12]: {'user1': '123', 'user2': '234', 'user3': '789'}

    In [13]: dic["westos"]='linux'

    In [14]: dic
    Out[14]: {'user1': '123', 'user2': '234', 'user3': '789', 'westos': 'linux'}

    In [15]: dic["hello"]='world'

    In [16]: dic            ####由此可以看出字典是无序的,在添加时,并不会按照顺序往后添加####
    Out[16]:
    {'hello': 'world',
     'user1': '123',
     'user2': '234',
     'user3': '789',
     'westos': 'linux'}

    In [17]:


    字典更新


    In [22]: dic
    Out[22]: {'hello': 'world', 'user1': '123', 'user2': '234', 'user3': '789'}

    In [23]: dic["user1"]="redhat"        ###可直接通过赋值对关键字进行更新###

    In [24]: dic
    Out[24]: {'hello': 'world', 'user1': 'redhat', 'user2': '234', 'user3': '789'}


    ###或者通过dic.update更新###
    In [25]: dic
    Out[25]: {'hello': 'world', 'user1': 'redhat', 'user2': '234', 'user3': '789'}

    In [26]: help(dic.update)
    Help on built-in function update:

    update(...)
        D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
        If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
        If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
        In either case, this is followed by: for k in F: D[k] = F[k]
    (END)


    In [28]: dic1={'yunwei':"westos",'user1': 'redhat'}

    In [29]: dic.update(dic)
    dic   dic1  dict  

    In [29]: dic.update(dic1)        ###将dic1中dic所没有的更新给了dic###

    In [30]: dic
    Out[30]:
    {'hello': 'world',
     'user1': 'redhat',
     'user2': '234',
     'user3': '789',
     'yunwei': 'westos'}

    In [31]:




    ####若是关键字相同,而值不同,就将值更新给他####

    In [35]: dic
    Out[35]: {'hello': 'world'}

    In [36]: dic1
    Out[36]: {'user1': 'redhat', 'yunwei': 'westos'}

    In [37]: dic1["hello"]="hai"

    In [38]: dic.update(dic1)

    In [39]: dic
    Out[39]: {'hello': 'hai', 'user1': 'redhat', 'yunwei': 'westos'}



    In [42]: dic.clear()        ###清空dic###

    In [43]: dic
    Out[43]: {}

    In [44]: del(dic)        ###删除dic###

    In [45]: dic
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-45-1b445b6ea935> in <module>()
    ----> 1 dic

    NameError: name 'dic' is not defined




    ####字典的删除####

    In [49]: dic1
    Out[49]: {'user1': 'redhat', 'yunwei': 'westos'}

    In [50]: dic1.pop("user1")        ###指定关键字,删除该关键字和值####
    Out[50]: 'redhat'

    In [51]: dic1
    Out[51]: {'yunwei': 'westos'}

    In [52]:



    In [74]: dic1.popitem()        ###不指定关键字,随即删除###
    Out[74]: ('yunwei', 'westos')



    In [77]: dic = {"hello":"123","westos":"linux"}        

    In [79]: dic.keys()        ###查看dic的全部关键字###
    Out[79]: ['hello', 'westos']

    In [80]: dic.values()        ###查看dic的全部值###
    Out[80]: ['123', 'linux']



    In [82]: dic.get("hello")    ###得到相对应的关键字的值,若关键字不存在,则默认返回none
    Out[82]: '123'

    In [83]: dic.get("redhat")

    In [84]: print dic.get("redhat")
    None


    In [87]: dic.has_key("hello")        ###查看是否有该关键字,
    Out[87]: True

    In [88]: dic.has_key("world")
    Out[88]: False


    dict.fromkeys()            ###可以通过该操作实现去重###

    In [89]: dic
    Out[89]: {'hello': '123', 'westos': 'linux'}

    In [90]: dic.fromkeys([1,2,3,4])
    Out[90]: {1: None, 2: None, 3: None, 4: None}

    In [91]: dic.fromkeys([1,2,3,4],'hello')
    Out[91]: {1: 'hello', 2: 'hello', 3: 'hello', 4: 'hello'}


    In [38]: d = {}
    In [32]: li = [1,2,3,1,2,3]            ###去重###

    In [33]: d.fromkeys(li)
    Out[33]: {1: None, 2: None, 3: None}

    In [34]: d.fromkeys(li).keys()
    Out[34]: [1, 2, 3]



    字典的key必须是不可变的数据类型


    In [94]: dic = {1:'1',2:'2',1:'a'}

    In [95]: dic
    Out[95]: {1: 'a', 2: '2'}        ###一个关键字只能对应一个值###

    In [96]: for key in dic.keys():        ###逐个遍历key###
       ....:     print "key=%s" % key
       ....:
    key=1
    key=2


    In [97]: for value in dic.values():    ###逐个遍历value的值###
        print "value=%s" % value
       ....:     
    value=a
    value=2


    In [98]: for key,value in dic.keys(),dic.values():    ###逐个遍历key -> value 的值#####
       ....:     print "%s -> %s" %(key,value)
       ....:
    1 -> 2
    a -> 2




    In [100]: dic
    Out[100]: {1: 'a', 2: '2'}
    In [101]: dic.items()            ###以元组的形式一一对应key和value的值###
    Out[101]: [(1, 'a'), (2, '2')]

    In [102]: for k,v in dic.items():
       .....:     print "%s -> %s" %(k,v)
       .....:
    1 -> a
    2 -> 2


    和list的比较,dict的不同:
    1 查找和插入的速度快,字典不会随着key值的增加查找速度减慢
    2 占用内存大,浪费空间



    小练习:
    去掉一个最高分和最低分,并且显示平均值

    li = [90,91,67,100,89]


    In [103]: li = [90,91,67,100,89]

    In [104]: li.sort()        ###排序###

    In [105]: li
    Out[105]: [67, 89, 90, 91, 100]

    In [106]: li.pop()
    Out[106]: 100

    In [107]: li.pop(0)
    Out[107]: 67

    In [108]: li
    Out[108]: [89, 90, 91]

    In [109]: sum(li)/len(li)    ###sum函数求和###
    Out[109]: 90

    小练习:用字典实现case语句:
    !/usr/bin/env python
    #coding:utf-8
    from __future__ import division
    num1 = input("num1:")
    oper = raw_input('操作:')
    num2 = input('num2:')

    dic = {"+":num1+num2,"-":num1-num2,"*":num1*num2,'/':num1/num2}

    if oper in dic.keys():
        print dic[oper]



    #####函数####


    函数名的理解:函数名与变量名类似,其实就是指向一个函数对象的引用;

                给这个函数起了一个“别名”:函数名赋给一个变量


    In [5]: sum(li)
    Out[5]: 6

    In [6]: a = sum        ###将sum的函数名给了a变量,使得a能够进行求和###

    In [7]: a(li)
    Out[7]: 6

    In [8]:
    In [8]: sum = abs

    In [9]: sum(-1)
    Out[9]: 1

    In [10]: sum([2,4,5]    ###将abs的函数名给了sum,则sum就不再具有求和的功能###
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-10-d3c81a94a2a0> in <module>()
    ----> 1 sum([2,4,5])

    TypeError: bad operand type for abs(): 'list'

    In [11]: a([2,4,5])
    Out[11]: 11



    ####函数的返回值###

    def    hello():
        print "hello"

    print hello()            ###该函数没有返回值,只是打印了hello,返回值为none


    def    hello():
        return    ”hello“

    print hello()            ###该函数有返回值,则返回一个hello###    


    ####函数在执行过程中一旦遇到return,就执行完毕并且将结果返回,如果没有遇到return,返回值为none###


    ###定义一个什么也不做的空函数,可以用pass语句,作为一个占位符使得代码先运行起来

    def hello():
        return "hello"

    def world():
        pass

    print hello()
    print world()


    运行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/10.py
    hello
    None

    Process finished with exit code 0





    小练习:将abs的错误显示进行优化###

    def my_abs(x):
        if isinstance(x,(int,float)):    ###判断数据类型,是int或是float(也可以是别的类型,看你写的)###
         print   abs(x)
        else:
            print "请输入整型或浮点型的数"


    my_abs("a")
    my_abs(123)

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/11.py
    请输入整型或浮点型的数
    123

    Process finished with exit code 0




    小练习:定义一个函数func(name),该函数效果如下:
    func('hello')    -> 'Hello'
    func('World')    -> 'World'

    def func(name):
        print name.capitalize()
    name = raw_input("name:")
    func(name)


    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/12.py
    name:hello
    Hello

    Process finished with exit code 0


    函数的返回值,函数可以返回多个值
    小练习:定义一个函数func,传入两个数字,返回两个数字的最大值和平均值


    def func(x,y):
        if x>y:
            return x,(x+y)/2
        else:
            return y,(x+y)/2


    x=6
    y=3
    print func(x,y)

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/13.py
    (6, 4)            ###由此可见,返回多个值,实际上是返回一个元组###

    Process finished with exit code 0


    ###返回的元组的括号可以省略,函数调用接受返回值时,按照位置赋值变量###
    def func(x,y):
        if x>y:
            return x,(x+y)/2
        else:
            return y,(x+y)/2


    x=6
    y=3
    avg,maxnum = func(x,y)
    print avg,maxnum

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/13.py
    6 4

    Process finished with exit code 0


    ###函数的参数###
    def power(x,n=2):    ###设定n默认为2,则n为默认参数,x为必选参数###
        return x**n
    print power(2)


    def power(x,n=2):
        return x**n
    print power(2,4)    ###也可以进行多次操作###

    ####当默认参数和必选参数同时存在时,一定要将必选参数放在默认参数之前###

    ###设置默认参数时,把变化大的参数放前面,变化小的参数放后面,将变化小的参数设置为默认参数###

    def enroll(name,age=22,myclass="westoslinux"):
        print 'name=%s'% name
        print 'age:%d'% age
        print 'class:%s' %myclass

    enroll('user1')
    enroll('user2',20)
    enroll('user3',18,'全能班')

    执行结果:
    name=user1
    age:22
    class:westoslinux
    name=user2
    age:20
    class:westoslinux
    name=user3
    age:18
    class:全能班

    Process finished with exit code 0


    ###默认参数必须使不可变的数据类型###
    例:
    先定义一个函数,传入一个 list,添加一个END 再返回

    def fun(li=[]):
        li.append("END")
        return li
    print fun([1,2,3])
    print fun()
    print fun()

    执行结果:

    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    [1, 2, 3, 'END']
    ['END']
    ['END', 'END']        ###因为列表是可变的数据类型,所以在第二次输入print    fun()时,默认参数就不是空,而已经有了一个“END”###

    Process finished with exit code 0




    更改为:li=None,则此时li的默认值为不可变的数据类型


    def fun(li=None):
        if li is None:
            return ['END']
        li.append('END')
        return li
    print fun([1,2,3])
    print fun()
    print fun()


    执行结果为:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    [1, 2, 3, 'END']
    ['END']
    ['END']

    Process finished with exit code 0




    ####可变参数###
    定义参数时,形参可以为*args,使函数可与接受多个参数;
    如果想要将一个列表或者元组传入参数,也可以通过*li或*t,将参数传入函数里。

    def fun(*args):        ###参数前面一定要加*###
        print type(args)
        return max(args),min(args)
    li = [1,42,3,14,58,6]
    print fun(*li)        ###传递列表时,前面也要加*###

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    <type 'tuple'>
    (58, 1)

    Process finished with exit code 0

    ###若传递列表时,不加*号###

    def fun(*args):
        print type(args)
        return max(args),min(args)
    li = [1,42,3,14,58,6]
    print fun(li)

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    <type 'tuple'>
    ([1, 42, 3, 14, 58, 6], [1, 42, 3, 14, 58, 6])

    Process finished with exit code 0


    ###传递多个数###

    def fun(*args):
        print type(args)
        return max(args),min(args)

    print fun(1,42,3,14,58,6)

    执行结果:

    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    <type 'tuple'>
    (58, 1)

    Process finished with exit code 0




    ###关键字可变参数###

    def enroll(name,age=22,**kwargs):
        print 'name=%s'% name
        print 'age:%d'% age
        for k,w in kwargs.items():
            print '%s:%s'%(k,w)
        print type(kwargs)

    enroll('user3',myclass='运维班')

    执行结果:
    /usr/bin/python2.7 /home/kiosk/PycharmProjects/pythonbasic/14.py
    name=user3
    age:22
    myclass:运维班
    <type 'dict'>

    Process finished with exit code 0







    参数定义优先级:必选参数>默认参数>可变参数>关键字参数

    *arg,可变参数接受的是元组
    **kwargs,关键字参数,接受的是字典



    ###局部变量,只在函数内部生效,全局变量,在整个代码中生效###



关键字

上一篇: python3-while与if

下一篇: python3-集合