函数进阶2
Posted wxl1025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数进阶2相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章