字典+再识函数-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

原文地址:https://www.cnblogs.com/hyzhang/p/7650012.html