码迷,mamicode.com
首页 > 其他好文 > 详细

函数进阶2

时间:2019-06-19 17:05:57      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:cep   stop   比较   python   pytho   while循环   local   新特性   for   

1.关键字 global nonlocal

global   1.可以在局部作用域声明一个全局变量   2.可以修改全局变量
nonlocal 1.不能操作全局变量   2.可以对父级作用域的变量进行修改,并且在当前作用域创建(复制)一份此变量

2.默认参数的坑

默认参数为可变数据类型时
def func(a,li=[]):
     li.append(a)
     return li
print(func(1))  # [1]
print(func(2))  # [1,2]
print(func(3))  # [1,2,3]

3.函数名的应用

函数名是一个变量
def func():
    print(666)
f1 = func
f2 = f1
f2()
f1()
函数名是一个特殊变量
print(func)  => func = <function func at 0x00000000003F1EA0>
函数名可以作为容器类类型的元素
def func1():
    print('in func1')
def func2():
    print('in func2')
def func3():
    print('in func3')
l = [func1, func2, func3]
print(l)
for i in l:
    i()
函数名可以作为函数的实参
函数名可以作为函数的返回值
def func1():
    print('in func1')
def func2(argv):
    print('in func2')
    return argv
ret = func2(func1)
ret()

4.python新特性(f-string)

加入表达式
s1 = 'alex'
s2 = f'我的名字{s1.upper()}'
print(s2)

l1 = ['蔡徐坤', 18, 176]
s1 = f'我的名字{l1[0]},我的年龄{l1[1]},我的身高{l1[2]}'
print(s1)

可以结合函数
def func(a,b):
    return a + b

s1 = f'最终的结果{func(1,3)}'
print(s1)

不能放一些特殊的字符 ! , : { } ;

5.可迭代对象

定义: 内部含有'__iter__'方法的对象,就是可迭代对象
已学可迭代对象: str,list,dict,tuple,set,range,文件句柄
判断一个对象是否是可迭代对象  =>  print('__iter__' in dir(str))
优点:直观,操作方法多
缺点:占内存,不能迭代取值

6.迭代器

定义:内部含有'__iter__'并且含有"__next__"方法的对象,就是迭代器
可迭代对象转化成迭代器,并利用next()取值
li=[1,2,3,4]
obj=iter(li)
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
优点:非常节省内存;惰性机制
缺点:不直观;操作不灵活;效率相对低
特性:
li = [11,22,33,44,55,66]
obj = iter(li)
for i in range(3):
    print(next(obj))    11 22 33
for i in range(3):
    print(next(obj)     44 55 66
利用while循环,模拟for循环内部循环可迭代对象的机制
1.先要将可迭代对象转化成迭代器
2.利用next对迭代切进行取值
3.利用异常处理防止报错   try:  except StopIteration:
li=[1,2,3,4,5]
obj=iter(li)
while True:
    try:
      print(next(obj))
    except StopIteration:
      break

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

可迭代对象:可迭代对象是一个操作比较灵活,直观,效率相对高,但是比较占用内存的数据集。
迭代器:迭代器是一个非常节省内存,满足惰性机制,但是效率相对低,操作不灵活的数据集。

函数进阶2

标签:cep   stop   比较   python   pytho   while循环   local   新特性   for   

原文地址:https://www.cnblogs.com/wxl1025/p/11052023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!