zoukankan      html  css  js  c++  java
  • 字典+再识函数-8

    字典:

    内置类型字典

    字典的定义

    dict1 = { } 空字典

    dict2 = {'name':'Jack', 'age':40}

    key,value 的概念  键和值是单向的

    dict2 ['name']  返回值的内容

    dict2 ['age']

    就像真正的字典前面的索引

    访问不存在的key会导致程序异常

    dict2.get('name',default = None)get方法没有定义的键,返回的值默认为none

    字典的特性

    字典是mutable的,可以存储任意数量的元素,可以存储任何python数据类型(value可以是任何类型;key是可以hash的类型 最常用的效率也是最高的是数字或者字符串,键不能是字典类型)

    以key:value,即“键:值”对的形式存储数据,每个键是唯一的

    根据键查找值的效率非常高

    list、string、tuple特性称之为 sequence

    dict 特性称之为 map

    定义顺序就是实际顺序(3.6新特性)

    d = {1:'abc','1':3.14159,3.2:100}

    1 in d =>True

    d.haskey('server')python2里有,python 3 没有

    del d2 ['name'] 删除元素,del.pop(‘age’)删除元素,会返回元素的值

    字典

    遍历 for one in alist

    students = {

    'Mike Green':'age':25.'height':180','weight':80,'nickname':'ohmy'},

    Douge Jose':'age':25.'height':180','weight':80,'nickname':'doggy'}

    }

    列出下面列表中所有学生的年龄

    for name in students:   

          键值                             
      print(f'name:{name:<20},age:{students[name][“age”]}')

                                                                         变量

    或者

    for name,info in students.items( ):

      print(f'name:{name:<20},age:{info["age"]}')

    常用操作

    字典也可以用 len()

    清空字典内容 d.clear()  对象发生了改变

    和d ={}  变量的赋值都不是改变原来指定的对象,变量指向新的对象

    例子

    def func1(arg):

      arg.clear()

    a = { 'age':25,'height':180}

    func1(a)

    print a结果是 {}

    def func1(arg):

      arg= {}

    a = { 'age':25,'height':180}

    func1(a)

    print a结果是 { 'age':25,'height':180}

    得到所有的key返回在List中 d.keys()

    得到所有的value返回在List中 d.values()

    得到所有的(key,value)返回在List中 d.items()

    增加另一个dict的内容

    d ={1:'1',2:'2'}

    d.update({4:'4',5:'5'})

    再识函数

    变量的作用域

    例子

    x =2

    def func():

      x = 9

      print ("this x is in the func:-->",x)

    func()

    print ("------------------------------")

    print ("this x is out of func:-->",x)

    全局变量和局部变量

    全局变量的有效区域:整个代码文件

    局部变量的有效区域:定义的函数里

    优先级:都有定义,函数里使用局部变量

    函数里面使用全局变量

    修改全局变量

    x =2

    def func():

      global x

      x = 9

      print ("this x is in the func:-->",x)

    func()

    print ("------------------------------")

    print ("this x is out of func:-->",x)

     函数的缺省参数

    例子

    统计超过指定年龄的男女生人数

    students = [

      {'age':18,'name':'jcy1','gender':'male'},

      {'age':20,'name':'jcy2','gender':'female'},

      {'age':18,'name':'jcy3','gender':'male'},

      {'age':21,'name':'jcy4','gender':'female'},

      {'age':22,'name':'jcy5','gender':'male'}

    ]

    def statmf(student,minage):

    调用该函数的时候需要传入一个学生列表和年龄条件

    statmf(student,18)

    statmf(student,20)

    函数实现

    def statmf(student,minage):

      malelist =[]

      femalelist = []

      for student in students:

        if student['age'] > minage:

          if student['gender'] == 'male':

            malelist.append(student['name'])

          elif student['gender'] == 'female':

            femalelist.append(student['name'])

      print ('the male students are %s ' %  ' '.join(malelist))

      print ('the female students are %s' %  ' '.join(femalelist))

    缺省参数

    def statmf(student,minage=18):

      malelist =[]

      femalelist = []

      for student in students:

        if student['age'] > minage:

          if student['gender'] == 'male':

            malelist.append(student['name'])

          elif student['gender'] == 'female':

            femalelist.append(student['name'])

      print ('the male students are %s ' %  ' '.join(malelist))

      print ('the female students are %s' %  ' '.join(femalelist))

       statmf(student)

      statmf(student,20)

    不指定,就使用缺省参数

    statmf(student)  #不会报错

    没有缺省值的参数我们可以叫做必填参数

    缺省参数可以定义多个,def statmf(a,b=1,c=2,d=3):

    定义函数的时候一定要必选参数在前,缺省参数在后 def statmf( minage=0,students):,这个会报错

    缺省参数使用非常广泛。内置的库和第三方库里面大量的使用缺省参数

    可变数量参数

    给定一组数字a,b,c......,请计算a²+b²+c²+......

    def calc(numbers):

      total = 0

      for n in numbers:

        total = total + n* n

      return total

    可以用tuple、list存放参数

    calc((1,2,3))或者 calc([1,2,3])

    这样调用似乎更方便 calc(1,2,3)

     def calc(*numbers):

      total = 0

      for n in numbers:

        total = total + n* n

      return total

    可以传入任意多的参数,Python解释器会把传入的参数存入一个tuple中,赋值给numbers

    调用的时候加*相当于参数展开

    如果参数已经在一个list(或者tuple)中,怎么调用 nums=[1,2,3]

    当然可以这样 calc(nums[0],nums[1],nums[2])

    如果有更多的参数就不方便,可以这样calc(*nums)等价于 calc(nums[0],nums[1],...,nums[n-1])

    关键字可变数量参数

      允许在调用函数时,传入任意个含参数名的参数

    def register_student(name,age,**kargs):

      print ('name:',name,'age:',age,'other:',kargs)

    除了必选参数name和age外,还接受关键字参数kargs

    关键字参数

    只传必填参数

    >>> register_student ('Michael',30)

    name:Michael  age:30 other:{}

    加上任意个数的关键字参数

    >>>register_student ('Bob',35,city = 'Beijing')

    name:Bob age :35 other:{'city':'Beijing'}

    >>>register_student('Adam',45,gender='M',job = 'Engineer')

    name:Adam age:45 other:{'gender':M,'job':'Engineer'}

    Python解释器把这些关键字参数存入到一个dict中,传给kargs

    参数展开

    如果参数已经在一个dict中,怎么调用

    students = {'city':‘Beijing’,‘job’:‘Engineer’}

    参数展示

    register_studenr ('Jack',24,**students)

    参数名不能加引号

    关键字参数的作用

    它可以扩展函数的作用。

    比如,在这个注册学生的函数里,

      我们必须要有name和age这两个参数

      但是,如果调用这愿意提供更多的参数,我们也可以存储下来。

    综合起来

    必填参数、缺省参数、可变参数和关键字参数

    一起使用

    def func(a,b,c=0,*args,**kw):

      print ('a =',a ,'b =',b,'c=',c)

      print ('args =',args,'kw =',kw)

    func(1,2,c=3,5)会报错,一旦出现了参数名,后面都得有参数名

    可以这样 func(1,2,3,5)          args = (5,)

    def func(**kw,*args): pass    不能这样定义,会报错

    def func(**kw,b=2): pass     报错

    >>>def func(*args,b=2):

      print ('args =',args,'b=',b)

    >>>func(1,3,3, 3)

    args = (1,3,3,3) b =2

    >>>func(1,3,3, b=3)

    args = (1,3,3) b =3

  • 相关阅读:
    支付宝支付内容 尚未完成
    mvc 高并发解决方案之一---存储过程
    微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)
    卡券类字段
    Jquery 方法学习
    c# 对象反射赋值未知属性需类型转换
    C# enum 枚举 反射
    MVC c# 调用sql的存储过程
    Javascript装饰器原理
    关于阿里云的产品应用思考
  • 原文地址:https://www.cnblogs.com/hyzhang/p/7650012.html
Copyright © 2011-2022 走看看