函数进阶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的主要内容,如果未能解决你的问题,请参考以下文章

python之函数的进阶(2-2)

C语言指针进阶第五站,函数指针

python进阶一(函数式编程)2-1 python把函数作为参数

js函数进阶

函数进阶

函数—函数进阶