集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Python >

成都python培训机构哪个好?函数名的应用,strings格式化输出,迭代器

发布者: 成都达内     浏览次数:     发布时间:2020-07-14 10:03:52

函数名的定义和变量的定义几乎一致,在变量的角度,函数名其实就是一个变量,具有变量的功能:可以赋值;但是作为函数名他也有特殊的功能就是加上()就会执行对应的函数,所以我...

  一、函数名的应用

函数名的定义和变量的定义几乎一致,在变量的角度,函数名其实就是一个变量,具有变量的功能:可以赋值;但是作为函数名他也有特殊的功能就是加上()就会执行对应的函数,所以我们可以把函数名当做一个特殊的变量

  1、函数名指向的是函数的内存地址

   函数名 + ()就可以执行次函数

  def func():

  print("呵呵")

  print(func)

  输出结果:

通过上面代码可以我们知道,函数名指向的是这个函数的内存地址,其实深一步理解可得知,与其说函数名()可以执行这个函数,不如说是函数的内存地址()才是执行这个函数的关键,就好比:

  a = 1

  b = 2

  c = a + b

  print(c) # 3

  2、函数名可以赋值给其他变量

  def func():

  print("呵呵")

  print(func)

  a = func # 把函数当成一个变量赋值给另一个变量

  a() # 函数调用 func()

  3、函数名可以当容器类元素

  def func1():

  print("in func1: 嘻嘻")

  def func2():

  print("in func2: 哈哈")

  def func3():

  print("in func3: 咯咯")

  def func4():

  print("in func4: 吱吱")

  lst = [func1, func2, func3, func4]

  for i in lst:

  i()

  4、函数名可以当做函数的参数

  def func1():

  print('in func1')

  def func2(f):

  print('in func2')

  f()

  func2(func1)

  输出结果:

  in func2

  in func1

  5、函数名可以作为函数的返回值

  def func1():

  print('in func1')

  def func2(f):

  print('in func2')

  return f

  ret = func2(func1)

  ret()

  输出结果:

  in func2

  in func1

  二、Python新特性:f-strings格式化输出

  1、旧的格式化输出方式

  name = 'mrxiong'

  age = 19

  msg = '我叫%s,今年%s'%(name,age)

  msg1 = '我叫{},今年{}'.format(name,age)

  print(msg)

  print(msg1)

  2、新特性:格式化输出 python3.6版本后适用

  name = 'mrxiong'

  age = 19

  msg = f'我叫{name},今年{age}'

  print(msg)

  可以加表达式

  dic={'name':'mrxiong','age':19}

  msg = f'我叫{dic["name"]},今年{dic["age"]}'

  print(msg)

  count= 7

  a = f'最终结果:{count*7}'

  print(a)

  name= 'mrxiong'

  msg1= f'我的名字是 :{name.upper()}'

  print(msg1)

  结合函数 使用

  def _sum(a,b):

  return a+b

  msg2 = f'最终的计算结果是:{_sum(10,20)}'

  print(msg2)

  def _sum(a,b):

  return a+b

  num=int(input('请输入弟一个数字:'))

  num1=int(input('请输入第二个数字:'))

  msg2 = f'最终的计算结果是:{_sum(num,num1)}'

  print(msg2)

  优点:1、结构更清晰更简化,2、可以结合表达式及函数进行使用,3、效率提升很多

  三、迭代器

  1、可迭代对象

   字面意思:对像,python中一切皆对象,一个实实在在存在的值,对象

   可迭代:更新迭代。 重复的,循环的一个过程。可进行循环更新的一个实实在在值

   专业角度:可迭代对像,内部含有’____iter‘_方法的对像,可迭代对像

   目前学过的可迭代对象:str list tuple dict set range 文件句柄

   判断一个对像的所有方法:dir()

  s1 = 'mrxiong'

  print(dir(s1))

  s1 = 'mrxiong'

  print('__iter__'in dir(s1))

  小结

  字面意思:可以进行循环更新的一个实实在在值

  专业角度:可迭代对像,内部含有’____iter‘_方法的对像,可迭代对象

  判断一个对像是不是可迭代对像:’____iter‘ in dir(对像)

  str list tuple dict set range 文件句柄

  优点:

  存储的数据直接能显示,比较直观

  拥有的方法比较多

  缺点:

  占用内存

  不能直接通过for循环,不能直接取值(索引,key)

  2、迭代器

  迭代器的定义:

  字面意思:更新迭代,器:工具,可更新迭代的工具

  专业角度:内部含有'_____iter' 方法并且含有 '_____next' 方法的对象就是迭代器

  可以判断是否是迭代器:'inter'and '_____next' 在不在dir(对象)

  判断一个对象是否是迭代器

  with open('a.txt', encoding='utf-8', mode='w') as f1:

  print('__iter__' in dir(f1) and '__next__' in dir(f1))

  可迭代对象如何转化成迭代器并取值

  s1 = 'adf'

  obj = iter(s1) #把s1转换为一个迭代器

  obj.__iter__() #把s1转换为一个迭代器第二种方法

  print(next(obj)) #next对己转换的迭代器进行取值

  print(obj.__next__()) #next对己转换的迭代器进行取值第二种方法

  print(next(obj))

  l1 = [11,22,33,44,55,66]

  l2 = iter(l1)

  print(next(l2))

  print(next(l2))

  print(next(l2))

  print(next(l2))

  print(next(l2))

  print(next(l2))

  l3 = iter([1,2,3,4])

  print(next(l3))

  print(next(l3))

  print(next(l3))

  print(next(l3))

  可迭代对象转换成迭代器

  iter([1,2,3])

  利用while循环模拟for循环对可迭代对象进行取值的机制

  s1 = [11, 22, 33, 44, 55, 66, 77, 88]

  obj = iter(s1)

  while 1:

  try:

  print(next(obj))

  except StopIteration:

  break

  小结

  迭代器优点:

  1)节省内存。迭代器在内存中相当于只占一个数据的空间:因为每次取值都上一条数据会在内存释放,加载当前的此条数据。

  2) 惰性机制。next一次,取一个值,绝不过多取值。

  有一个迭代器模式可以很好的解释上面这两条:迭代是数据处理的基石。扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式。

  迭代器的缺点:

   不能直观的查看里面的数据。

   取值时不走回头路,只能一直向下取值。

   速度慢

  可迭代对象与迭代器的对比

  可迭代对象:

是一个私有的方法比较多,操作灵活(比如列表,字典的增删改查,字符串的常用操作方法等),比较直观,但是占用内存,而且不能直接通过循环迭代取值的这么一个数据集。

   应用:当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。

  迭代器:

   是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。

  **应用**:当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。(可参考为什么python把文件句柄设置成迭代器)。

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56